/* Iterate a function on each entry of a directory */
int iterate_on_dir(const char *dir_name,
- int (*func)(const char *, struct dirent *, void *),
- void * private)
+ int FAST_FUNC (*func)(const char *, struct dirent *, void *),
+ void *private)
{
DIR *dir;
- struct dirent *de, *dep;
- int max_len, len;
-
- max_len = PATH_MAX + sizeof(struct dirent);
- de = xmalloc(max_len+1);
- memset(de, 0, max_len+1);
+ struct dirent *de;
dir = opendir(dir_name);
if (dir == NULL) {
- free(de);
return -1;
}
- while ((dep = readdir(dir))) {
- len = sizeof(struct dirent);
- if (len < dep->d_reclen)
- len = dep->d_reclen;
- if (len > max_len)
- len = max_len;
- memcpy(de, dep, len);
+ while ((de = readdir(dir)) != NULL) {
func(dir_name, de, private);
}
closedir(dir);
- free(de);
return 0;
}
int fd, r;
IF_LONG_IS_WIDER(int ver;)
- fd = open(name, O_NONBLOCK);
+ fd = open(name, O_RDONLY | O_NONBLOCK);
if (fd == -1)
return -1;
if (!get_version) {
) {
goto notsupp;
}
- fd = open(name, O_NONBLOCK); /* neither read nor write asked for */
+ fd = open(name, O_RDONLY | O_NONBLOCK); /* neither read nor write asked for */
if (fd == -1)
return -1;