]> git.saurik.com Git - apple/libc.git/blobdiff - stdlib/FreeBSD/system.c
Libc-1353.100.2.tar.gz
[apple/libc.git] / stdlib / FreeBSD / system.c
index c2a56c7c51cc30dce5e5fd2e262807a3e86195ed..8ab1ecac15de70315b66eccb1f1ceec9edd6f3b9 100644 (file)
@@ -27,6 +27,9 @@
  * SUCH DAMAGE.
  */
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wstrict-prototypes"
+
 #if defined(LIBC_SCCS) && !defined(lint)
 static char sccsid[] = "@(#)system.c   8.1 (Berkeley) 6/4/93";
 #endif /* LIBC_SCCS and not lint */
@@ -49,20 +52,25 @@ __FBSDID("$FreeBSD: src/lib/libc/stdlib/system.c,v 1.11 2007/01/09 00:28:10 imp
 #include <crt_externs.h>
 #define environ (*_NSGetEnviron())
 
+#include <TargetConditionals.h>
+
 #if __DARWIN_UNIX03
 #include <pthread.h>
 
+#if !(TARGET_OS_IPHONE && (TARGET_OS_SIMULATOR || !TARGET_OS_IOS))
 static pthread_mutex_t __systemfn_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
 extern int __unix_conforming;
-#ifdef VARIANT_CANCELABLE
-extern void _pthread_testcancel(pthread_t thread, int isconforming);
-#endif /* VARIANT_CANCELABLE */
 #endif /* __DARWIN_UNIX03 */
 
 int
 __system(command)
        const char *command;
 {
+#if TARGET_OS_IPHONE && (TARGET_OS_SIMULATOR || !TARGET_OS_IOS)
+       // Don't abort() on iOS for now
+       LIBC_ABORT("system() is not supported on this platform.");
+#else
        pid_t pid, savedpid;
        int pstat, err;
        struct sigaction ign, intact, quitact;
@@ -75,15 +83,19 @@ __system(command)
        if (__unix_conforming == 0)
                __unix_conforming = 1;
 #ifdef VARIANT_CANCELABLE
-       _pthread_testcancel(pthread_self(), 1);
+       pthread_testcancel();
 #endif /* VARIANT_CANCELABLE */
 #endif /* __DARWIN_UNIX03 */
 
        if (!command) {         /* just checking... */
+#if TARGET_OS_IPHONE
+               return(0);
+#else
                if (access(_PATH_BSHELL, F_OK) == -1)   /* if no sh or no access */
                        return(0);
                else
                        return(1);
+#endif
        }
 
        if ((err = posix_spawnattr_init(&attr)) != 0) {
@@ -142,7 +154,10 @@ __system(command)
        pthread_mutex_unlock(&__systemfn_mutex);
 #endif /* __DARWIN_UNIX03 */
        return(pstat);
+#endif /* TARGET_OS_IPHONE && (TARGET_OS_SIMULATOR || !TARGET_OS_IOS) */
 }
 
 __weak_reference(__system, system);
 __weak_reference(__system, _system);
+
+#pragma clang diagnostic pop