chiark / gitweb /
[PATCH] correct correction for error path for PROGRAM execution
[elogind.git] / udev_rules.c
index b7905477de8b8dc3531b9dcd24a83ed343bd485b..2b5c411d963e7af71e7e66176a8d5e27657aac4c 100644 (file)
@@ -415,11 +415,12 @@ static int execute_program(struct udevice *udev, const char *path, char *value,
                dup2(fds[1], STDOUT_FILENO);
                retval = execv(arg, argv);
 
-               info(KEY_PROGRAM " execution of '%s' failed", path);
-               exit(1);
+               err("exec of program failed");
+               _exit(1);
        case -1:
                err("fork of '%s' failed", path);
-               return -1;
+               retval = -1;
+               break;
        default:
                /* parent reads from fds[0] */
                close(fds[1]);
@@ -594,15 +595,16 @@ static int match_rule(struct udevice *udev, struct udev_rule *rule,
                        for (i = 0; i < rule->sysfs_pair_count; i++) {
                                struct key_pair *pair;
                                char value[VALUE_SIZE];
+                               size_t len;
 
                                pair = &rule->sysfs_pair[i];
                                if (find_sysfs_attribute(class_dev, parent_device, pair->name, value, sizeof(value)) != 0)
                                        goto try_parent;
 
                                /* strip trailing whitespace of value, if not asked to match for it */
-                               if (!isspace(pair->value[strlen(pair->value)-1])) {
-                                       size_t len = strlen(value);
-
+                               len = strlen(pair->value);
+                               if (len && !isspace(pair->value[len-1])) {
+                                       len = strlen(value);
                                        while (len > 0 && isspace(value[len-1]))
                                                value[--len] = '\0';
                                        dbg("removed %i trailing whitespace chars from '%s'", strlen(value)-len, value);