mirror of
https://github.com/systemd/systemd.git
synced 2025-01-26 14:04:03 +03:00
Be more careful when checking for empty files
If we want to avoid reading a totally empty file, it seems better to check after we have opened the file, not before.
This commit is contained in:
parent
36f822c4bd
commit
ed88bcfb7c
@ -495,11 +495,6 @@ static int netdev_load_one(Manager *manager, const char *filename) {
|
||||
assert(manager);
|
||||
assert(filename);
|
||||
|
||||
if (null_or_empty_path(filename)) {
|
||||
log_debug("skipping empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
file = fopen(filename, "re");
|
||||
if (!file) {
|
||||
if (errno == ENOENT)
|
||||
@ -508,6 +503,11 @@ static int netdev_load_one(Manager *manager, const char *filename) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (null_or_empty_fd(fileno(file))) {
|
||||
log_debug("Skipping empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
netdev = new0(NetDev, 1);
|
||||
if (!netdev)
|
||||
return log_oom();
|
||||
|
@ -48,8 +48,8 @@ static int network_load_one(Manager *manager, const char *filename) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (null_or_empty_path(filename)) {
|
||||
log_debug("skipping empty file: %s", filename);
|
||||
if (null_or_empty_fd(fileno(file))) {
|
||||
log_debug("Skipping empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -3604,6 +3604,17 @@ int null_or_empty_path(const char *fn) {
|
||||
return null_or_empty(&st);
|
||||
}
|
||||
|
||||
int null_or_empty_fd(int fd) {
|
||||
struct stat st;
|
||||
|
||||
assert(fd >= 0);
|
||||
|
||||
if (fstat(fd, &st) < 0)
|
||||
return -errno;
|
||||
|
||||
return null_or_empty(&st);
|
||||
}
|
||||
|
||||
DIR *xopendirat(int fd, const char *name, int flags) {
|
||||
int nfd;
|
||||
DIR *d;
|
||||
|
@ -499,6 +499,7 @@ noreturn void freeze(void);
|
||||
|
||||
bool null_or_empty(struct stat *st) _pure_;
|
||||
int null_or_empty_path(const char *fn);
|
||||
int null_or_empty_fd(int fd);
|
||||
|
||||
DIR *xopendirat(int dirfd, const char *name, int flags);
|
||||
|
||||
|
@ -153,11 +153,6 @@ static int load_link(link_config_ctx *ctx, const char *filename) {
|
||||
assert(ctx);
|
||||
assert(filename);
|
||||
|
||||
if (null_or_empty_path(filename)) {
|
||||
log_debug("skipping empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
file = fopen(filename, "re");
|
||||
if (!file) {
|
||||
if (errno == ENOENT)
|
||||
@ -166,6 +161,11 @@ static int load_link(link_config_ctx *ctx, const char *filename) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (null_or_empty_fd(fileno(file))) {
|
||||
log_debug("Skipping empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
link = new0(link_config, 1);
|
||||
if (!link)
|
||||
return log_oom();
|
||||
|
@ -1533,15 +1533,19 @@ static int parse_file(struct udev_rules *rules, const char *filename)
|
||||
int line_nr = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (null_or_empty_path(filename)) {
|
||||
log_debug("skip empty file: %s", filename);
|
||||
return 0;
|
||||
}
|
||||
log_debug("read rules file: %s", filename);
|
||||
|
||||
f = fopen(filename, "re");
|
||||
if (f == NULL)
|
||||
return -1;
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return 0;
|
||||
else
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (null_or_empty_fd(fileno(f))) {
|
||||
log_debug("Skipping empty file: %s", filename);
|
||||
return 0;
|
||||
} else
|
||||
log_debug("Reading rules file: %s", filename);
|
||||
|
||||
first_token = rules->token_cur;
|
||||
filename_off = rules_add_string(rules, filename);
|
||||
|
Loading…
x
Reference in New Issue
Block a user