#include "avs-util/error.h" #include "util/defs.h" struct avs_util_avs_error_str { avs_error error; const char *msg; }; static const char *avs_util_error_unknown = "unknown error"; // Source: https://github.com/spicetools/spicetools static const struct avs_util_avs_error_str AVS_UTIL_ERRORS[] = { {0x80092000, "invalid type"}, {0x80092001, "type cannot use as array"}, {0x80092002, "invalid"}, {0x80092003, "too large data size"}, {0x80092004, "too small buffer size"}, {0x80092005, "passcode 0 is not allowed"}, {0x80092040, "invalid node name"}, {0x80092041, "invalid attribute name"}, {0x80092042, "reserved attribute name"}, {0x80092043, "cannot find node/attribute"}, {0x80092080, "cannot allocate node"}, {0x80092081, "cannot allocate node value"}, {0x80092082, "cannot allocate mdigest for finger-print"}, {0x80092083, "cannot allocate nodename"}, {0x800920C0, "node type differs"}, {0x800920C1, "node type is VOID"}, {0x800920C2, "node is array"}, {0x800920C3, "node is not array"}, {0x80092100, "node is create-disabled"}, {0x80092101, "node is read-disabled"}, {0x80092102, "node is write-disabled"}, {0x80092103, "flag is already locked"}, {0x80092104, "passcode differs"}, {0x80092105, "insert_read() is applied to attribute"}, {0x80092106, "part_write() is applied to attribute"}, {0x80092107, "MODE_EXTEND flag differs"}, {0x80092140, "root node already exists"}, {0x80092141, "attribute cannot have children"}, {0x80092142, "node/attribute already exists"}, {0x80092143, "number of nodes exceeds 65535"}, {0x80092144, "cannot interpret as number"}, {0x80092145, "property is empty"}, {0x80092180, "I/O error"}, {0x80092181, "unexpected EOF"}, {0x80092182, "unknown format"}, {0x800921C0, "broken magic"}, {0x800921C1, "broken metadata"}, {0x800921C2, "broken databody"}, {0x800921C3, "invalid type"}, {0x800921C4, "too large data size"}, {0x800921C5, "too long node/attribute name"}, {0x800921C6, "attribute name is too long"}, {0x800921C7, "node/attribute already exists"}, {0x80092200, "invalid encoding"}, {0x80092201, "invalid XML token"}, {0x80092202, "XML syntax error"}, {0x80092203, "start tag / end tag mismatch"}, {0x80092204, "too large node data (__size mismatch)"}, {0x80092205, "too deep node tree"}, {0x80092206, "invalid type"}, {0x80092207, "invalid size"}, {0x80092208, "invalid count"}, {0x80092209, "invalid value"}, {0x8009220A, "invalid node name"}, {0x8009220B, "invalid attribute name"}, {0x8009220C, "reserved attribute name"}, {0x8009220D, "node/attribute already exists"}, {0x8009220E, "too many elements in node data"}, {0x80092240, "JSON syntax error"}, {0x80092241, "invalid JSON literal"}, {0x80092242, "invalid JSON number"}, {0x80092243, "invalid JSON string"}, {0x80092244, "invalid JSON object name"}, {0x80092245, "object name already exists"}, {0x80092246, "too long JSON object name"}, {0x80092247, "too deep JSON object/array nesting"}, {0x80092248, "cannot convert JSON array to property"}, {0x80092249, "cannot convert empty JSON object to property"}, {0x8009224A, "root node already exists"}, {0x8009224B, "cannot convert root node to TYPE_ARRAY"}, {0x8009224C, "name represents reserved attribute"}, {0x80092280, "finger-print differs"}, {0x800922C0, "operation is not supported"}}; const char *avs_util_error_str(avs_error error) { int i; for (i = 0; i < lengthof(AVS_UTIL_ERRORS); i++) { if (error == AVS_UTIL_ERRORS[i].error) { return AVS_UTIL_ERRORS[i].msg; } } return avs_util_error_unknown; } const char *avs_util_property_error_get_and_clear(struct property *prop) { avs_error error; error = property_get_error(prop); property_clear_error(prop); return avs_util_error_str(error); }