|
Lines 213-219
Link Here
|
| 213 |
* and ".." are all fairly nasty problems. Note, if we can't get the |
213 |
* and ".." are all fairly nasty problems. Note, if we can't get the |
| 214 |
* descriptor we run anyway, just more slowly. |
214 |
* descriptor we run anyway, just more slowly. |
| 215 |
*/ |
215 |
*/ |
| 216 |
if (!ISSET(FTS_NOCHDIR) && (sp->fts_rfd = _open(".", O_RDONLY, 0)) < 0) |
216 |
if (!ISSET(FTS_NOCHDIR) && |
|
|
217 |
(sp->fts_rfd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) |
| 217 |
SET(FTS_NOCHDIR); |
218 |
SET(FTS_NOCHDIR); |
| 218 |
|
219 |
|
| 219 |
return (sp); |
220 |
return (sp); |
|
Lines 342-348
Link Here
|
| 342 |
(p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { |
343 |
(p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { |
| 343 |
p->fts_info = fts_stat(sp, p, 1); |
344 |
p->fts_info = fts_stat(sp, p, 1); |
| 344 |
if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { |
345 |
if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { |
| 345 |
if ((p->fts_symfd = _open(".", O_RDONLY, 0)) < 0) { |
346 |
if ((p->fts_symfd = _open(".", |
|
|
347 |
O_RDONLY | O_CLOEXEC, 0)) < 0) { |
| 346 |
p->fts_errno = errno; |
348 |
p->fts_errno = errno; |
| 347 |
p->fts_info = FTS_ERR; |
349 |
p->fts_info = FTS_ERR; |
| 348 |
} else |
350 |
} else |
|
Lines 433-439
Link Here
|
| 433 |
p->fts_info = fts_stat(sp, p, 1); |
435 |
p->fts_info = fts_stat(sp, p, 1); |
| 434 |
if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { |
436 |
if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { |
| 435 |
if ((p->fts_symfd = |
437 |
if ((p->fts_symfd = |
| 436 |
_open(".", O_RDONLY, 0)) < 0) { |
438 |
_open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) { |
| 437 |
p->fts_errno = errno; |
439 |
p->fts_errno = errno; |
| 438 |
p->fts_info = FTS_ERR; |
440 |
p->fts_info = FTS_ERR; |
| 439 |
} else |
441 |
} else |
|
Lines 574-580
Link Here
|
| 574 |
ISSET(FTS_NOCHDIR)) |
576 |
ISSET(FTS_NOCHDIR)) |
| 575 |
return (sp->fts_child = fts_build(sp, instr)); |
577 |
return (sp->fts_child = fts_build(sp, instr)); |
| 576 |
|
578 |
|
| 577 |
if ((fd = _open(".", O_RDONLY, 0)) < 0) |
579 |
if ((fd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) |
| 578 |
return (NULL); |
580 |
return (NULL); |
| 579 |
sp->fts_child = fts_build(sp, instr); |
581 |
sp->fts_child = fts_build(sp, instr); |
| 580 |
if (fchdir(fd)) { |
582 |
if (fchdir(fd)) { |
|
Lines 1145-1151
Link Here
|
| 1145 |
newfd = fd; |
1147 |
newfd = fd; |
| 1146 |
if (ISSET(FTS_NOCHDIR)) |
1148 |
if (ISSET(FTS_NOCHDIR)) |
| 1147 |
return (0); |
1149 |
return (0); |
| 1148 |
if (fd < 0 && (newfd = _open(path, O_RDONLY, 0)) < 0) |
1150 |
if (fd < 0 && (newfd = _open(path, O_RDONLY | O_CLOEXEC, 0)) < 0) |
| 1149 |
return (-1); |
1151 |
return (-1); |
| 1150 |
if (_fstat(newfd, &sb)) { |
1152 |
if (_fstat(newfd, &sb)) { |
| 1151 |
ret = -1; |
1153 |
ret = -1; |