add warning when in devkit and library hasn't been compiled yet
[catagits/fcgi2.git] / cgi-fcgi / cgi-fcgi.c
index b495032..4e03e4d 100644 (file)
  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  *
  */
-
 #ifndef lint
-static const char rcsid[] = "$Id: cgi-fcgi.c,v 1.5 1999/07/26 22:03:07 roberts Exp $";
+static const char rcsid[] = "$Id: cgi-fcgi.c,v 1.10 1999/08/27 19:39:17 roberts Exp $";
 #endif /* not lint */
 
-#include <stdio.h>
-#if defined HAVE_UNISTD_H || defined __linux__
-#include <unistd.h>
-#endif
-#include <fcntl.h>
+#include "fcgi_config.h"
+
 #include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <errno.h>
-#include <ctype.h>
+
 #ifdef HAVE_NETDB_H
 #include <netdb.h>
 #endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
+
+#ifdef _WIN32
+#include <stdlib.h>
+#else
+extern char **environ;
 #endif
+
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#if defined HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "fcgimisc.h"
 #include "fcgiapp.h"
 #include "fcgiappmisc.h"
 #include "fastcgi.h"
-#include "fcgi_config.h"
 #include "fcgios.h"
 
-#include <stdlib.h>
 
 static int wsReadPending = 0;
 static int fcgiReadPending = 0;
@@ -336,6 +346,18 @@ static int webServerReadHandlerEOF;
                          * the Web server. Used in main to prevent
                          * rescheduling WebServerReadHandler. */
 
+static void WriteStdinEof(void)
+{
+    static int stdin_eof_sent = 0;
+
+    if (stdin_eof_sent)
+       return;
+
+    *((FCGI_Header *)fromWS.stop) = MakeHeader(FCGI_STDIN, requestId, 0, 0);
+    fromWS.stop += sizeof(FCGI_Header);
+    stdin_eof_sent = 1;
+}
+
 /*
  *----------------------------------------------------------------------
  *
@@ -363,6 +385,10 @@ static void WebServerReadHandler(ClientData clientData, int bytesRead)
     bytesToRead -= bytesRead;
     fromWS.stop = &fromWS.buff[sizeof(FCGI_Header) + bytesRead];
     webServerReadHandlerEOF = (bytesRead == 0);
+
+    if (bytesToRead <= 0)
+       WriteStdinEof();
+
     ScheduleIo();
 }
 \f
@@ -478,7 +504,8 @@ static void FCGI_Start(char *bindPath, char *appPath, int nServers)
 {
     int listenFd, i;
 
-    if((listenFd = OS_CreateLocalIpcFd(bindPath)) == -1) {
+    /* @@@ Should be able to pick up the backlog as an arg */
+    if((listenFd = OS_CreateLocalIpcFd(bindPath, 5)) == -1) {
         exit(OS_Errno);
     }
 
@@ -522,7 +549,7 @@ static void FCGIUtil_BuildNameValueHeader(
     unsigned char *startHeaderBuffPtr = headerBuffPtr;
 
     ASSERT(nameLen >= 0);
-    if (nameLen < 0x80 == 0) {
+    if (nameLen < 0x80) {
         *headerBuffPtr++ = nameLen;
     } else {
         *headerBuffPtr++ = (nameLen >> 24) | 0x80;
@@ -531,7 +558,7 @@ static void FCGIUtil_BuildNameValueHeader(
         *headerBuffPtr++ = nameLen;
     }
     ASSERT(valueLen >= 0);
-    if (valueLen < 0x80 == 0) {
+    if (valueLen < 0x80) {
         *headerBuffPtr++ = valueLen;
     } else {
         *headerBuffPtr++ = (valueLen >> 24) | 0x80;
@@ -602,7 +629,7 @@ static int ParseArgs(int argc, char *argv[],
                                     "%d is max from a file\n", MAXARGS);
                                exit(-1);
                        }
-                       if((av[ac] = malloc(strlen(tp1)+1)) == NULL) {
+                       if((av[ac] = (char *)malloc(strlen(tp1)+1)) == NULL) {
                            fprintf(stderr, "Cannot allocate %d bytes\n",
                                    strlen(tp1)+1);
                            exit(-1);
@@ -642,7 +669,7 @@ static int ParseArgs(int argc, char *argv[],
            }
        } else if(*appPathPtr == '\0') {
             strcpy(appPathPtr, argv[i]);
-        } else if(isdigit(argv[i][0]) && *nServersPtr == 0) {
+        } else if(isdigit((int)argv[i][0]) && *nServersPtr == 0) {
             *nServersPtr = atoi(argv[i]);
             if(*nServersPtr <= 0) {
                 fprintf(stderr, "Number of servers must be greater than 0\n");
@@ -791,7 +818,11 @@ int main(int argc, char **argv)
     numFDs = max(appServerSock, STDIN_FILENO) + 1;
     OS_SetFlags(appServerSock, O_NONBLOCK);
 
+    if (bytesToRead <= 0)
+       WriteStdinEof();
+
     ScheduleIo();
+
     while(!exitStatusSet) {
         /*
         * NULL = wait forever (or at least until there's something