projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix arm __tlsdesc_dynamic when built as thumb code without __ARM_ARCH>=5
[musl]
/
src
/
process
/
posix_spawn.c
diff --git
a/src/process/posix_spawn.c
b/src/process/posix_spawn.c
index
2f8ef93
..
2965219
100644
(file)
--- a/
src/process/posix_spawn.c
+++ b/
src/process/posix_spawn.c
@@
-8,7
+8,6
@@
#include "syscall.h"
#include "pthread_impl.h"
#include "fdop.h"
#include "syscall.h"
#include "pthread_impl.h"
#include "fdop.h"
-#include "libc.h"
struct args {
int p[2];
struct args {
int p[2];
@@
-102,6
+101,10
@@
static int child(void *args_vp)
break;
case FDOP_DUP2:
fd = op->srcfd;
break;
case FDOP_DUP2:
fd = op->srcfd;
+ if (fd == p) {
+ ret = -EBADF;
+ goto fail;
+ }
if (fd != op->fd) {
if ((ret=__sys_dup2(fd, op->fd))<0)
goto fail;
if (fd != op->fd) {
if ((ret=__sys_dup2(fd, op->fd))<0)
goto fail;
@@
-122,6
+125,14
@@
static int child(void *args_vp)
__syscall(SYS_close, fd);
}
break;
__syscall(SYS_close, fd);
}
break;
+ case FDOP_CHDIR:
+ ret = __syscall(SYS_chdir, op->path);
+ if (ret<0) goto fail;
+ break;
+ case FDOP_FCHDIR:
+ ret = __syscall(SYS_fchdir, op->fd);
+ if (ret<0) goto fail;
+ break;
}
}
}
}
}
}