chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
run_program: log "info" not "error" if program is missing
[elogind.git]
/
udev_rules.c
diff --git
a/udev_rules.c
b/udev_rules.c
index 6bd28ad4b7981a5ee136d38c6a80cd666b416fa6..edfe3fd94cb0102e8701c6f05cba23da7da70d07 100644
(file)
--- a/
udev_rules.c
+++ b/
udev_rules.c
@@
-79,14
+79,9
@@
static int get_key(char **line, char **key, char **value)
char *temp;
linepos = *line;
char *temp;
linepos = *line;
- if (
!linepos
)
+ if (
linepos == NULL
)
return -1;
return -1;
- if (strchr(linepos, '\\')) {
- dbg("escaped characters are not supported, skip");
- return -1;
- }
-
/* skip whitespace */
while (isspace(linepos[0]))
linepos++;
/* skip whitespace */
while (isspace(linepos[0]))
linepos++;
@@
-217,7
+212,7
@@
static int import_file_into_env(struct udevice *udev, const char *filename)
static int import_program_into_env(struct udevice *udev, const char *program)
{
static int import_program_into_env(struct udevice *udev, const char *program)
{
- char result[
1024
];
+ char result[
2048
];
size_t reslen;
if (run_program(program, udev->dev->subsystem, result, sizeof(result), &reslen, (udev_log_priority >= LOG_INFO)) != 0)
size_t reslen;
if (run_program(program, udev->dev->subsystem, result, sizeof(result), &reslen, (udev_log_priority >= LOG_INFO)) != 0)
@@
-532,7
+527,7
@@
found:
}
break;
case SUBST_TEMP_NODE:
}
break;
case SUBST_TEMP_NODE:
- if (udev->tmp_node[0] == '\0') {
+ if (udev->tmp_node[0] == '\0'
&& major(udev->devt) > 0
) {
dbg("create temporary device node for callout");
snprintf(udev->tmp_node, sizeof(udev->tmp_node), "%s/.tmp-%u-%u",
udev_root, major(udev->devt), minor(udev->devt));
dbg("create temporary device node for callout");
snprintf(udev->tmp_node, sizeof(udev->tmp_node), "%s/.tmp-%u-%u",
udev_root, major(udev->devt), minor(udev->devt));
@@
-831,22
+826,27
@@
try_parent:
char temp_value[NAME_SIZE];
const char *key_name = key_pair_name(rule, pair);
const char *value = key_val(rule, &pair->key);
char temp_value[NAME_SIZE];
const char *key_name = key_pair_name(rule, pair);
const char *value = key_val(rule, &pair->key);
- char *key_value;
/* make sure we don't write to the same string we possibly read from */
strlcpy(temp_value, value, sizeof(temp_value));
udev_rules_apply_format(udev, temp_value, NAME_SIZE);
/* make sure we don't write to the same string we possibly read from */
strlcpy(temp_value, value, sizeof(temp_value));
udev_rules_apply_format(udev, temp_value, NAME_SIZE);
- key_value = name_list_key_add(&udev->env_list, key_name, temp_value);
- if (key_value == NULL)
- break;
+ if (temp_value[0] == '\0') {
+ name_list_key_remove(&udev->env_list, key_name);
+ unsetenv(key_name);
+ info("unset ENV '%s'", key_name);
+ } else {
+ char *key_value = name_list_key_add(&udev->env_list, key_name, temp_value);
- putenv(key_value);
- dbg("export ENV '%s'", key_value);
+ if (key_value == NULL)
+ break;
+ putenv(key_value);
+ info("set ENV '%s'", key_value);
+ }
}
}
}
}
- /* if we have ATTR assign
ements
write value to sysfs file */
+ /* if we have ATTR assign
ments,
write value to sysfs file */
for (i = 0; i < rule->attr.count; i++) {
struct key_pair *pair = &rule->attr.keys[i];
for (i = 0; i < rule->attr.count; i++) {
struct key_pair *pair = &rule->attr.keys[i];