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,