mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-30 06:25:25 +03:00
unset variable with ENV{VAR}=""
This commit is contained in:
parent
07bc6002ca
commit
db6e59df56
1
udev.h
1
udev.h
@ -137,6 +137,7 @@ struct name_entry {
|
|||||||
extern int log_priority(const char *priority);
|
extern int log_priority(const char *priority);
|
||||||
extern char *name_list_add(struct list_head *name_list, const char *name, int sort);
|
extern char *name_list_add(struct list_head *name_list, const char *name, int sort);
|
||||||
extern char *name_list_key_add(struct list_head *name_list, const char *key, const char *value);
|
extern char *name_list_key_add(struct list_head *name_list, const char *key, const char *value);
|
||||||
|
extern int name_list_key_remove(struct list_head *name_list, const char *key);
|
||||||
extern void name_list_cleanup(struct list_head *name_list);
|
extern void name_list_cleanup(struct list_head *name_list);
|
||||||
extern int add_matching_files(struct list_head *name_list, const char *dirname, const char *suffix);
|
extern int add_matching_files(struct list_head *name_list, const char *dirname, const char *suffix);
|
||||||
extern uid_t lookup_user(const char *user);
|
extern uid_t lookup_user(const char *user);
|
||||||
|
17
udev_rules.c
17
udev_rules.c
@ -831,18 +831,23 @@ try_parent:
|
|||||||
char temp_value[NAME_SIZE];
|
char temp_value[NAME_SIZE];
|
||||||
const char *key_name = key_pair_name(rule, pair);
|
const char *key_name = key_pair_name(rule, pair);
|
||||||
const char *value = key_val(rule, &pair->key);
|
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 */
|
/* make sure we don't write to the same string we possibly read from */
|
||||||
strlcpy(temp_value, value, sizeof(temp_value));
|
strlcpy(temp_value, value, sizeof(temp_value));
|
||||||
udev_rules_apply_format(udev, temp_value, NAME_SIZE);
|
udev_rules_apply_format(udev, temp_value, NAME_SIZE);
|
||||||
|
|
||||||
key_value = name_list_key_add(&udev->env_list, key_name, temp_value);
|
if (temp_value[0] == '\0') {
|
||||||
if (key_value == NULL)
|
name_list_key_remove(&udev->env_list, key_name);
|
||||||
break;
|
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);
|
if (key_value == NULL)
|
||||||
dbg("export ENV '%s'", key_value);
|
break;
|
||||||
|
putenv(key_value);
|
||||||
|
info("set ENV '%s'", key_value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
udev_utils.c
20
udev_utils.c
@ -110,6 +110,26 @@ char *name_list_key_add(struct list_head *name_list, const char *key, const char
|
|||||||
return new_name->name;
|
return new_name->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int name_list_key_remove(struct list_head *name_list, const char *key)
|
||||||
|
{
|
||||||
|
struct name_entry *name_loop;
|
||||||
|
struct name_entry *temp_loop;
|
||||||
|
size_t keylen = strlen(key);
|
||||||
|
int retval = 0;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(name_loop, temp_loop, name_list, node) {
|
||||||
|
if (strncmp(name_loop->name, key, keylen) != 0)
|
||||||
|
continue;
|
||||||
|
if (name_loop->name[keylen] != '=')
|
||||||
|
continue;
|
||||||
|
list_del(&name_loop->node);
|
||||||
|
free(name_loop);
|
||||||
|
retval = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
void name_list_cleanup(struct list_head *name_list)
|
void name_list_cleanup(struct list_head *name_list)
|
||||||
{
|
{
|
||||||
struct name_entry *name_loop;
|
struct name_entry *name_loop;
|
||||||
|
Loading…
Reference in New Issue
Block a user