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
851d0b97ab
commit
7c9141d948
@ -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