=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/io/ox_launch.c,v retrieving revision 1.1 retrieving revision 1.5 diff -u -p -r1.1 -r1.5 --- OpenXM_contrib2/asir2018/io/ox_launch.c 2018/09/19 05:45:08 1.1 +++ OpenXM_contrib2/asir2018/io/ox_launch.c 2020/10/06 06:31:20 1.5 @@ -44,7 +44,7 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM$ + * $OpenXM: OpenXM_contrib2/asir2018/io/ox_launch.c,v 1.4 2019/12/14 12:34:02 fujimoto Exp $ */ #include #include @@ -52,7 +52,7 @@ #include "ca.h" #include "com.h" #include "ox.h" -#include "gc.h" +// #include "gc.h" #if defined(VISUAL) || defined(__MINGW32__) #include #include @@ -75,6 +75,7 @@ HANDLE hIntr,hReset,hKill; extern int _fileinfo; #endif +void GC_init(); static void put_log(char *); static int ox_spawn(char *,int,char *,char *); static void launch_error(char *); @@ -98,7 +99,11 @@ char *str; static FILE *logfile; if ( !logfile ) +#if defined(ANDROID) + logfile = fopen("/data/data/com.termux/files/usr/tmp/ox_log","w"); +#else logfile = fopen("/tmp/ox_log","w"); +#endif fprintf(logfile,"%s\n",str); fflush(logfile); } @@ -161,7 +166,7 @@ char **argv; /* XXX a dirty hack */ if ( !getenv("LD_LIBRARY_PATH") ) { - if ( e = getenv("OpenXM_HOME") ) { + if ( ( e = getenv("OpenXM_HOME") ) != 0 ) { s = (char *)alloca(strlen(e)+100); sprintf(s,"LD_LIBRARY_PATH=%s/lib",e); putenv(s); @@ -330,7 +335,15 @@ char *nolog; if ( bs != 4 && dup2(bs,4) != 4 ) exit(1); { -#if defined(linux) || defined(__NeXT__) || defined(ultrix) || defined(__CYGWIN__) +#if defined(ANDROID) +#include + struct rlimit rl; + + getrlimit(RLIMIT_NOFILE,&rl); + close(0); + for ( i = 5; i < rl.rlim_cur; i++ ) + close(i); +#elif defined(linux) || defined(__NeXT__) || defined(ultrix) || defined(__CYGWIN__) #include close(0); for ( i = 5; i < NOFILE; i++ ) @@ -379,19 +392,23 @@ char *s; exit(0); } +#define asir_OperandStackSize BUFSIZ + static void ox_io_init(sock) int sock; { endian_init(); /* server mode */ sindex = get_iofp(sock,0,1); - asir_OperandStack = (Obj *)CALLOC(BUFSIZ,sizeof(Obj)); + asir_OperandStack = (Obj *)CALLOC(asir_OperandStackSize,sizeof(Obj)); asir_OperandStackPtr = -1; } static void push_one(obj) Obj obj; { + if ( asir_OperandStackPtr == asir_OperandStackSize-1 ) + return; if ( !obj || OID(obj) != O_VOID ) asir_OperandStack[++asir_OperandStackPtr] = obj; } @@ -399,7 +416,8 @@ Obj obj; static Obj pop_one() { if ( asir_OperandStackPtr >= 0 ) { return asir_OperandStack[asir_OperandStackPtr--]; - } + } else + return 0; } static void terminate_server(int sig)