# --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: package/*/fcgiwrap/no-buffering.patch.musl # Copyright (C) 2024 The T2 SDE Project # # This Copyright note is generated by scripts/Create-CopyPatch, # more information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License version 2 as used by the T2 SDE. # --- T2-COPYRIGHT-NOTE-END --- From eb54c65446693366aedfe72f002c6bb4e1a5d748 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Thu, 24 Mar 2016 21:34:17 -0500 Subject: [PATCH] Add environment variable NO_BUFFERING to disable output buffering Fixes #36 --- fcgiwrap.8 | 4 ++++ fcgiwrap.c | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/fcgiwrap.8 b/fcgiwrap.8 index bf02c26..892b594 100644 --- a/fcgiwrap.8 +++ b/fcgiwrap.8 @@ -65,6 +65,10 @@ SCRIPT_FILENAME .RS complete path to CGI script. When set, overrides DOCUMENT_ROOT and SCRIPT_NAME +.RE +NO_BUFFERING +.RS +When set (e.g., to ""), disables output buffering. .SH EXAMPLE The fastest way to see \fBfcgiwrap\fP do something is to launch it at the command line diff --git a/fcgiwrap.c b/fcgiwrap.c index b44d8aa..42e3ec9 100644 --- a/fcgiwrap.c +++ b/fcgiwrap.c @@ -191,6 +191,7 @@ struct fcgi_context { int fd_stderr; unsigned int reply_state; pid_t cgi_pid; + int unbuffered; }; static void fcgi_finish(struct fcgi_context *fc, const char* msg) @@ -256,6 +257,10 @@ static const char * fcgi_pass_fd(struct fcgi_context *fc, int *fdp, FCGI_FILE *f return "writing CGI reply"; } } + + if (fc->unbuffered && FCGI_fflush(ffp)) { + return "flushing CGI reply"; + } } else { if (nread < 0) { return "reading CGI reply"; @@ -590,6 +595,7 @@ static void handle_fcgi_request(void) fc.fd_stderr = pipe_err[0]; fc.reply_state = REPLY_STATE_INIT; fc.cgi_pid = pid; + fc.unbuffered = !!getenv("NO_BUFFERING"); fcgi_pass(&fc); }