bjh 99/11/03 00:06:01
Modified: src/lib/apr/threadproc/os2 proc.c Log: Some fixes for OS/2 process creation: - Allow NULL environment block - Allow .exe extension to be omitted Revision Changes Path 1.10 +20 -13 apache-2.0/src/lib/apr/threadproc/os2/proc.c Index: proc.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/threadproc/os2/proc.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- proc.c 1999/10/26 15:16:56 1.9 +++ proc.c 1999/11/03 08:06:00 1.10 @@ -261,15 +261,19 @@ interpreter[0] = 0; extension = strrchr(progname, '.'); - if (extension == NULL) + if (extension == NULL || strchr(extension, '/') || strchr(extension, '\\')) extension = ""; if (attr->cmdtype == APR_SHELLCMD || strcasecmp(extension, ".cmd") == 0) { strcpy(interpreter, "#!" SHELL_PATH); extra_arg = "/C"; - } else if (stricmp(progname, ".exe") != 0) { + } else if (stricmp(extension, ".exe") != 0) { status = ap_open(&progfile, progname, APR_READ|APR_BUFFERED, 0, cont); + if (status == APR_ENOENT) { + progname = ap_pstrcat(cont, progname, ".exe", NULL); + } + if (status == APR_SUCCESS) { status = ap_fgets(interpreter, sizeof(interpreter), progfile); @@ -350,18 +354,21 @@ } /* Create environment block from list of envariables */ - for (env_len=1, e=0; env[e]; e++) - env_len += strlen(env[e]) + 1; - - env_block = ap_palloc(cont, env_len); - env_block_pos = env_block; - - for (e=0; env[e]; e++) { - strcpy(env_block_pos, env[e]); - env_block_pos += strlen(env_block_pos) + 1; - } + if (env) { + for (env_len=1, e=0; env[e]; e++) + env_len += strlen(env[e]) + 1; + + env_block = ap_palloc(cont, env_len); + env_block_pos = env_block; + + for (e=0; env[e]; e++) { + strcpy(env_block_pos, env[e]); + env_block_pos += strlen(env_block_pos) + 1; + } - *env_block_pos = 0; /* environment block is terminated by a double null */ + *env_block_pos = 0; /* environment block is terminated by a double null */ + } else + env_block = NULL; status = DosExecPgm(error_object, sizeof(error_object), attr->detached ? EXEC_BACKGROUND : EXEC_ASYNC,