/*
- * Copyright (C) 2003-2012 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2003-2012 Kay Sievers <kay@vrfy.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
struct udev_rules {
struct udev *udev;
char **dirs;
- unsigned long long *dirs_ts_usec;
+ usec_t *dirs_ts_usec;
int resolve_names;
/* every key in the rules file becomes a token */
log_debug("updating devpath from '%s' to '%s'\n",
udev_device_get_devpath(dev), val);
- util_strscpyl(syspath, sizeof(syspath), "/sys", val, NULL);
+ strscpyl(syspath, sizeof(syspath), "/sys", val, NULL);
udev_device_set_syspath(dev, syspath);
} else {
struct udev_list_entry *entry;
/* a relative path is a device attribute */
devicepath[0] = '\0';
if (file[0] != '/') {
- util_strscpyl(devicepath, sizeof(devicepath), udev_device_get_syspath(dev), NULL);
- util_strscpyl(filepath, sizeof(filepath), devicepath, "/", file, NULL);
+ strscpyl(devicepath, sizeof(devicepath), udev_device_get_syspath(dev), NULL);
+ strscpyl(filepath, sizeof(filepath), devicepath, "/", file, NULL);
file = filepath;
}
const char *tail;
DIR *dir;
- util_strscpy(dirname, sizeof(dirname), attr);
+ strscpy(dirname, sizeof(dirname), attr);
pos = strstr(dirname, "/*/");
if (pos == NULL)
return -1;
if (dent->d_name[0] == '.')
continue;
- util_strscpyl(attr, len, dirname, "/", dent->d_name, tail, NULL);
+ strscpyl(attr, len, dirname, "/", dent->d_name, tail, NULL);
if (stat(attr, &stats) == 0) {
found = true;
break;
return udev_rules_unref(rules);
udev_rules_check_timestamp(rules);
- r = conf_files_list_strv(&files, ".rules", (const char **)rules->dirs);
+ r = conf_files_list_strv(&files, ".rules", NULL, (const char **)rules->dirs);
if (r < 0) {
log_error("failed to enumerate rules files: %s\n", strerror(-r));
return udev_rules_unref(rules);
if (stat(rules->dirs[i], &stats) < 0)
continue;
- if (rules->dirs_ts_usec[i] == ts_usec(&stats.st_mtim))
+ if (rules->dirs_ts_usec[i] == timespec_load(&stats.st_mtim))
continue;
/* first check */
}
/* update timestamp */
- rules->dirs_ts_usec[i] = ts_usec(&stats.st_mtim);
+ rules->dirs_ts_usec[i] = timespec_load(&stats.st_mtim);
}
out:
return changed;
if (next != NULL) {
size_t matchlen = (size_t)(next - s);
- match = (matchlen == len && strncmp(s, val, matchlen) == 0);
+ match = (matchlen == len && strneq(s, val, matchlen));
if (match)
break;
} else {
{
char value[UTIL_PATH_SIZE];
- util_strscpy(value, sizeof(value), rules_str(rules, token->key.value_off));
+ strscpy(value, sizeof(value), rules_str(rules, token->key.value_off));
key_value = value;
while (key_value != NULL) {
pos = strchr(key_value, '|');
klen = strlen(key_value);
if (klen > 0 && !isspace(key_value[klen-1])) {
if (value != vbuf) {
- util_strscpy(vbuf, sizeof(vbuf), value);
+ strscpy(vbuf, sizeof(vbuf), value);
value = vbuf;
}
while (len > 0 && isspace(vbuf[--len]))
if (filename[0] != '/') {
char tmp[UTIL_PATH_SIZE];
- util_strscpy(tmp, sizeof(tmp), filename);
- util_strscpyl(filename, sizeof(filename),
+ strscpy(tmp, sizeof(tmp), filename);
+ strscpyl(filename, sizeof(filename),
udev_device_get_syspath(event->dev), "/", tmp, NULL);
}
}
if (cur->key.op == OP_ASSIGN_FINAL)
event->owner_final = true;
udev_event_apply_format(event, rules_str(rules, cur->key.value_off), owner, sizeof(owner));
+ event->owner_set = true;
event->uid = util_lookup_user(event->udev, owner);
log_debug("OWNER %u %s:%u\n",
event->uid,
if (cur->key.op == OP_ASSIGN_FINAL)
event->group_final = true;
udev_event_apply_format(event, rules_str(rules, cur->key.value_off), group, sizeof(group));
+ event->group_set = true;
event->gid = util_lookup_group(event->udev, group);
log_debug("GROUP %u %s:%u\n",
event->gid,
break;
if (cur->key.op == OP_ASSIGN_FINAL)
event->owner_final = true;
+ event->owner_set = true;
event->uid = cur->key.uid;
log_debug("OWNER %u %s:%u\n",
event->uid,
break;
if (cur->key.op == OP_ASSIGN_FINAL)
event->group_final = true;
+ event->group_set = true;
event->gid = cur->key.gid;
log_debug("GROUP %u %s:%u\n",
event->gid,
/* append value separated by space */
udev_event_apply_format(event, value, temp, sizeof(temp));
- util_strscpyl(value_new, sizeof(value_new), value_old, " ", temp, NULL);
+ strscpyl(value_new, sizeof(value_new), value_old, " ", temp, NULL);
} else
udev_event_apply_format(event, value, value_new, sizeof(value_new));
next[0] = '\0';
log_debug("LINK '%s' %s:%u\n", pos,
rules_str(rules, rule->rule.filename_off), rule->rule.filename_line);
- util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
+ strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
udev_device_add_devlink(event->dev, filename);
while (isspace(next[1]))
next++;
if (pos[0] != '\0') {
log_debug("LINK '%s' %s:%u\n", pos,
rules_str(rules, rule->rule.filename_off), rule->rule.filename_line);
- util_strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
+ strscpyl(filename, sizeof(filename), "/dev/", pos, NULL);
udev_device_add_devlink(event->dev, filename);
}
break;
FILE *f;
if (util_resolve_subsys_kernel(event->udev, key_name, attr, sizeof(attr), 0) != 0)
- util_strscpyl(attr, sizeof(attr), udev_device_get_syspath(event->dev), "/", key_name, NULL);
+ strscpyl(attr, sizeof(attr), udev_device_get_syspath(event->dev), "/", key_name, NULL);
attr_subst_subdir(attr, sizeof(attr));
udev_event_apply_format(event, rules_str(rules, cur->key.value_off), value, sizeof(value));
/* we assure, that the permissions tokens are sorted before the static token */
if (mode == 0 && uid == 0 && gid == 0)
goto next;
- util_strscpyl(filename, sizeof(filename), "/dev/", rules_str(rules, cur->key.value_off), NULL);
+ strscpyl(filename, sizeof(filename), "/dev/", rules_str(rules, cur->key.value_off), NULL);
if (stat(filename, &stats) != 0)
goto next;
if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode))