Репозитории ALT
S: | 2.4.0-alt9 |
5.1: | 2.4.0-alt5 |
4.1: | 2.4.0-alt4 |
4.0: | 2.4.0-alt4 |
3.0: | 2.4.0-alt1 |
+backports: | 2.4.0-alt0.M30.2 |
Группа :: Система/Серверы
Пакет: libfcgi
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: libfcgi-php-changes.patch
Скачать
Скачать
--- fcgi/libfcgi/fcgiapp.c.orig 2001-12-13 01:54:10 +0300
+++ fcgi/libfcgi/fcgiapp.c 2007-03-24 22:37:32 +0300
@@ -886,7 +886,7 @@ static void CopyAndAdvance(char **destPt
*/
int FCGX_FFlush(FCGX_Stream *stream)
{
- if(stream->isClosed || stream->isReader)
+ if(!stream || stream->isClosed || stream->isReader)
return 0;
stream->emptyBuffProc(stream, FALSE);
return (stream->isClosed) ? -1 : 0;
@@ -990,12 +990,6 @@ void FCGX_ClearError(FCGX_Stream *stream
}
/*
- *======================================================================
- * Parameters
- *======================================================================
- */
-
-/*
* A vector of pointers representing the parameters received
* by a FastCGI application server, with the vector's length
* and last valid element so adding new parameters is efficient.
@@ -1003,8 +997,8 @@ void FCGX_ClearError(FCGX_Stream *stream
typedef struct Params {
FCGX_ParamArray vec; /* vector of strings */
- int length; /* number of string vec can hold */
- char **cur; /* current item in vec; *cur == NULL */
+ int length; /* number of string vec can hold */
+ char **cur; /* current item in vec; *cur == NULL */
} Params;
typedef Params *ParamsPtr;
@@ -1080,13 +1074,45 @@ static void PutParam(ParamsPtr paramsPtr
*paramsPtr->cur++ = nameValue;
size = paramsPtr->cur - paramsPtr->vec;
if(size >= paramsPtr->length) {
- paramsPtr->length *= 2;
- paramsPtr->vec = (FCGX_ParamArray)realloc(paramsPtr->vec, paramsPtr->length * sizeof(char *));
- paramsPtr->cur = paramsPtr->vec + size;
+ paramsPtr->length *= 2;
+ paramsPtr->vec = (FCGX_ParamArray)realloc(paramsPtr->vec, paramsPtr->length * sizeof(char *));
+ paramsPtr->cur = paramsPtr->vec + size;
}
*paramsPtr->cur = NULL;
}
+
+void FCGX_PutEnv(FCGX_Request *request, char *var)
+{
+ char *nameValue;
+ char *e, **p;
+ int len;
+
+ if (!strchr(var,'=')) {
+ return;
+ }
+ nameValue = StringCopy(var);
+ e = strchr(nameValue,'=');
+ *e = 0;
+
+ /* find the name and replace it */
+ len = strlen(nameValue);
+
+ for (p = request->envp; p && *p; ++p) {
+ if((strncmp(nameValue, *p, len) == 0) && ((*p)[len] == '=')) {
+ free(*p);
+ *e = '=';
+ *p = nameValue;
+ return;
+ }
+ }
+ *e = '=';
+ /* this is a new var, add it to the environment */
+ PutParam(request->paramsPtr,nameValue);
+ request->envp = request->paramsPtr->vec;
+}
+
+
/*
*----------------------------------------------------------------------
*
@@ -1109,7 +1135,7 @@ char *FCGX_GetParam(const char *name, FC
len = strlen(name);
- for (p = envp; *p; ++p) {
+ for (p = envp; p && *p; ++p) {
if((strncmp(name, *p, len) == 0) && ((*p)[len] == '=')) {
return *p+len+1;
}
@@ -1946,7 +1972,8 @@ int FCGX_IsCGI(void)
int rc = FCGX_Init();
if (rc) {
/* exit() isn't great, but hey */
- exit((rc < 0) ? rc : -rc);
+ /* exit((rc < 0) ? rc : -rc); */
+ return 0;
}
}
@@ -2307,3 +2335,23 @@ void FCGX_SetExitStatus(int status, FCGX
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;
+}
--- fcgi/include/fcgiapp.h.orig 2001-11-22 00:10:11 +0300
+++ fcgi/include/fcgiapp.h 2007-03-24 22:37:32 +0300
@@ -9,7 +9,7 @@
* See the file "LICENSE.TERMS" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * $Id: fcgiapp.h,v 1.12 2001/11/21 21:10:11 robs Exp $
+ * $Id: fcgiapp.h,v 1.1.4.2 2003/09/21 22:08:17 sas Exp $
*/
#ifndef _FCGIAPP_H
@@ -94,9 +94,9 @@ typedef struct FCGX_Request {
FCGX_Stream *in;
FCGX_Stream *out;
FCGX_Stream *err;
- char **envp;
+ char **envp;
- /* Don't use anything below here */
+ /* Don't use anything below here */
struct Params *paramsPtr;
int ipcFd; /* < 0 means no connection */
@@ -104,8 +104,9 @@ typedef struct FCGX_Request {
int keepConnection; /* don't close ipcFd at end of request */
int appStatus;
int nWriters; /* number of open writers (0..2) */
- int flags;
- int listen_sock;
+ int flags;
+ int listen_sock;
+ int detached;
} FCGX_Request;
@@ -347,7 +348,8 @@ DLLAPI void FCGX_SetExitStatus(int statu
*----------------------------------------------------------------------
*/
DLLAPI char *FCGX_GetParam(const char *name, FCGX_ParamArray envp);
-
+DLLAPI void FCGX_PutEnv(FCGX_Request *request, char *nameValue);
+
/*
*======================================================================
* Readers
@@ -529,7 +531,7 @@ DLLAPI int FCGX_VFPrintF(FCGX_Stream *st
*----------------------------------------------------------------------
*/
DLLAPI int FCGX_FFlush(FCGX_Stream *stream);
-
+
/*
*======================================================================
* Both Readers and Writers
@@ -615,6 +617,15 @@ DLLAPI void FCGX_FreeStream(FCGX_Stream
*/
DLLAPI void FCGX_ShutdownPending(void);
+
+/*
+ * Attach/Detach an accepted request from its listen socket.
+ * XXX This is not fully implemented at this time (patch welcome).
+ */
+DLLAPI int FCGX_Attach(FCGX_Request * r);
+DLLAPI int FCGX_Detach(FCGX_Request * r);
+
+
#if defined (__cplusplus) || defined (c_plusplus)
} /* terminate extern "C" { */
#endif