ben 97/10/20 05:09:00
Modified: src/main alloc.c util_script.c
Log:
Fix CGI under Win95 (plus some error checking). This needs doing more
carefully.
Revision Changes Path
1.52 +18 -10 apachen/src/main/alloc.c
Index: alloc.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/alloc.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- alloc.c 1997/10/15 00:25:14 1.51
+++ alloc.c 1997/10/20 12:08:58 1.52
@@ -60,6 +60,7 @@
#include "httpd.h"
#include "multithread.h"
+#include "http_log.h"
#include <stdarg.h>
@@ -1217,9 +1218,9 @@
}
#ifdef WIN32
-#define enc_pipe(fds) _pipe(fds, 512, O_TEXT | O_NOINHERIT)
+#define os_pipe(fds) _pipe(fds, 512, O_BINARY | O_NOINHERIT)
#else
-#define enc_pipe(fds) pipe(fds)
+#define os_pipe(fds) pipe(fds)
#endif /* WIN32 */
/* for fdopen, to get binary mode */
@@ -1239,11 +1240,11 @@
int err_fds[2];
int save_errno;
- if (pipe_in && enc_pipe(in_fds) < 0) {
+ if (pipe_in && os_pipe(in_fds) < 0) {
return 0;
}
- if (pipe_out && enc_pipe(out_fds) < 0) {
+ if (pipe_out && os_pipe(out_fds) < 0) {
save_errno = errno;
if (pipe_in) {
close(in_fds[0]);
@@ -1253,7 +1254,7 @@
return 0;
}
- if (pipe_err && enc_pipe(err_fds) < 0) {
+ if (pipe_err && os_pipe(err_fds) < 0) {
save_errno = errno;
if (pipe_in) {
close(in_fds[0]);
@@ -1281,22 +1282,27 @@
/* Now do the right thing with your pipes */
if (pipe_in) {
hStdIn = dup(fileno(stdin));
- dup2(in_fds[0], fileno(stdin));
+ if(dup2(in_fds[0], fileno(stdin)))
+ aplog_error(APLOG_MARK, APLOG_ERR, NULL, "dup2(stdin) failed");
close(in_fds[0]);
}
if (pipe_out) {
hStdOut = dup(fileno(stdout));
- dup2(out_fds[1], fileno(stdout));
+ close(fileno(stdout));
+ if(dup2(out_fds[1], fileno(stdout)))
+ aplog_error(APLOG_MARK, APLOG_ERR, NULL, "dup2(stdout) failed");
close(out_fds[1]);
}
if (pipe_err) {
hStdErr = dup(fileno(stderr));
- dup2(err_fds[1], fileno(stderr));
+ if(dup2(err_fds[1], fileno(stderr)))
+ aplog_error(APLOG_MARK, APLOG_ERR, NULL, "dup2(stdin) failed");
close(err_fds[1]);
}
pid = (*func) (data);
- if (!pid) {
+ if (pid == -1) {
+ /* If we are going to save it, we ought to do something with it
later, right? - Ben */
save_errno = errno;
close(in_fds[1]);
close(out_fds[0]);
@@ -1311,7 +1317,9 @@
if (pipe_err)
dup2(hStdErr, fileno(stderr));
- if (pid) {
+ if(pid == -1)
+ aplog_error(APLOG_MARK, APLOG_ERR, NULL, "spawn failed");
+ else {
note_subprocess(p, pid, kill_how);
if (pipe_in) {
*pipe_in = in_fds[1];
1.79 +6 -0 apachen/src/main/util_script.c
Index: util_script.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/util_script.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -r1.78 -r1.79
--- util_script.c 1997/10/15 23:37:47 1.78
+++ util_script.c 1997/10/20 12:08:59 1.79
@@ -668,6 +668,7 @@
int i, sz;
char *dot;
char *exename;
+ char *s;
int is_exe = 0;
interpreter[0] = 0;
@@ -732,6 +733,11 @@
}
}
+ /* FIXME: Probably ought to do this in another buffer - Ben */
+ /* This really annoys me - Win95 (and not NT) spawn[vl]e don't like
'/'! - Ben */
+ for(s=r->filename ; *s ; ++s)
+ if(*s == '/')
+ *s='\\';
if ((!r->args) || (!r->args[0]) || (ind(r->args, '=') >= 0)) {
if (is_exe || is_binary) {