config_odev_add_attribute*: Check for right attribute type

Don't allow setting string attributes to integers and vice versa.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Hans de Goede 2014-07-14 14:01:47 +02:00 committed by Keith Packard
parent 25eca7ce35
commit 4dbb641bb2
2 changed files with 33 additions and 1 deletions

View File

@ -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;

View File

@ -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;