mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
Merge pull request #3137 from keszybz/dirent-simplification
Various small cleanups in shared code
This commit is contained in:
commit
e0a24179c0
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
2
test/sysv-generator-test.py
Normal file → Executable file
@ -1,3 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# systemd-sysv-generator integration test
|
||||
#
|
||||
# (C) 2015 Canonical Ltd.
|
||||
|
Loading…
Reference in New Issue
Block a user