#include "path-util.h"
#include "string-util.h"
-int dirent_ensure_type(DIR *d, struct dirent *de) {
+static int dirent_ensure_type(DIR *d, struct dirent *de) {
struct stat st;
assert(d);
struct dirent *d;
for (;;) {
- d = readdir(dirp);
+ d = readdir_ensure_type(dirp);
if (d && dot_or_dot_dot(d->d_name))
continue;
return d;
#include "macro.h"
#include "path-util.h"
-int dirent_ensure_type(DIR *d, struct dirent *de);
-
bool dirent_is_file(const struct dirent *de) _pure_;
bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_;
struct dirent *readdir_no_dot(DIR *dirp);
#define FOREACH_DIRENT(de, d, on_error) \
- for (errno = 0, de = readdir(d);; errno = 0, de = readdir(d)) \
+ for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \
if (!de) { \
if (errno > 0) { \
on_error; \
else
#define FOREACH_DIRENT_ALL(de, d, on_error) \
- for (errno = 0, de = readdir(d);; errno = 0, de = readdir(d)) \
+ for (de = readdir_ensure_type(d);; de = readdir_ensure_type(d)) \
if (!de) { \
if (errno > 0) { \
on_error; \
return -errno;
FOREACH_DIRENT_ALL(de, d, return -errno) {
- dirent_ensure_type(d, de);
-
if (!dirent_is_file(de))
continue;
FOREACH_DIRENT(entry, dir, return -errno) {
char *z;
- dirent_ensure_type(dir, entry);
-
if (entry->d_type != DT_DIR)
continue;
if (hashmap_contains(ids, de->d_name))
continue;
- dirent_ensure_type(d, de);
if (de->d_type == DT_LNK) {
/* We don't explicitly check for alias loops here. unit_ids_map_get() which
* limits the number of hops should be used to access the map. */
FOREACH_DIRENT(entry, dir, return 0) {
_cleanup_fclose_ FILE *policy = NULL;
- dirent_ensure_type(dir, entry);
if (!dirent_is_file(entry))
continue;
FOREACH_DIRENT(entry, dir, return 0) {
_cleanup_fclose_ FILE *policy = NULL;
- dirent_ensure_type(dir, entry);
if (!dirent_is_file(entry))
continue;
}
FOREACH_DIRENT_ALL(de, d, return -errno) {
- dirent_ensure_type(d, de);
-
if (dropins && de->d_type == DT_DIR && endswith(de->d_name, ".d")) {
if (!GREEDY_REALLOC0(dirs, n_dirs + 2))
return -ENOMEM;
int k;
uid_t uid;
- dirent_ensure_type(d, de);
-
if (!dirent_is_file(de))
continue;
struct dirent *de;
FOREACH_DIRENT_ALL(de, d, break) {
- dirent_ensure_type(d, de);
if (!dirent_is_file(de))
continue;
FOREACH_DIRENT(de, d, return -errno) {
int k;
- dirent_ensure_type(d, de);
if (!dirent_is_file(de))
continue;
_cleanup_free_ char *sys = NULL, *fname = NULL;
int r;
- dirent_ensure_type(d, de);
-
if (de->d_type != DT_DIR)
continue;
if (hashmap_get(unit_files, de->d_name))
continue;
- dirent_ensure_type(d, de);
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
continue;
if (set_contains(unit_files, de->d_name))
continue;
- dirent_ensure_type(d, de);
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
continue;
if (set_contains(unit_files, de->d_name))
continue;
- dirent_ensure_type(d, de);
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
continue;
_cleanup_free_ char *j = NULL, *osrelease = NULL, *cmdline = NULL;
_cleanup_close_ int fd = -1;
- dirent_ensure_type(d, de);
if (!dirent_is_file(de))
continue;
FOREACH_DIRENT(de, d, return -errno) {
- dirent_ensure_type(d, de);
-
if (de->d_type == DT_DIR) {
_cleanup_free_ char *p = NULL;
int nfd, q;
bool found_path = false, found_dest, b = false;
int q;
- dirent_ensure_type(dir, de);
-
if (de->d_type != DT_LNK)
continue;
_cleanup_free_ const char *path = NULL;
_cleanup_closedir_ DIR *d = NULL;
- dirent_ensure_type(config_dir, de);
-
if (de->d_type != DT_DIR)
continue;
if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY))
continue;
- dirent_ensure_type(d, de);
-
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
continue;
if (hashmap_get(h, de->d_name))
continue;
- dirent_ensure_type(d, de);
-
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
continue;
int node;
const char *n;
- (void) dirent_ensure_type(d, de);
-
if (de->d_type != DT_DIR)
continue;
FOREACH_DIRENT(de, d, return) {
pid_t pid;
- dirent_ensure_type(d, de);
-
if (de->d_type != DT_DIR)
continue;