Merge pull request #3137 from keszybz/dirent-simplification

Various small cleanups in shared code
This commit is contained in:
Lennart Poettering 2016-04-29 10:40:15 +02:00
commit e0a24179c0
13 changed files with 64 additions and 52 deletions

View File

@ -52,12 +52,10 @@ int dirent_ensure_type(DIR *d, struct dirent *de) {
bool dirent_is_file(const struct dirent *de) {
assert(de);
if (hidden_file(de->d_name))
if (!IN_SET(de->d_type, DT_REG, DT_LNK, DT_UNKNOWN))
return false;
if (de->d_type != DT_REG &&
de->d_type != DT_LNK &&
de->d_type != DT_UNKNOWN)
if (hidden_or_backup_file(de->d_name))
return false;
return true;
@ -66,12 +64,10 @@ bool dirent_is_file(const struct dirent *de) {
bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) {
assert(de);
if (de->d_type != DT_REG &&
de->d_type != DT_LNK &&
de->d_type != DT_UNKNOWN)
if (!IN_SET(de->d_type, DT_REG, DT_LNK, DT_UNKNOWN))
return false;
if (hidden_file_allow_backup(de->d_name))
if (de->d_name[0] == '.')
return false;
return endswith(de->d_name, suffix);

View File

@ -38,7 +38,7 @@ bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pu
on_error; \
} \
break; \
} else if (hidden_file((de)->d_name)) \
} else if (hidden_or_backup_file((de)->d_name)) \
continue; \
else

View File

@ -231,7 +231,7 @@ int close_all_fds(const int except[], unsigned n_except) {
while ((de = readdir(d))) {
int fd = -1;
if (hidden_file(de->d_name))
if (hidden_or_backup_file(de->d_name))
continue;
if (safe_atoi(de->d_name, &fd) < 0)

View File

@ -151,7 +151,7 @@ int fdset_new_fill(FDSet **_s) {
while ((de = readdir(d))) {
int fd = -1;
if (hidden_file(de->d_name))
if (hidden_or_backup_file(de->d_name))
continue;
r = safe_atoi(de->d_name, &fd);

View File

@ -756,37 +756,37 @@ char *file_in_same_dir(const char *path, const char *filename) {
return ret;
}
bool hidden_file_allow_backup(const char *filename) {
bool hidden_or_backup_file(const char *filename) {
const char *p;
assert(filename);
return
filename[0] == '.' ||
streq(filename, "lost+found") ||
streq(filename, "aquota.user") ||
streq(filename, "aquota.group") ||
endswith(filename, ".rpmnew") ||
endswith(filename, ".rpmsave") ||
endswith(filename, ".rpmorig") ||
endswith(filename, ".dpkg-old") ||
endswith(filename, ".dpkg-new") ||
endswith(filename, ".dpkg-tmp") ||
endswith(filename, ".dpkg-dist") ||
endswith(filename, ".dpkg-bak") ||
endswith(filename, ".dpkg-backup") ||
endswith(filename, ".dpkg-remove") ||
endswith(filename, ".ucf-new") ||
endswith(filename, ".ucf-old") ||
endswith(filename, ".ucf-dist") ||
endswith(filename, ".swp");
}
bool hidden_file(const char *filename) {
assert(filename);
if (endswith(filename, "~"))
if (filename[0] == '.' ||
streq(filename, "lost+found") ||
streq(filename, "aquota.user") ||
streq(filename, "aquota.group") ||
endswith(filename, "~"))
return true;
return hidden_file_allow_backup(filename);
p = strrchr(filename, '.');
if (!p)
return false;
return STR_IN_SET(p + 1,
"rpmnew",
"rpmsave",
"rpmorig",
"dpkg-old",
"dpkg-new",
"dpkg-tmp",
"dpkg-dist",
"dpkg-bak",
"dpkg-backup",
"dpkg-remove",
"ucf-new",
"ucf-old",
"ucf-dist",
"swp");
}
bool is_device_path(const char *path) {

View File

@ -122,7 +122,6 @@ bool path_is_safe(const char *p) _pure_;
char *file_in_same_dir(const char *path, const char *filename);
bool hidden_file_allow_backup(const char *filename);
bool hidden_file(const char *filename) _pure_;
bool hidden_or_backup_file(const char *filename) _pure_;
bool is_device_path(const char *path);

View File

@ -522,7 +522,7 @@ int on_ac_power(void) {
if (!de)
break;
if (hidden_file(de->d_name))
if (hidden_or_backup_file(de->d_name))
continue;
device = openat(dirfd(d), de->d_name, O_DIRECTORY|O_RDONLY|O_CLOEXEC|O_NOCTTY);

View File

@ -2516,14 +2516,9 @@ static int parse_argv(int argc, char *argv[]) {
assert(argv);
for (;;) {
const char *option_string;
const char * const option_string = "+hp:als:H:M:qn:o:";
if (reorder)
option_string = "hp:als:H:M:qn:o:";
else
option_string = "+hp:als:H:M:qn:o:";
c = getopt_long(argc, argv, option_string, options, NULL);
c = getopt_long(argc, argv, option_string + reorder, options, NULL);
if (c < 0) {
/* We generally are fine with the fact that getopt_long() reorders the command line, and looks
* for switches after the main verb. However, for "shell" we really don't want that, since we

View File

@ -576,8 +576,6 @@ static void link_set_state(Link *link, LinkState state) {
link->state = state;
link_send_changed(link, "AdministrativeState", NULL);
return;
}
static void link_enter_unmanaged(Link *link) {

View File

@ -160,7 +160,7 @@ static int iterate_dir(
if (!de)
break;
if (hidden_file(de->d_name))
if (hidden_or_backup_file(de->d_name))
continue;
f = strjoin(path, "/", de->d_name, NULL);

View File

@ -489,6 +489,27 @@ static void test_filename_is_valid(void) {
assert_se(filename_is_valid("o.o"));
}
static void test_hidden_or_backup_file(void) {
assert_se(hidden_or_backup_file(".hidden"));
assert_se(hidden_or_backup_file("..hidden"));
assert_se(!hidden_or_backup_file("hidden."));
assert_se(hidden_or_backup_file("backup~"));
assert_se(hidden_or_backup_file(".backup~"));
assert_se(hidden_or_backup_file("lost+found"));
assert_se(hidden_or_backup_file("aquota.user"));
assert_se(hidden_or_backup_file("aquota.group"));
assert_se(hidden_or_backup_file("test.rpmnew"));
assert_se(hidden_or_backup_file("test.dpkg-old"));
assert_se(hidden_or_backup_file("test.dpkg-remove"));
assert_se(hidden_or_backup_file("test.swp"));
assert_se(!hidden_or_backup_file("test.rpmnew."));
assert_se(!hidden_or_backup_file("test.dpkg-old.foo"));
}
int main(int argc, char **argv) {
test_path();
test_find_binary(argv[0]);
@ -502,6 +523,7 @@ int main(int argc, char **argv) {
test_path_is_mount_point();
test_file_in_same_dir();
test_filename_is_valid();
test_hidden_or_backup_file();
return 0;
}

View File

@ -481,7 +481,7 @@ static int show_passwords(void) {
if (de->d_type != DT_REG)
continue;
if (hidden_file(de->d_name))
if (hidden_or_backup_file(de->d_name))
continue;
if (!startswith(de->d_name, "ask."))

2
test/sysv-generator-test.py Normal file → Executable file
View File

@ -1,3 +1,5 @@
#!/usr/bin/python
#
# systemd-sysv-generator integration test
#
# (C) 2015 Canonical Ltd.