hack to allow ATTR{block/*/uevent}="change"

This commit is contained in:
Kay Sievers
2008-03-13 16:00:25 +01:00
parent 025d3cc960
commit 5ee7ecfb0f
+24
View File
@@ -26,6 +26,7 @@
#include <unistd.h>
#include <errno.h>
#include <syslog.h>
#include <dirent.h>
#include <fnmatch.h>
#include <sys/socket.h>
#include <sys/un.h>
@@ -1243,6 +1244,7 @@ try_parent:
if (pair->key.operation == KEY_OP_ASSIGN) {
const char *key_name = key_pair_name(rule, pair);
char devpath[PATH_SIZE];
char *pos;
char *attrib;
char attr[PATH_SIZE] = "";
char value[NAME_SIZE];
@@ -1264,6 +1266,28 @@ try_parent:
strlcat(attr, key_name, sizeof(attr));
}
pos = strstr(attr, "/*/");
if (pos != NULL) {
char str[PATH_SIZE];
DIR *dir;
pos[1] = '\0';
strlcpy(str, &pos[2], sizeof(str));
dir = opendir(attr);
if (dir != NULL) {
struct dirent *dent;
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
if (dent->d_name[0] == '.')
continue;
strlcat(attr, dent->d_name, sizeof(attr));
break;
}
closedir(dir);
}
strlcat(attr, str, sizeof(attr));
}
strlcpy(value, key_val(rule, &pair->key), sizeof(value));
udev_rules_apply_format(udev, value, sizeof(value));
info("writing '%s' to sysfs file '%s'", value, attr);