diff options
author | kmohan <none@none> | 2005-12-15 10:33:57 -0800 |
---|---|---|
committer | kmohan <none@none> | 2005-12-15 10:33:57 -0800 |
commit | 35551380472894a564e057962b701af78f719377 (patch) | |
tree | 463a704dede02307f7d39e136c85927078fe3024 /usr/src/lib/libfru/libfrupicltree/frupicltree.c | |
parent | a5be7ebb94dde0271db3c498c22a4b6afdb72af3 (diff) | |
download | illumos-joyent-35551380472894a564e057962b701af78f719377.tar.gz |
6325788 Error processing FRU tree: IO error
Diffstat (limited to 'usr/src/lib/libfru/libfrupicltree/frupicltree.c')
-rw-r--r-- | usr/src/lib/libfru/libfrupicltree/frupicltree.c | 88 |
1 files changed, 42 insertions, 46 deletions
diff --git a/usr/src/lib/libfru/libfrupicltree/frupicltree.c b/usr/src/lib/libfru/libfrupicltree/frupicltree.c index 2a21e4b8a4..4e9f781fbd 100644 --- a/usr/src/lib/libfru/libfrupicltree/frupicltree.c +++ b/usr/src/lib/libfru/libfrupicltree/frupicltree.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2000-2002 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -69,6 +69,12 @@ map_plugin_err(int picl_err) return (FRU_DUPSEG); case PICL_NOSPACE: return (FRU_NOSPACE); + case PICL_NORESPONSE: + return (FRU_NORESPONSE); + case PICL_PROPNOTFOUND: + return (FRU_NODENOTFOUND); + case PICL_ENDOFLIST: + return (FRU_DATANOTFOUND); } return (FRU_IOERROR); } @@ -146,7 +152,7 @@ fpt_get_name_from_hdl(fru_treehdl_t node, char **name) /* get the name */ if ((picl_err = get_strprop_by_name(handle, PICL_PROP_NAME, &tmp_name)) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } /* get the label, if any */ @@ -154,7 +160,7 @@ fpt_get_name_from_hdl(fru_treehdl_t node, char **name) &label)) != PICL_SUCCESS) { if (picl_err != PICL_PROPNOTFOUND) { free(tmp_name); - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } /* else PICL_PROPNOTFOUND is OK because not all nodes */ /* will have a label. */ @@ -237,7 +243,7 @@ fpt_get_root(fru_treehdl_t *node) if ((picl_err = ptree_get_propval_by_name(picl_node, PICL_PROP_CHILD, (void *)&picl_node, sizeof (picl_node))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } while (cmp_node_name(picl_node, PICL_NODE_FRUTREE) @@ -248,7 +254,7 @@ fpt_get_root(fru_treehdl_t *node) sizeof (picl_node))) == PICL_PROPNOTFOUND) { return (FRU_NODENOTFOUND); } else if (picl_err != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } } @@ -268,10 +274,7 @@ fpt_get_peer(fru_treehdl_t sibling, fru_treehdl_t *peer) rc = ptree_get_propval_by_name(handle, PICL_PROP_PEER, (void *)&picl_peer, sizeof (picl_peer)); if (rc != PICL_SUCCESS) { - if (rc == PICL_PROPNOTFOUND) - return (FRU_NODENOTFOUND); - else - return (FRU_IOERROR); + return (map_plugin_err(rc)); } *peer = PICLHDL_TO_TREEHDL(picl_peer); @@ -286,10 +289,7 @@ fpt_get_child(fru_treehdl_t handle, fru_treehdl_t *child) int rc = ptree_get_propval_by_name(TREEHDL_TO_PICLHDL(handle), PICL_PROP_CHILD, (void *)&p_child, sizeof (p_child)); if (rc != PICL_SUCCESS) { - if (rc == PICL_PROPNOTFOUND) - return (FRU_NODENOTFOUND); - else - return (FRU_IOERROR); + return (map_plugin_err(rc)); } *child = PICLHDL_TO_TREEHDL(p_child); @@ -311,10 +311,7 @@ fpt_get_parent(fru_treehdl_t handle, fru_treehdl_t *parent) rc = ptree_get_propval_by_name(TREEHDL_TO_PICLHDL(handle), PICL_PROP_PARENT, (void *)&p_parent, sizeof (p_parent)); if (rc != PICL_SUCCESS) { - if (rc == PICL_PROPNOTFOUND) - return (FRU_NODENOTFOUND); - else - return (FRU_IOERROR); + return (map_plugin_err(rc)); } *parent = PICLHDL_TO_TREEHDL(p_parent); @@ -325,12 +322,13 @@ fpt_get_parent(fru_treehdl_t handle, fru_treehdl_t *parent) static fru_errno_t fpt_get_node_type(fru_treehdl_t node, fru_node_t *type) { + int rc = PICL_SUCCESS; char picl_class[PICL_PROPNAMELEN_MAX]; picl_nodehdl_t handle = TREEHDL_TO_PICLHDL(node); - if (ptree_get_propval_by_name(handle, PICL_PROP_CLASSNAME, - picl_class, sizeof (picl_class)) != PICL_SUCCESS) { - return (FRU_IOERROR); + if ((rc = ptree_get_propval_by_name(handle, PICL_PROP_CLASSNAME, + picl_class, sizeof (picl_class))) != PICL_SUCCESS) { + return (map_plugin_err(rc)); } if (strcmp(picl_class, PICL_CLASS_LOCATION) == 0) { @@ -460,11 +458,12 @@ get_segment_node(picl_nodehdl_t handle, const char *segment, return (FRU_SEGCORRUPT); } /* get the HW protections of this section. */ - if (ptree_get_propval_by_name(sect_node, + if ((rc = ptree_get_propval_by_name(sect_node, PICL_PROP_PROTECTED, (void *)&protection, - sizeof (protection)) != PICL_SUCCESS) { - return (FRU_IOERROR); + sizeof (protection))) + != PICL_SUCCESS) { + return (map_plugin_err(rc)); } hw_desc->all_bits = 0; hw_desc->field.read_only = protection; @@ -478,7 +477,7 @@ get_segment_node(picl_nodehdl_t handle, const char *segment, /* Peer property not found is ok */ if (rc != PICL_PROPNOTFOUND) { - return (FRU_IOERROR); + return (map_plugin_err(rc)); } err = find_next_section(sect_node, §_node); @@ -545,7 +544,7 @@ add_segs_for_section(picl_nodehdl_t section, fru_strlist_t *list) /* Peer property not found is ok */ if (rc != PICL_PROPNOTFOUND) { - return (FRU_IOERROR); + return (map_plugin_err(rc)); } } @@ -609,19 +608,19 @@ fpt_get_seg_def(fru_treehdl_t handle, const char *seg_name, fru_segdef_t *def) if ((picl_err = ptree_get_propval_by_name(seg_node, PICL_PROP_DESCRIPTOR, &desc, sizeof (desc))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if ((picl_err = ptree_get_propval_by_name(seg_node, PICL_PROP_LENGTH, &size, sizeof (size))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if ((picl_err = ptree_get_propval_by_name(seg_node, PICL_PROP_OFFSET, &address, sizeof (address))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } def->version = LIBFRU_VERSION; @@ -709,12 +708,12 @@ fpt_add_tag_to_seg(fru_treehdl_t handle, const char *seg_name, if ((picl_err = ptree_get_prop_by_name(segHdl, PICL_PROP_ADD_PACKET, &add_prop)) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if ((picl_err = ptree_get_propinfo(add_prop, &add_prop_info)) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } buf_size = add_prop_info.piclinfo.size; @@ -762,7 +761,7 @@ fpt_get_tag_list(fru_treehdl_t handle, const char *seg_name, PICL_PROP_NUM_TAGS, (void *)&total_tags, sizeof (total_tags))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if (total_tags == 0) { @@ -781,7 +780,7 @@ fpt_get_tag_list(fru_treehdl_t handle, const char *seg_name, PICL_PROP_PACKET_TABLE, &tagTable, sizeof (tagTable))) != PICL_SUCCESS) { free(rc_tags); - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } picl_err = ptree_get_next_by_col(tagTable, &tagTable); while (picl_err == PICL_SUCCESS) { @@ -795,7 +794,7 @@ fpt_get_tag_list(fru_treehdl_t handle, const char *seg_name, (void *)&(rc_tags[rc_num++]), sizeof (fru_tag_t))) != PICL_SUCCESS) { free(rc_tags); - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } /* get the next tag */ picl_err = ptree_get_next_by_col(tagTable, &tagTable); @@ -806,7 +805,7 @@ fpt_get_tag_list(fru_treehdl_t handle, const char *seg_name, *number = rc_num; return (FRU_SUCCESS); } - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } /* ========================================================================= */ @@ -838,7 +837,7 @@ get_tag_handle(picl_nodehdl_t handle, const char *segment, if ((picl_err = ptree_get_propval_by_name(tmp_seg, PICL_PROP_PACKET_TABLE, &tagTable, sizeof (tagTable))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } picl_err = ptree_get_next_by_col(tagTable, &tagTable); @@ -846,7 +845,7 @@ get_tag_handle(picl_nodehdl_t handle, const char *segment, (picl_err == PICL_SUCCESS)) { if ((picl_err = ptree_get_propval(tagTable, (void *)&foundTag, sizeof (foundTag))) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if ((tags_equal(tag, foundTag) == 1) && (instance-- == 0)) { *segHdl = tmp_seg; @@ -856,10 +855,7 @@ get_tag_handle(picl_nodehdl_t handle, const char *segment, picl_err = ptree_get_next_by_col(tagTable, &tagTable); } - if (picl_err == PICL_ENDOFLIST) - return (FRU_DATANOTFOUND); - - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } /* ========================================================================= */ @@ -883,7 +879,7 @@ fpt_get_tag_data(fru_treehdl_t handle, const char *seg_name, if ((picl_err = ptree_get_next_by_row(tagHdl, &tagHdl)) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } buf_len = get_payload_length(&tag); @@ -922,7 +918,7 @@ fpt_set_tag_data(fru_treehdl_t handle, const char *seg_name, if ((picl_err = ptree_get_next_by_row(tagHdl, &tagHdl)) != PICL_SUCCESS) { - return (FRU_IOERROR); + return (map_plugin_err(picl_err)); } if ((picl_err = ptree_update_propval(tagHdl, data, data_len)) @@ -1043,13 +1039,13 @@ fpt_get_segment_name(fru_treeseghdl_t segment, char **name) ptree_propinfo_t propinfo; - if (ptree_get_prop_by_name(TREESEGHDL_TO_PICLHDL(segment), - PICL_PROP_NAME, &proph) + if ((status = ptree_get_prop_by_name(TREESEGHDL_TO_PICLHDL(segment), + PICL_PROP_NAME, &proph)) != PICL_SUCCESS) - return (FRU_IOERROR); + return (map_plugin_err(status)); if (ptree_get_propinfo(proph, &propinfo) != PICL_SUCCESS) - return (FRU_IOERROR); + return (map_plugin_err(status)); if (propinfo.piclinfo.size == 0) return (FRU_INVALDATASIZE); |