*
*/
#ifndef lint
-static const char rcsid[] = "$Id: fcgiapp.c,v 1.26 2001/06/22 14:21:03 robs Exp $";
+static const char rcsid[] = "$Id: fcgiapp.c,v 1.35 2003/06/22 00:16:43 robs Exp $";
#endif /* not lint */
#include <assert.h>
#endif
#ifdef _WIN32
-#undef DLLAPI
#define DLLAPI __declspec(dllexport)
#endif
static char *webServerAddressList = NULL;
static FCGX_Request the_request;
+void FCGX_ShutdownPending(void)
+{
+ OS_ShutdownPending();
+}
+
static void *Malloc(size_t size)
{
void *result = malloc(size);
*/
int FCGX_GetChar(FCGX_Stream *stream)
{
- if(stream->rdNext != stream->stop)
- return *stream->rdNext++;
- if(stream->isClosed || !stream->isReader)
+ if (stream->isClosed || ! stream->isReader)
return EOF;
+
+ if (stream->rdNext != stream->stop)
+ return *stream->rdNext++;
+
stream->fillBuffProc(stream);
+ if (stream->isClosed)
+ return EOF;
+
stream->stopUnget = stream->rdNext;
- if(stream->rdNext != stream->stop)
+ if (stream->rdNext != stream->stop)
return *stream->rdNext++;
+
ASSERT(stream->isClosed); /* bug in fillBufProc if not */
return EOF;
}
{
int m, bytesMoved;
- if(n <= 0) {
+ if (stream->isClosed || ! stream->isReader || n <= 0) {
return 0;
}
/*
if(bytesMoved == n)
return bytesMoved;
str += m;
- }
+ }
if(stream->isClosed || !stream->isReader)
return bytesMoved;
stream->fillBuffProc(stream);
+ if (stream->isClosed)
+ return bytesMoved;
+
stream->stopUnget = stream->rdNext;
}
}
*/
if(stream->FCGI_errno == 0) {
stream->FCGI_errno = FCGI_errno;
- stream->isClosed = TRUE;
}
+
+ stream->isClosed = TRUE;
}
/*
FreeParams(&request->paramsPtr);
if (close) {
- OS_IpcClose(request->ipcFd);
+ OS_IpcClose(request->ipcFd, ! request->detached);
request->ipcFd = -1;
+ request->detached = 0;
}
}
return 0;
}
- /* If our compiler doesn't play by the ISO rules for struct layout, halt. */
- ASSERT(sizeof(FCGI_Header) == FCGI_HEADER_LEN);
-
FCGX_InitRequest(&the_request, FCGI_LISTENSOCK_FILENO, 0);
if (OS_LibInit(NULL) == -1) {
data->reqDataPtr->appStatus = status;
}
+
+int
+FCGX_Attach(FCGX_Request * r)
+{
+ r->detached = FALSE;
+ return 0;
+}
+
+
+int
+FCGX_Detach(FCGX_Request * r)
+{
+ if (r->ipcFd <= 0)
+ {
+ return -1;
+ }
+
+ r->detached = TRUE;
+ return 0;
+}