chiark / gitweb /
[PATCH] add udevinfo to install target of Makefile
[elogind.git] / namedev_parse.c
index 98e822dfef4bd82c34350179602b6e02d780b741..e6575fa108431958e33d0a283b2c7bd20935f4ba 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace devfs
  *
- * Copyright (C) 2003 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (C) 2003,2004 Greg Kroah-Hartman <greg@kroah.com>
  *
  *
  *     This program is free software; you can redistribute it and/or modify it
  *
  */
 
-/* define this to enable parsing debugging */
+#ifdef DEBUG
+/* define this to enable parsing debugging also */
 /* #define DEBUG_PARSER */
+#endif
 
 #include <stddef.h>
 #include <stdlib.h>
@@ -34,6 +36,7 @@
 #include <errno.h>
 
 #include "udev.h"
+#include "logging.h"
 #include "namedev.h"
 
 static int add_config_dev(struct config_device *new_dev)
@@ -49,41 +52,6 @@ static int add_config_dev(struct config_device *new_dev)
        return 0;
 }
 
-int get_pair(char **orig_string, char **left, char **right)
-{
-       char *temp;
-       char *string = *orig_string;
-
-       if (!string)
-               return -ENODEV;
-
-       /* eat any whitespace */
-       while (isspace(*string) || *string == ',')
-               ++string;
-
-       /* split based on '=' */
-       temp = strsep(&string, "=");
-       *left = temp;
-       if (!string)
-               return -ENODEV;
-
-       /* take the right side and strip off the '"' */
-       while (isspace(*string))
-               ++string;
-       if (*string == '"')
-               ++string;
-       else
-               return -ENODEV;
-
-       temp = strsep(&string, "\"");
-       if (!string || *temp == '\0')
-               return -ENODEV;
-       *right = temp;
-       *orig_string = string;
-       
-       return 0;
-}
-
 void dump_config_dev(struct config_device *dev)
 {
        /*FIXME dump all sysfs's */
@@ -117,7 +85,6 @@ void dump_perm_dev_list(void)
                dump_perm_dev(dev);
 }
 
-
 int namedev_init_rules(void)
 {
        char line[255];
@@ -164,7 +131,7 @@ int namedev_init_rules(void)
 
                /* get all known keys */
                while (1) {
-                       retval = get_pair(&temp, &temp2, &temp3);
+                       retval = parse_get_pair(&temp, &temp2, &temp3);
                        if (retval)
                                break;
 
@@ -230,7 +197,9 @@ int namedev_init_rules(void)
                                continue;
                        }
 
-                       dbg_parse("unknown type of field '%s'", temp2);
+                       dbg("unknown type of field '%s'", temp2);
+                       dbg("You might be using a rules file in the old format, please fix.");
+                       goto error;
                }
 
                /* simple plausibility check for given keys */
@@ -245,12 +214,13 @@ int namedev_init_rules(void)
                        goto error;
                }
 
+               dev.config_line = lineno;
                retval = add_config_dev(&dev);
                if (retval) {
                        dbg("add_config_dev returned with error %d", retval);
                        continue;
 error:
-                       dbg("%s:%d:%Zd: parse error, rule skipped",
+                       dbg("%s:%d:%d: parse error, rule skipped",
                                  udev_rules_filename, lineno, temp - line);
                }
        }
@@ -318,7 +288,7 @@ int namedev_init_permissions(void)
                        dbg("cannot parse line '%s'", line);
                        continue;
                }
-               strncpy(dev.group, temp2, sizeof(dev.owner));
+               strncpy(dev.group, temp2, sizeof(dev.group));
 
                if (!temp) {
                        dbg("cannot parse line: %s", line);
@@ -339,6 +309,5 @@ int namedev_init_permissions(void)
 exit:
        fclose(fd);
        return retval;
-}      
-
+}