udev: remove SYMLINK "unique" option

This commit is contained in:
Kay Sievers 2012-10-08 21:54:39 +02:00
parent 04eaa66837
commit 8a1733871f
5 changed files with 16 additions and 42 deletions

View file

@ -378,12 +378,12 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device,
next = strchr(slink, ' '); next = strchr(slink, ' ');
while (next != NULL) { while (next != NULL) {
next[0] = '\0'; next[0] = '\0';
udev_device_add_devlink(udev_device, slink, 0); udev_device_add_devlink(udev_device, slink);
slink = &next[1]; slink = &next[1];
next = strchr(slink, ' '); next = strchr(slink, ' ');
} }
if (slink[0] != '\0') if (slink[0] != '\0')
udev_device_add_devlink(udev_device, slink, 0); udev_device_add_devlink(udev_device, slink);
} else if (startswith(property, "TAGS=")) { } else if (startswith(property, "TAGS=")) {
char tags[UTIL_PATH_SIZE]; char tags[UTIL_PATH_SIZE];
char *next; char *next;
@ -503,7 +503,7 @@ int udev_device_read_db(struct udev_device *udev_device, const char *dbfile)
switch(line[0]) { switch(line[0]) {
case 'S': case 'S':
util_strscpyl(filename, sizeof(filename), "/dev/", val, NULL); util_strscpyl(filename, sizeof(filename), "/dev/", val, NULL);
udev_device_add_devlink(udev_device, filename, 0); udev_device_add_devlink(udev_device, filename);
break; break;
case 'L': case 'L':
udev_device_set_devlink_priority(udev_device, atoi(val)); udev_device_set_devlink_priority(udev_device, atoi(val));
@ -1505,7 +1505,7 @@ int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode
return 0; return 0;
} }
int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique) int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink)
{ {
struct udev_list_entry *list_entry; struct udev_list_entry *list_entry;
@ -1513,8 +1513,6 @@ int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink
list_entry = udev_list_entry_add(&udev_device->devlinks_list, devlink, NULL); list_entry = udev_list_entry_add(&udev_device->devlinks_list, devlink, NULL);
if (list_entry == NULL) if (list_entry == NULL)
return -ENOMEM; return -ENOMEM;
if (unique)
udev_list_entry_set_num(list_entry, true);
return 0; return 0;
} }

View file

@ -50,7 +50,7 @@ struct udev_device *udev_device_new(struct udev *udev);
mode_t udev_device_get_devnode_mode(struct udev_device *udev_device); mode_t udev_device_get_devnode_mode(struct udev_device *udev_device);
int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath); int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath);
int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode); int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode);
int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique); int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink);
void udev_device_cleanup_devlinks_list(struct udev_device *udev_device); void udev_device_cleanup_devlinks_list(struct udev_device *udev_device);
struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value); struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value);
void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property); void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property);

View file

@ -250,7 +250,7 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
log_debug("update old name, '%s' no longer belonging to '%s'\n", log_debug("update old name, '%s' no longer belonging to '%s'\n",
name, udev_device_get_devpath(dev)); name, udev_device_get_devpath(dev));
link_update(dev, name, 0); link_update(dev, name, false);
} }
} }
@ -321,13 +321,8 @@ void udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid)
node_symlink(udev, udev_device_get_devnode(dev), filename); node_symlink(udev, udev_device_get_devnode(dev), filename);
/* create/update symlinks, add symlinks to name index */ /* create/update symlinks, add symlinks to name index */
udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) { udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev))
if (udev_list_entry_get_num(list_entry)) link_update(dev, udev_list_entry_get_name(list_entry), true);
/* simple unmanaged link name */
node_symlink(udev, udev_device_get_devnode(dev), udev_list_entry_get_name(list_entry));
else
link_update(dev, udev_list_entry_get_name(list_entry), 1);
}
} }
void udev_node_remove(struct udev_device *dev) void udev_node_remove(struct udev_device *dev)
@ -337,7 +332,7 @@ void udev_node_remove(struct udev_device *dev)
/* remove/update symlinks, remove symlinks from name index */ /* remove/update symlinks, remove symlinks from name index */
udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev))
link_update(dev, udev_list_entry_get_name(list_entry), 0); link_update(dev, udev_list_entry_get_name(list_entry), false);
/* remove /dev/{block,char}/$major:$minor */ /* remove /dev/{block,char}/$major:$minor */
snprintf(filename, sizeof(filename), "/dev/%s/%u:%u", snprintf(filename, sizeof(filename), "/dev/%s/%u:%u",

View file

@ -202,7 +202,6 @@ struct token {
unsigned int value_off; unsigned int value_off;
union { union {
unsigned int attr_off; unsigned int attr_off;
int devlink_unique;
unsigned int rule_goto; unsigned int rule_goto;
mode_t mode; mode_t mode;
uid_t uid; uid_t uid;
@ -1020,6 +1019,7 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
case TK_A_OWNER: case TK_A_OWNER:
case TK_A_GROUP: case TK_A_GROUP:
case TK_A_MODE: case TK_A_MODE:
case TK_A_DEVLINK:
case TK_A_NAME: case TK_A_NAME:
case TK_A_GOTO: case TK_A_GOTO:
case TK_M_TAG: case TK_M_TAG:
@ -1039,10 +1039,6 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
token->key.value_off = add_string(rule_tmp->rules, value); token->key.value_off = add_string(rule_tmp->rules, value);
token->key.attr_off = add_string(rule_tmp->rules, attr); token->key.attr_off = add_string(rule_tmp->rules, attr);
break; break;
case TK_A_DEVLINK:
token->key.value_off = add_string(rule_tmp->rules, value);
token->key.devlink_unique = *(int *)data;
break;
case TK_M_TEST: case TK_M_TEST:
token->key.value_off = add_string(rule_tmp->rules, value); token->key.value_off = add_string(rule_tmp->rules, value);
if (data != NULL) if (data != NULL)
@ -1496,17 +1492,11 @@ static int add_rule(struct udev_rules *rules, char *line,
continue; continue;
} }
if (startswith(key, "SYMLINK")) { if (streq(key, "SYMLINK")) {
if (op < OP_MATCH_MAX) { if (op < OP_MATCH_MAX)
rule_add_key(&rule_tmp, TK_M_DEVLINK, op, value, NULL); rule_add_key(&rule_tmp, TK_M_DEVLINK, op, value, NULL);
} else { else
int flag = 0; rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, NULL);
attr = get_key_attribute(rules->udev, key + sizeof("SYMLINK")-1);
if (attr != NULL && strstr(attr, "unique") != NULL)
flag = 1;
rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, &flag);
}
rule_tmp.rule.rule.can_set_name = true; rule_tmp.rule.rule.can_set_name = true;
continue; continue;
} }
@ -2578,7 +2568,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
log_debug("LINK '%s' %s:%u\n", pos, log_debug("LINK '%s' %s:%u\n", pos,
&rules->buf[rule->rule.filename_off], rule->rule.filename_line); &rules->buf[rule->rule.filename_off], rule->rule.filename_line);
util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL); util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
udev_device_add_devlink(event->dev, filename, cur->key.devlink_unique); udev_device_add_devlink(event->dev, filename);
while (isspace(next[1])) while (isspace(next[1]))
next++; next++;
pos = &next[1]; pos = &next[1];
@ -2588,7 +2578,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
log_debug("LINK '%s' %s:%u\n", pos, log_debug("LINK '%s' %s:%u\n", pos,
&rules->buf[rule->rule.filename_off], rule->rule.filename_line); &rules->buf[rule->rule.filename_off], rule->rule.filename_line);
util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL); util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
udev_device_add_devlink(event->dev, filename, cur->key.devlink_unique); udev_device_add_devlink(event->dev, filename);
} }
break; break;
} }

View file

@ -932,15 +932,6 @@ EOF
rules => <<EOF rules => <<EOF
SUBSYSTEMS=="scsi", KERNEL=="sda1", SYMLINK+="before" SUBSYSTEMS=="scsi", KERNEL=="sda1", SYMLINK+="before"
KERNEL=="sda1", PROGRAM!="/bin/false", SYMLINK+="nonzero-program" KERNEL=="sda1", PROGRAM!="/bin/false", SYMLINK+="nonzero-program"
EOF
},
{
desc => "test for whitespace between the operator",
devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1",
exp_name => "true",
rules => <<EOF
SUBSYSTEMS=="scsi", KERNEL=="sda1", SYMLINK+="before"
KERNEL == "sda1" , SYMLINK+ = "true"
EOF EOF
}, },
{ {