renamed libfcgi.dsp
[catagits/fcgi2.git] / libfcgi / fcgiapp.c
index 3ac0093..ff8df6b 100644 (file)
  *
  */
 #ifndef lint
-static const char rcsid[] = "$Id: fcgiapp.c,v 1.14 2000/08/02 13:07:40 robs Exp $";
+static const char rcsid[] = "$Id: fcgiapp.c,v 1.21 2001/06/18 14:25:09 robs Exp $";
 #endif /* not lint */
 
-#include "fcgi_config.h"
-
-#ifdef _WIN32
-#define DLLAPI  __declspec(dllexport)
-#endif
-
 #include <assert.h>
 #include <errno.h>
 #include <fcntl.h>      /* for fcntl */
@@ -31,6 +25,8 @@ static const char rcsid[] = "$Id: fcgiapp.c,v 1.14 2000/08/02 13:07:40 robs Exp
 #include <string.h>
 #include <sys/types.h>
 
+#include "fcgi_config.h"
+
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h> /* for getpeername */
 #endif
@@ -43,11 +39,19 @@ static const char rcsid[] = "$Id: fcgiapp.c,v 1.14 2000/08/02 13:07:40 robs Exp
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifdef _WIN32
+#define DLLAPI  __declspec(dllexport)
+#endif
+
+#include "fcgiapp.h"
+
 #include "fcgimisc.h"
-#include "fcgiappmisc.h"
 #include "fastcgi.h"
 #include "fcgios.h"
-#include "fcgiapp.h"
 
 /*
  * This is a workaround for one version of the HP C compiler
@@ -661,8 +665,8 @@ int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg)
                             buffCount = strlen(buffPtr);
                             break;
                        case 'h':
-                            shortArg = va_arg(arg, short);
-                           sprintf(buffPtr, fmtBuff, shortArg);
+                            shortArg = (short) va_arg(arg, int);
+                            sprintf(buffPtr, fmtBuff, shortArg);
                             buffCount = strlen(buffPtr);
                             break;
                        default:
@@ -685,8 +689,8 @@ int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg)
                             buffCount = strlen(buffPtr);
                             break;
                         case 'h':
-                            uShortArg = va_arg(arg, unsigned short);
-                           sprintf(buffPtr, fmtBuff, uShortArg);
+                            uShortArg = (unsigned short) va_arg(arg, int);
+                            sprintf(buffPtr, fmtBuff, uShortArg);
                             buffCount = strlen(buffPtr);
                             break;
                         default:
@@ -1083,9 +1087,12 @@ char *FCGX_GetParam(const char *name, FCGX_ParamArray envp)
 {
     int len;
     char **p;
+
+       if (name == NULL || envp == NULL) return NULL;
+
     len = strlen(name);
-    if(len == 0) return NULL;
-    for (p = envp; *p != NULL; p++) {
+
+    for (p = envp; *p; ++p) {
         if((strncmp(name, *p, len) == 0) && ((*p)[len] == '=')) {
             return *p+len+1;
         }
@@ -1988,30 +1995,30 @@ void FCGX_Finish_r(FCGX_Request *reqDataPtr)
         int errStatus = FCGX_FClose(reqDataPtr->err);
         int outStatus = FCGX_FClose(reqDataPtr->out);
 
-        if (errStatus  || outStatus
-            || FCGX_GetError(reqDataPtr->in)
-            || !reqDataPtr->keepConnection)
+        if (errStatus || outStatus || FCGX_GetError(reqDataPtr->in))
         {
             OS_IpcClose(reqDataPtr->ipcFd);
+            reqDataPtr->ipcFd = -1;
         }
+    }
 
-        ASSERT(reqDataPtr->nWriters == 0);
-
-        FreeStream(&reqDataPtr->in);
-        reqDataPtr->in = NULL;
-
-        FreeStream(&reqDataPtr->out);
-        reqDataPtr->out = NULL;
+    FCGX_Free(reqDataPtr);
+}
 
-        FreeStream(&reqDataPtr->err);
-        reqDataPtr->err = NULL;
+void FCGX_Free(FCGX_Request * request)
+{
+    if (request == NULL) 
+        return;
 
-        FreeParams(&reqDataPtr->paramsPtr);
-        reqDataPtr->paramsPtr = NULL;
-    }
+    FreeStream(&request->in);
+    FreeStream(&request->out);
+    FreeStream(&request->err);
+    FreeParams(&request->paramsPtr);
 
-    if (!reqDataPtr->keepConnection) {
-        reqDataPtr->ipcFd = -1;
+    if (!request->keepConnection)
+    {
+        OS_IpcClose(request->ipcFd);
+        request->ipcFd = -1;
     }
 }
 
@@ -2035,6 +2042,8 @@ int FCGX_InitRequest(FCGX_Request *request, int sock, int flags)
     /* @@@ Should validate against "known" flags */
     request->flags = flags;
 
+    request->ipcFd = -1;
+
     return 0;
 }
 
@@ -2219,14 +2228,8 @@ int FCGX_Accept_r(FCGX_Request *reqDataPtr)
          * Close the connection and try again.
          */
 TryAgain:
-        FreeParams(&reqDataPtr->paramsPtr);
-        reqDataPtr->paramsPtr = NULL;
-
-        FreeStream(&reqDataPtr->in);
-        reqDataPtr->in = NULL;
+        FCGX_Free(reqDataPtr);
 
-        OS_Close(reqDataPtr->ipcFd);
-        reqDataPtr->ipcFd = -1;
     } /* for (;;) */
     /*
      * Build the remaining data structures representing the new