diff options
-rw-r--r-- | config/config.c | 32 | ||||
-rw-r--r-- | include/hotplug.h | 2 |
2 files changed, 33 insertions, 1 deletions
diff --git a/config/config.c b/config/config.c index 551451623..a26d835e1 100644 --- a/config/config.c +++ b/config/config.c @@ -172,12 +172,38 @@ config_odev_find_or_add_attribute(struct OdevAttributes *attribs, int attrib) return oa; } +static int config_odev_get_attribute_type(int attrib) +{ + switch (attrib) { + case ODEV_ATTRIB_PATH: + case ODEV_ATTRIB_SYSPATH: + case ODEV_ATTRIB_BUSID: + return ODEV_ATTRIB_STRING; + case ODEV_ATTRIB_FD: + case ODEV_ATTRIB_MAJOR: + case ODEV_ATTRIB_MINOR: + return ODEV_ATTRIB_INT; + case ODEV_ATTRIB_DRIVER: + return ODEV_ATTRIB_STRING; + default: + LogMessage(X_ERROR, "Error %s called for unknown attribute %d\n", + __func__, attrib); + return ODEV_ATTRIB_UNKNOWN; + } +} + Bool config_odev_add_attribute(struct OdevAttributes *attribs, int attrib, const char *attrib_name) { struct OdevAttribute *oa; + if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_STRING) { + LogMessage(X_ERROR, "Error %s called for non string attrib %d\n", + __func__, attrib); + return FALSE; + } + oa = config_odev_find_or_add_attribute(attribs, attrib); free(oa->attrib_name); oa->attrib_name = XNFstrdup(attrib_name); @@ -191,6 +217,12 @@ config_odev_add_int_attribute(struct OdevAttributes *attribs, int attrib, { struct OdevAttribute *oa; + if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_INT) { + LogMessage(X_ERROR, "Error %s called for non integer attrib %d\n", + __func__, attrib); + return FALSE; + } + oa = config_odev_find_or_add_attribute(attribs, attrib); oa->attrib_value = attrib_value; oa->attrib_type = ODEV_ATTRIB_INT; diff --git a/include/hotplug.h b/include/hotplug.h index b2c0d78a5..4c2fa970c 100644 --- a/include/hotplug.h +++ b/include/hotplug.h @@ -32,7 +32,7 @@ extern _X_EXPORT void config_pre_init(void); extern _X_EXPORT void config_init(void); extern _X_EXPORT void config_fini(void); -enum { ODEV_ATTRIB_STRING, ODEV_ATTRIB_INT }; +enum { ODEV_ATTRIB_UNKNOWN = -1, ODEV_ATTRIB_STRING = 0, ODEV_ATTRIB_INT }; struct OdevAttribute { struct xorg_list member; |