fix arm __tlsdesc_dynamic when built as thumb code without __ARM_ARCH>=5
[musl] / src / process / posix_spawn.c
index 2f8ef93..2965219 100644 (file)
@@ -8,7 +8,6 @@
 #include "syscall.h"
 #include "pthread_impl.h"
 #include "fdop.h"
-#include "libc.h"
 
 struct args {
        int p[2];
@@ -102,6 +101,10 @@ static int child(void *args_vp)
                                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;
@@ -122,6 +125,14 @@ static int child(void *args_vp)
                                        __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;
                        }
                }
        }