Browse Source

Fix absence of 'system' in iOS

Despite claiming to be ISO, the C library in some Apple platforms
does not implement 'system'.
Roberto Ierusalimschy 2 years ago
parent
commit
d69789da1c
1 changed files with 17 additions and 1 deletions
  1. 17 1
      loslib.c

+ 17 - 1
loslib.c

@@ -138,12 +138,28 @@
 /* }================================================================== */
 /* }================================================================== */
 
 
 
 
+/*
+** Despite claiming to be ISO, the C library in some Apple platforms
+** does not implement 'system'.
+*/
+#if !defined(l_system) && defined(__APPLE__)	/* { */
+#include "TargetConditionals.h"
+#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV
+#define l_system(cmd) ((cmd) == NULL ? 0 : -1)
+#endif
+#endif						/* } */
+
+#if !defined(l_system)
+#define l_system(cmd)	system(cmd)  /* default definition */
+#endif
+
+
 
 
 static int os_execute (lua_State *L) {
 static int os_execute (lua_State *L) {
   const char *cmd = luaL_optstring(L, 1, NULL);
   const char *cmd = luaL_optstring(L, 1, NULL);
   int stat;
   int stat;
   errno = 0;
   errno = 0;
-  stat = system(cmd);
+  stat = l_system(cmd);
   if (cmd != NULL)
   if (cmd != NULL)
     return luaL_execresult(L, stat);
     return luaL_execresult(L, stat);
   else {
   else {