X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev_parse.c;h=b5d0d64b9da57e97c29edf40e079a9e1f2587d2e;hb=dbc9b3f3a20520db6fcf791a3663ab943fc193d9;hp=a752b33050cb5b939ceba85cba674ea3cdb703ea;hpb=19feb35100f602d2e9e4148d9e22548dae5a01d3;p=elogind.git diff --git a/namedev_parse.c b/namedev_parse.c index a752b3305..b5d0d64b9 100644 --- a/namedev_parse.c +++ b/namedev_parse.c @@ -36,7 +36,7 @@ #include "udev.h" #include "namedev.h" -static int get_pair(char **orig_string, char **left, char **right) +int get_pair(char **orig_string, char **left, char **right) { char *temp; char *string = *orig_string; @@ -88,39 +88,27 @@ void dump_config_dev(struct config_device *dev) { switch (dev->type) { case KERNEL_NAME: - dbg_parse("KERNEL name='%s' ," - "owner='%s', group='%s', mode=%#o", - dev->name, dev->owner, dev->group, dev->mode); + dbg_parse("KERNEL name='%s'", dev->name); break; case LABEL: - dbg_parse("LABEL name='%s', bus='%s', sysfs_file='%s', sysfs_value='%s', " - "owner='%s', group='%s', mode=%#o", - dev->name, dev->bus, dev->sysfs_file, dev->sysfs_value, - dev->owner, dev->group, dev->mode); + dbg_parse("LABEL name='%s', bus='%s', sysfs_file='%s', sysfs_value='%s'", + dev->name, dev->bus, dev->sysfs_file, dev->sysfs_value); break; case NUMBER: - dbg_parse("NUMBER name='%s', bus='%s', id='%s', " - "owner='%s', group='%s', mode=%#o", - dev->name, dev->bus, dev->id, - dev->owner, dev->group, dev->mode); + dbg_parse("NUMBER name='%s', bus='%s', id='%s'", + dev->name, dev->bus, dev->id); break; case TOPOLOGY: - dbg_parse("TOPOLOGY name='%s', bus='%s', place='%s', " - "owner='%s', group='%s', mode=%#o", - dev->name, dev->bus, dev->place, - dev->owner, dev->group, dev->mode); + dbg_parse("TOPOLOGY name='%s', bus='%s', place='%s'", + dev->name, dev->bus, dev->place); break; case REPLACE: - dbg_parse("REPLACE name=%s, kernel_name=%s, " - "owner='%s', group='%s', mode=%#o", - dev->name, dev->kernel_name, - dev->owner, dev->group, dev->mode); + dbg_parse("REPLACE name=%s, kernel_name=%s", + dev->name, dev->kernel_name); break; case CALLOUT: - dbg_parse("CALLOUT name='%s', bus='%s', program='%s', id='%s', " - "owner='%s', group='%s', mode=%#o", - dev->name, dev->bus, dev->exec_program, dev->id, - dev->owner, dev->group, dev->mode); + dbg_parse("CALLOUT name='%s', bus='%s', program='%s', id='%s'", + dev->name, dev->bus, dev->exec_program, dev->id); break; default: dbg_parse("unknown type of method"); @@ -136,8 +124,25 @@ void dump_config_dev_list(void) dump_config_dev(dev); } } - -int namedev_init_config(void) + +void dump_perm_dev(struct perm_device *dev) +{ + dbg_parse("name='%s', owner='%s', group='%s', mode=%#o", + dev->name, dev->owner, dev->group, dev->mode); +} + +void dump_perm_dev_list(void) +{ + struct list_head *tmp; + + list_for_each(tmp, &perm_device_list) { + struct perm_device *dev = list_entry(tmp, struct perm_device, node); + dump_perm_dev(dev); + } +} + + +int namedev_init_rules(void) { char line[255]; int lineno; @@ -148,10 +153,11 @@ int namedev_init_config(void) int retval = 0; struct config_device dev; - dbg("opening '%s' to read as config", udev_config_filename); - fd = fopen(udev_config_filename, "r"); - if (fd == NULL) { - dbg("can't open '%s'", udev_config_filename); + fd = fopen(udev_rules_filename, "r"); + if (fd != NULL) { + dbg("reading '%s' as rules file", udev_rules_filename); + } else { + dbg("can't open '%s' as a rules file", udev_rules_filename); return -ENODEV; } @@ -207,10 +213,16 @@ int namedev_init_config(void) break; strfieldcpy(dev.name, temp3); + /* SYMLINK="name" */ + temp2 = strsep(&temp, ","); + retval = get_value("SYMLINK", &temp, &temp3); + if (retval == 0) + strfieldcpy(dev.symlink, temp3); + dbg_parse("LABEL name='%s', bus='%s', " - "sysfs_file='%s', sysfs_value='%s'", + "sysfs_file='%s', sysfs_value='%s', symlink='%s'", dev.name, dev.bus, dev.sysfs_file, - dev.sysfs_value); + dev.sysfs_value, dev.symlink); } if (strcasecmp(temp2, TYPE_NUMBER) == 0) { @@ -237,8 +249,14 @@ int namedev_init_config(void) break; strfieldcpy(dev.name, temp3); - dbg_parse("NUMBER name='%s', bus='%s', id='%s'", - dev.name, dev.bus, dev.id); + /* SYMLINK="name" */ + temp2 = strsep(&temp, ","); + retval = get_value("SYMLINK", &temp, &temp3); + if (retval == 0) + strfieldcpy(dev.symlink, temp3); + + dbg_parse("NUMBER name='%s', bus='%s', id='%s', symlink='%s'", + dev.name, dev.bus, dev.id, dev.symlink); } if (strcasecmp(temp2, TYPE_TOPOLOGY) == 0) { @@ -265,8 +283,15 @@ int namedev_init_config(void) break; strfieldcpy(dev.name, temp3); - dbg_parse("TOPOLOGY name='%s', bus='%s', place='%s'", - dev.name, dev.bus, dev.place); + /* SYMLINK="name" */ + temp2 = strsep(&temp, ","); + retval = get_value("SYMLINK", &temp, &temp3); + if (retval == 0) + strfieldcpy(dev.symlink, temp3); + + dbg_parse("TOPOLOGY name='%s', bus='%s', " + "place='%s', symlink='%s'", + dev.name, dev.bus, dev.place, dev.symlink); } if (strcasecmp(temp2, TYPE_REPLACE) == 0) { @@ -285,9 +310,17 @@ int namedev_init_config(void) if (retval) break; strfieldcpy(dev.name, temp3); - dbg_parse("REPLACE name='%s', kernel_name='%s'", - dev.name, dev.kernel_name); + + /* SYMLINK="name" */ + temp2 = strsep(&temp, ","); + retval = get_value("SYMLINK", &temp, &temp3); + if (retval == 0) + strfieldcpy(dev.symlink, temp3); + + dbg_parse("REPLACE name='%s', kernel_name='%s', symlink='%s'", + dev.name, dev.kernel_name, dev.symlink); } + if (strcasecmp(temp2, TYPE_CALLOUT) == 0) { /* number type */ dev.type = CALLOUT; @@ -318,8 +351,17 @@ int namedev_init_config(void) if (retval) break; strfieldcpy(dev.name, temp3); - dbg_parse("CALLOUT name='%s', program='%s'", - dev.name, dev.exec_program); + + /* SYMLINK="name" */ + temp2 = strsep(&temp, ","); + retval = get_value("SYMLINK", &temp, &temp3); + if (retval == 0) + strfieldcpy(dev.symlink, temp3); + + dbg_parse("CALLOUT name='%s', bus='%s', program='%s', " + "id='%s', symlink='%s'", + dev.name, dev.bus, dev.exec_program, + dev.id, dev.symlink); } retval = add_config_dev(&dev); @@ -328,7 +370,7 @@ int namedev_init_config(void) goto exit; } } - dbg_parse("%s:%d:%Zd: error parsing '%s'", udev_config_filename, + dbg_parse("%s:%d:%Zd: error parsing '%s'", udev_rules_filename, lineno, temp - line, temp); exit: fclose(fd); @@ -343,12 +385,13 @@ int namedev_init_permissions(void) char *temp2; FILE *fd; int retval = 0; - struct config_device dev; + struct perm_device dev; - dbg("opening '%s' to read as permissions config", udev_config_permission_filename); - fd = fopen(udev_config_permission_filename, "r"); - if (fd == NULL) { - dbg("can't open '%s'", udev_config_permission_filename); + fd = fopen(udev_permissions_filename, "r"); + if (fd != NULL) { + dbg("reading '%s' as permissions file", udev_permissions_filename); + } else { + dbg("can't open '%s' as permissions file", udev_permissions_filename); return -ENODEV; } @@ -405,9 +448,9 @@ int namedev_init_permissions(void) dbg_parse("name='%s', owner='%s', group='%s', mode=%#o", dev.name, dev.owner, dev.group, dev.mode); - retval = add_config_dev(&dev); + retval = add_perm_dev(&dev); if (retval) { - dbg("add_config_dev returned with error %d", retval); + dbg("add_perm_dev returned with error %d", retval); goto exit; } }