chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
eba87f5
)
use openat(), unlinkat(), fstatat()
author
Kay Sievers
<kay.sievers@vrfy.org>
Wed, 20 May 2009 16:58:52 +0000
(18:58 +0200)
committer
Kay Sievers
<kay.sievers@vrfy.org>
Wed, 20 May 2009 16:58:52 +0000
(18:58 +0200)
TODO
patch
|
blob
|
history
udev/lib/libudev-queue.c
patch
|
blob
|
history
udev/udev-rules.c
patch
|
blob
|
history
udev/udev-watch.c
patch
|
blob
|
history
udev/udevadm-info.c
patch
|
blob
|
history
udev/udevd.c
patch
|
blob
|
history
diff --git
a/TODO
b/TODO
index 541faea5565d299d49986abaf20c0b6842e967e4..161df02f05f4126759dd4ca591b2cd0d91085032 100644
(file)
--- a/
TODO
+++ b/
TODO
@@
-2,7
+2,6
@@
o drop modprobe floppy alias (SUSE), it will be in the module (2.6.30)
o remove MMC rules, they got a modalias now (2.6.30)
o add scsi:t-0x09* to "ch" and remove modprobe rule (2.6.30)
o drop modprobe floppy alias (SUSE), it will be in the module (2.6.30)
o remove MMC rules, they got a modalias now (2.6.30)
o add scsi:t-0x09* to "ch" and remove modprobe rule (2.6.30)
- o convert readdir loops to unlinkat(), fstatat()
o implement path_id in C with libudev (?)
o convert firmware.sh to C (?)
o implement path_id in C with libudev (?)
o convert firmware.sh to C (?)
diff --git
a/udev/lib/libudev-queue.c
b/udev/lib/libudev-queue.c
index a2860ec8c212ca82aebc5192a9a7bee2afbf66ef..8dce6c314d5a1109a0221c74385a720310b95b25 100644
(file)
--- a/
udev/lib/libudev-queue.c
+++ b/
udev/lib/libudev-queue.c
@@
-201,7
+201,6
@@
struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev
if (dir == NULL)
return NULL;
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
if (dir == NULL)
return NULL;
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
- char filename[UTIL_PATH_SIZE];
char syspath[UTIL_PATH_SIZE];
char *s;
size_t l;
char syspath[UTIL_PATH_SIZE];
char *s;
size_t l;
@@
-209,10
+208,9
@@
struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev
if (dent->d_name[0] == '.')
continue;
if (dent->d_name[0] == '.')
continue;
- util_strscpyl(filename, sizeof(filename), path, "/", dent->d_name, NULL);
s = syspath;
l = util_strpcpyl(&s, sizeof(syspath), udev_get_sys_path(udev_queue->udev), NULL);
s = syspath;
l = util_strpcpyl(&s, sizeof(syspath), udev_get_sys_path(udev_queue->udev), NULL);
- len = readlink
(file
name, s, l);
+ len = readlink
at(dirfd(dir), dent->d_
name, s, l);
if (len < 0 || (size_t)len >= l)
continue;
s[len] = '\0';
if (len < 0 || (size_t)len >= l)
continue;
s[len] = '\0';
@@
-246,10
+244,9
@@
struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev
if (dent->d_name[0] == '.')
continue;
if (dent->d_name[0] == '.')
continue;
- util_strscpyl(filename, sizeof(filename), path, "/", dent->d_name, NULL);
s = syspath;
l = util_strpcpyl(&s, sizeof(syspath), udev_get_sys_path(udev_queue->udev), NULL);
s = syspath;
l = util_strpcpyl(&s, sizeof(syspath), udev_get_sys_path(udev_queue->udev), NULL);
- len = readlink
(file
name, s, l);
+ len = readlink
at(dirfd(dir), dent->d_
name, s, l);
if (len < 0 || (size_t)len >= l)
continue;
s[len] = '\0';
if (len < 0 || (size_t)len >= l)
continue;
s[len] = '\0';
diff --git
a/udev/udev-rules.c
b/udev/udev-rules.c
index da1d32203761e7054330bc93b9fb9be283f3ba43..6d03ab63c09553028007e8caa204b596f30fa78d 100644
(file)
--- a/
udev/udev-rules.c
+++ b/
udev/udev-rules.c
@@
-1641,10
+1641,8
@@
static int add_matching_files(struct udev *udev, struct udev_list_node *file_lis
if (strcmp(ext, suffix) != 0)
continue;
}
if (strcmp(ext, suffix) != 0)
continue;
}
- dbg(udev, "put file '%s/%s' into list\n", dirname, dent->d_name);
-
- snprintf(filename, sizeof(filename), "%s/%s", dirname, dent->d_name);
- filename[sizeof(filename)-1] = '\0';
+ util_strscpyl(filename, sizeof(filename), dirname, "/", dent->d_name, NULL);
+ dbg(udev, "put file '%s' into list\n", filename);
udev_list_entry_add(udev, file_list, filename, NULL, 1, 1);
}
udev_list_entry_add(udev, file_list, filename, NULL, 1, 1);
}
diff --git
a/udev/udev-watch.c
b/udev/udev-watch.c
index 8bc8775735a5d36f408763932327ae9967ed6657..53492e5f357fd2fcb73128af2a95721fd55bd99b 100644
(file)
--- a/
udev/udev-watch.c
+++ b/
udev/udev-watch.c
@@
-72,8
+72,7
@@
void udev_watch_restore(struct udev *udev)
}
for (ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
}
for (ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
- char path[UTIL_PATH_SIZE];
- char buf[UTIL_PATH_SIZE];
+ char device[UTIL_PATH_SIZE];
char *s;
size_t l;
ssize_t len;
char *s;
size_t l;
ssize_t len;
@@
-82,19
+81,18
@@
void udev_watch_restore(struct udev *udev)
if (ent->d_name[0] < '0' || ent->d_name[0] > '9')
continue;
if (ent->d_name[0] < '0' || ent->d_name[0] > '9')
continue;
- util_strscpyl(path, sizeof(path), oldname, "/", ent->d_name, NULL);
- s = buf;
- l = util_strpcpy(&s, sizeof(buf), udev_get_sys_path(udev));
- len = readlink(path, s, l);
+ s = device;
+ l = util_strpcpy(&s, sizeof(device), udev_get_sys_path(udev));
+ len = readlinkat(dirfd(dir), ent->d_name, s, l);
if (len <= 0 || len >= (ssize_t)l) {
if (len <= 0 || len >= (ssize_t)l) {
- unlink
(path
);
+ unlink
at(dirfd(dir), ent->d_name, 0
);
continue;
}
s[len] = '\0';
continue;
}
s[len] = '\0';
- dbg(udev, "old watch to '%s' found\n",
buf
);
- dev = udev_device_new_from_syspath(udev,
buf
);
+ dbg(udev, "old watch to '%s' found\n",
device
);
+ dev = udev_device_new_from_syspath(udev,
device
);
if (dev == NULL) {
if (dev == NULL) {
- unlink
(path
);
+ unlink
at(dirfd(dir), ent->d_name, 0
);
continue;
}
continue;
}
@@
-102,7
+100,7
@@
void udev_watch_restore(struct udev *udev)
udev_watch_begin(udev, dev);
udev_device_unref(dev);
udev_watch_begin(udev, dev);
udev_device_unref(dev);
- unlink
(path
);
+ unlink
at(dirfd(dir), ent->d_name, 0
);
}
closedir(dir);
}
closedir(dir);
diff --git
a/udev/udevadm-info.c
b/udev/udevadm-info.c
index db11a289b249574ccd169a071cecc743e27c66e3..b743a1d642faa0f741e982c00c5a95b5ba3c24ef 100644
(file)
--- a/
udev/udevadm-info.c
+++ b/
udev/udevadm-info.c
@@
-25,6
+25,7
@@
#include <dirent.h>
#include <errno.h>
#include <getopt.h>
#include <dirent.h>
#include <errno.h>
#include <getopt.h>
+#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/types.h>
@@
-40,7
+41,6
@@
static void print_all_attributes(struct udev_device *device, const char *key)
if (dir != NULL) {
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
struct stat statbuf;
if (dir != NULL) {
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
struct stat statbuf;
- char filename[UTIL_PATH_SIZE];
const char *value;
size_t len;
const char *value;
size_t len;
@@
-52,8
+52,7
@@
static void print_all_attributes(struct udev_device *device, const char *key)
if (strcmp(dent->d_name, "dev") == 0)
continue;
if (strcmp(dent->d_name, "dev") == 0)
continue;
- util_strscpyl(filename, sizeof(filename), udev_device_get_syspath(device), "/", dent->d_name, NULL);
- if (lstat(filename, &statbuf) != 0)
+ if (fstatat(dirfd(dir), dent->d_name, &statbuf, AT_SYMLINK_NOFOLLOW) != 0)
continue;
if (S_ISLNK(statbuf.st_mode))
continue;
continue;
if (S_ISLNK(statbuf.st_mode))
continue;
diff --git
a/udev/udevd.c
b/udev/udevd.c
index 1fe76f88294927e25c1b551a6159374c3b4d3ab2..b64f08b5c55eada2bb7413cae782fdc133b5f0f2 100644
(file)
--- a/
udev/udevd.c
+++ b/
udev/udevd.c
@@
-649,8
+649,7
@@
static void cleanup_queue_dir(struct udev *udev)
break;
if (dent->d_name[0] == '.')
continue;
break;
if (dent->d_name[0] == '.')
continue;
- util_strscpyl(filename, sizeof(filename), dirname, "/", dent->d_name, NULL);
- unlink(filename);
+ unlinkat(dirfd(dir), dent->d_name, 0);
}
closedir(dir);
rmdir(dirname);
}
closedir(dir);
rmdir(dirname);