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:
parent
25eca7ce35
commit
4dbb641bb2
|
@ -172,12 +172,38 @@ config_odev_find_or_add_attribute(struct OdevAttributes *attribs, int attrib)
|
||||||
return oa;
|
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
|
Bool
|
||||||
config_odev_add_attribute(struct OdevAttributes *attribs, int attrib,
|
config_odev_add_attribute(struct OdevAttributes *attribs, int attrib,
|
||||||
const char *attrib_name)
|
const char *attrib_name)
|
||||||
{
|
{
|
||||||
struct OdevAttribute *oa;
|
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);
|
oa = config_odev_find_or_add_attribute(attribs, attrib);
|
||||||
free(oa->attrib_name);
|
free(oa->attrib_name);
|
||||||
oa->attrib_name = XNFstrdup(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;
|
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 = config_odev_find_or_add_attribute(attribs, attrib);
|
||||||
oa->attrib_value = attrib_value;
|
oa->attrib_value = attrib_value;
|
||||||
oa->attrib_type = ODEV_ATTRIB_INT;
|
oa->attrib_type = ODEV_ATTRIB_INT;
|
||||||
|
|
|
@ -32,7 +32,7 @@ extern _X_EXPORT void config_pre_init(void);
|
||||||
extern _X_EXPORT void config_init(void);
|
extern _X_EXPORT void config_init(void);
|
||||||
extern _X_EXPORT void config_fini(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 OdevAttribute {
|
||||||
struct xorg_list member;
|
struct xorg_list member;
|
||||||
|
|
Loading…
Reference in New Issue