mirror of
https://github.com/systemd/systemd.git
synced 2024-11-02 19:21:53 +03:00
udev-rules: rewrite function to avoid clobbering arguments
If the attribute wasn't found, the last filename looked at was returned in the input/output argument. This just seems bad style. The return value was ignored, so change function to return void.
This commit is contained in:
parent
99f16bb8d9
commit
f4850a1d95
@ -36,6 +36,7 @@
|
||||
#include "glob-util.h"
|
||||
#include "path-util.h"
|
||||
#include "stat-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "strbuf.h"
|
||||
#include "string-util.h"
|
||||
#include "strv.h"
|
||||
@ -686,41 +687,31 @@ static int import_parent_into_properties(struct udev_device *dev, const char *fi
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int attr_subst_subdir(char *attr, size_t len) {
|
||||
bool found = false;
|
||||
|
||||
if (strstr(attr, "/*/")) {
|
||||
char *pos;
|
||||
char dirname[UTIL_PATH_SIZE];
|
||||
const char *tail;
|
||||
DIR *dir;
|
||||
|
||||
strscpy(dirname, sizeof(dirname), attr);
|
||||
pos = strstr(dirname, "/*/");
|
||||
if (pos == NULL)
|
||||
return -1;
|
||||
pos[0] = '\0';
|
||||
tail = &pos[2];
|
||||
dir = opendir(dirname);
|
||||
if (dir != NULL) {
|
||||
static void attr_subst_subdir(char *attr, size_t len) {
|
||||
const char *pos, *tail, *path;
|
||||
_cleanup_closedir_ DIR *dir = NULL;
|
||||
struct dirent *dent;
|
||||
|
||||
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
|
||||
struct stat stats;
|
||||
pos = strstr(attr, "/*/");
|
||||
if (!pos)
|
||||
return;
|
||||
|
||||
if (dent->d_name[0] == '.')
|
||||
continue;
|
||||
strscpyl(attr, len, dirname, "/", dent->d_name, tail, NULL);
|
||||
if (stat(attr, &stats) == 0) {
|
||||
found = true;
|
||||
tail = pos + 2;
|
||||
path = strndupa(attr, pos - attr + 1); /* include slash at end */
|
||||
dir = opendir(path);
|
||||
if (dir == NULL)
|
||||
return;
|
||||
|
||||
for (dent = readdir(dir); dent != NULL; dent = readdir(dir))
|
||||
if (dent->d_name[0] != '.') {
|
||||
char n[strlen(dent->d_name) + 1 + strlen(tail) + 1];
|
||||
|
||||
strscpyl(n, sizeof n, dent->d_name, "/", tail, NULL);
|
||||
if (faccessat(dirfd(dir), n, F_OK, 0)) {
|
||||
strscpyl(attr, len, path, n, NULL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
closedir(dir);
|
||||
}
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
static int get_key(struct udev *udev, char **line, char **key, enum operation_type *op, char **value) {
|
||||
|
Loading…
Reference in New Issue
Block a user