chiark / gitweb /
fix off-by-one in pass_env_to_socket()
[elogind.git] / udev / udev_rules.c
index b864599a9d5d980526d6b7560e20f609107ce893..3b9631b883c67e98b07676dc3575f54d42dae2b8 100644 (file)
@@ -486,10 +486,10 @@ static int pass_env_to_socket(struct udev *udev, const char *sockpath, const cha
                saddrlen = offsetof(struct sockaddr_un, sun_path) + 1 + strlen(&saddr.sun_path[1]);
        }
 
-       bufpos = snprintf(buf, sizeof(buf)-1, "%s@%s", action, devpath);
+       bufpos = snprintf(buf, sizeof(buf), "%s@%s", action, devpath);
        bufpos++;
-       for (i = 0; environ[i] != NULL && bufpos < (sizeof(buf)-1); i++) {
-               bufpos += strlcpy(&buf[bufpos], environ[i], sizeof(buf) - bufpos-1);
+       for (i = 0; environ[i] != NULL && bufpos < (sizeof(buf)); i++) {
+               bufpos += strlcpy(&buf[bufpos], environ[i], sizeof(buf) - bufpos);
                bufpos++;
        }
        if (bufpos > sizeof(buf))
@@ -850,10 +850,8 @@ found:
                                        do {
                                                dbg(udevice->udev, "looking at '%s'\n", dev_parent->devpath);
                                                value = sysfs_attr_get_value(udevice->udev, dev_parent->devpath, attr);
-                                               if (value != NULL) {
-                                                       strlcpy(temp2, value, sizeof(temp2));
+                                               if (value != NULL)
                                                        break;
-                                               }
                                                dev_parent = sysfs_device_get_parent(udevice->udev, dev_parent);
                                        } while (dev_parent != NULL);
                                }
@@ -1370,6 +1368,7 @@ nomatch:
 
 int udev_rules_get_name(struct udev_rules *rules, struct udevice *udevice)
 {
+       struct udev_rules_iter iter;
        struct udev_rule *rule;
        int name_set = 0;
 
@@ -1377,9 +1376,9 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udevice)
        dbg(udevice->udev, "udevice->dev->kernel='%s'\n", udevice->dev->kernel);
 
        /* look for a matching rule to apply */
-       udev_rules_iter_init(rules);
+       udev_rules_iter_init(&iter, rules);
        while (1) {
-               rule = udev_rules_iter_next(rules);
+               rule = udev_rules_iter_next(&iter);
                if (rule == NULL)
                        break;
 
@@ -1532,7 +1531,7 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udevice)
 
                        if (rule->goto_label.operation != KEY_OP_UNSET) {
                                dbg(udevice->udev, "moving forward to label '%s'\n", key_val(rule, &rule->goto_label));
-                               udev_rules_iter_label(rules, key_val(rule, &rule->goto_label));
+                               udev_rules_iter_label(&iter, key_val(rule, &rule->goto_label));
                        }
                }
        }
@@ -1553,14 +1552,15 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udevice)
 
 int udev_rules_get_run(struct udev_rules *rules, struct udevice *udevice)
 {
+       struct udev_rules_iter iter;
        struct udev_rule *rule;
 
        dbg(udevice->udev, "udevice->kernel='%s'\n", udevice->dev->kernel);
 
        /* look for a matching rule to apply */
-       udev_rules_iter_init(rules);
+       udev_rules_iter_init(&iter, rules);
        while (1) {
-               rule = udev_rules_iter_next(rules);
+               rule = udev_rules_iter_next(&iter);
                if (rule == NULL)
                        break;
 
@@ -1611,7 +1611,7 @@ int udev_rules_get_run(struct udev_rules *rules, struct udevice *udevice)
 
                        if (rule->goto_label.operation != KEY_OP_UNSET) {
                                dbg(udevice->udev, "moving forward to label '%s'\n", key_val(rule, &rule->goto_label));
-                               udev_rules_iter_label(rules, key_val(rule, &rule->goto_label));
+                               udev_rules_iter_label(&iter, key_val(rule, &rule->goto_label));
                        }
                }
        }