*
*/
#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 */
#include <string.h>
#include <sys/types.h>
+#include "fcgi_config.h"
+
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h> /* for getpeername */
#endif
#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
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:
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:
{
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;
}
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;
}
}
/* @@@ Should validate against "known" flags */
request->flags = flags;
+ request->ipcFd = -1;
+
return 0;
}
* 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