mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-08-14 11:25:55 +00:00
lib/fs: Fix and simplify make_path()
Calling stat() before mkdir() is racey: The entry might change in between. Also, the call to stat() seems to exist only to check if the directory exists already. So simply call mkdir() unconditionally and catch only errors other than EEXIST. Signed-off-by: Phil Sutter <phil@nwl.cc>
This commit is contained in:
parent
b5c78e1b2c
commit
ac3415f5c1
20
lib/fs.c
20
lib/fs.c
@ -102,7 +102,6 @@ out:
|
||||
int make_path(const char *path, mode_t mode)
|
||||
{
|
||||
char *dir, *delim;
|
||||
struct stat sbuf;
|
||||
int rc = -1;
|
||||
|
||||
delim = dir = strdup(path);
|
||||
@ -120,20 +119,11 @@ int make_path(const char *path, mode_t mode)
|
||||
if (delim)
|
||||
*delim = '\0';
|
||||
|
||||
if (stat(dir, &sbuf) != 0) {
|
||||
if (errno != ENOENT) {
|
||||
fprintf(stderr,
|
||||
"stat failed for %s: %s\n",
|
||||
dir, strerror(errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (mkdir(dir, mode) != 0) {
|
||||
fprintf(stderr,
|
||||
"mkdir failed for %s: %s\n",
|
||||
dir, strerror(errno));
|
||||
goto out;
|
||||
}
|
||||
rc = mkdir(dir, mode);
|
||||
if (mkdir(dir, mode) != 0 && errno != EEXIST) {
|
||||
fprintf(stderr, "mkdir failed for %s: %s\n",
|
||||
dir, strerror(errno));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (delim == NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user