-
-static int get_pair(char **orig_string, char **left, char **right)
-{
- char *temp;
- char *string = *orig_string;
-
- /* eat any whitespace */
- while (isspace(*string))
- ++string;
-
- /* split based on '=' */
- temp = strsep(&string, "=");
- *left = temp;
-
- /* take the right side and strip off the '"' */
- while (isspace(*string))
- ++string;
- if (*string == '"')
- ++string;
- temp = strsep(&string, "\"");
- *right = temp;
- *orig_string = string;
-
- return 0;
-}
-
-static int namedev_init_config(void)
-{
- char filename[255];
- char line[255];
- char *temp;
- char *temp2;
- char *temp3;
- FILE *fd;
- int retval = 0;
- struct config_device dev;
-
- strcpy(filename, NAMEDEV_CONFIG_ROOT NAMEDEV_CONFIG_FILE);
- dbg("opening %s to read as permissions config", filename);
- fd = fopen(filename, "r");
- if (fd == NULL) {
- dbg("Can't open %s", filename);
- return -ENODEV;
- }
-
- /* loop through the whole file */
- while (1) {
- /* get a line */
- temp = fgets(line, sizeof(line), fd);
- if (temp == NULL)
- break;
-
- dbg("read %s", temp);
-
- /* eat the whitespace at the beginning of the line */
- while (isspace(*temp))
- ++temp;
-
- /* no more line? */
- if (*temp == 0x00)
- continue;
-
- /* see if this is a comment */
- if (*temp == COMMENT_CHARACTER)
- continue;
-
- memset(&dev, 0x00, sizeof(struct config_device));
-
- /* parse the line */
- temp2 = strsep(&temp, ",");
- if (strcasecmp(temp2, TYPE_LABEL) == 0) {
- /* label type */
- dev.type = LABEL;
-
- /* BUS="bus" */
- retval = get_value("BUS", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.bus, temp3);
-
- /* file="value" */
- temp2 = strsep(&temp, ",");
- retval = get_pair(&temp, &temp2, &temp3);
- if (retval)
- continue;
- strcpy(dev.sysfs_file, temp2);
- strcpy(dev.sysfs_value, temp3);
-
- /* NAME="new_name" */
- temp2 = strsep(&temp, ",");
- retval = get_value("NAME", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.attr.name, temp3);
-
- dbg("LABEL name = '%s', bus = '%s', sysfs_file = '%s', sysfs_value = '%s'", dev.attr.name, dev.bus, dev.sysfs_file, dev.sysfs_value);
- }
-
- if (strcasecmp(temp2, TYPE_NUMBER) == 0) {
- /* number type */
- dev.type = NUMBER;
-
- /* BUS="bus" */
- retval = get_value("BUS", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.bus, temp3);
-
- /* ID="id" */
- temp2 = strsep(&temp, ",");
- retval = get_value("id", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.id, temp3);
-
- /* NAME="new_name" */
- temp2 = strsep(&temp, ",");
- retval = get_value("NAME", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.attr.name, temp3);
-
- dbg("NUMBER name = '%s', bus = '%s', id = '%s'", dev.attr.name, dev.bus, dev.id);
- }
-
- if (strcasecmp(temp2, TYPE_TOPOLOGY) == 0) {
- /* number type */
- dev.type = TOPOLOGY;
-
- /* BUS="bus" */
- retval = get_value("BUS", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.bus, temp3);
-
- /* PLACE="place" */
- temp2 = strsep(&temp, ",");
- retval = get_value("place", &temp, &temp3);
- if (retval)
- continue;
- strcpy(dev.place, temp3);