chiark / gitweb /
[PATCH] 052 release
[elogind.git] / namedev_parse.c
index 7190cdd1a8702a538f5f454d96e3ca84a00f7b6f..7b5b963020275eb181c168217044e62593f2cbd5 100644 (file)
@@ -126,14 +126,15 @@ static int namedev_parse(const char *filename, void *data)
        cur = 0;
        lineno = 0;
        while (cur < bufsize) {
+               unsigned int i, j;
+
                count = buf_get_line(buf, bufsize, cur);
                bufline = &buf[cur];
                cur += count+1;
                lineno++;
 
                if (count >= LINE_SIZE) {
-                       info("line too long, rule skipped %s, line %d",
-                            filename, lineno);
+                       info("line too long, rule skipped %s, line %d", filename, lineno);
                        continue;
                }
 
@@ -149,8 +150,14 @@ static int namedev_parse(const char *filename, void *data)
                if (bufline[0] == COMMENT_CHARACTER)
                        continue;
 
-               strncpy(line, bufline, count);
-               line[count] = '\0';
+               /* skip backslash and newline from multi line rules */
+               for (i = j = 0; i < count; i++) {
+                       if (bufline[i] == '\\' || bufline[i] == '\n')
+                               continue;
+
+                       line[j++] = bufline[i];
+               }
+               line[j] = '\0';
                dbg_parse("read '%s'", line);
 
                /* get all known keys */
@@ -243,7 +250,7 @@ static int namedev_parse(const char *filename, void *data)
                                if (attr != NULL) {
                                        if (strstr(attr, ATTR_PARTITIONS) != NULL) {
                                                dbg_parse("creation of partition nodes requested");
-                                               dev.partitions = PARTITIONS_COUNT;
+                                               dev.partitions = DEFAULT_PARTITIONS_COUNT;
                                        }
                                        if (strstr(attr, ATTR_IGNORE_REMOVE) != NULL) {
                                                dbg_parse("remove event should be ignored");
@@ -331,3 +338,14 @@ int namedev_init(void)
 
        return retval;
 }
+
+void namedev_close(void)
+{
+       struct config_device *dev;
+
+       list_for_each_entry(dev, &config_device_list, node) {
+               list_del(&dev->node);
+               free(dev);
+       }
+}
+