mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-16 06:52:27 +00:00
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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=324547
|
@ -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 a new issue