xinstall: plug an infinite loop in directory creation
If stat continues to fail with ENOENT and mkdir with EEXIST the code wont finish. In particular this can show up when the target path follows through a symlink to a non-existent directory. Reported by: ae MFC after: 1 week
This commit is contained in:
parent
9aaf913e13
commit
92b25dcd61
@ -1292,17 +1292,19 @@ install_dir(char *path)
|
||||
{
|
||||
char *p;
|
||||
struct stat sb;
|
||||
int ch;
|
||||
int ch, tried_mkdir;
|
||||
|
||||
for (p = path;; ++p)
|
||||
if (!*p || (p != path && *p == '/')) {
|
||||
tried_mkdir = 0;
|
||||
ch = *p;
|
||||
*p = '\0';
|
||||
again:
|
||||
if (stat(path, &sb) < 0) {
|
||||
if (errno != ENOENT)
|
||||
if (errno != ENOENT || tried_mkdir)
|
||||
err(EX_OSERR, "stat %s", path);
|
||||
if (mkdir(path, 0755) < 0) {
|
||||
tried_mkdir = 1;
|
||||
if (errno == EEXIST)
|
||||
goto again;
|
||||
err(EX_OSERR, "mkdir %s", path);
|
||||
|
Loading…
Reference in New Issue
Block a user