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]);
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);