From a8a4d6d837f5029124d26483e4b3a390de69823e Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 17 Dec 2010 16:24:33 +0000 Subject: [PATCH] Slightly modified patch from James Beal: add --no-eof (or --noeof) as an option to the web server mode, to inhibit it from trying to read stdin and treating EOF there as a cue to shut down. git-svn-id: svn://svn.tartarus.org/sgt/agedu@9036 cda61777-01e9-0310-a592-d414129be87e --- agedu.but | 14 ++++++++++---- agedu.c | 7 +++++++ httpd.c | 13 ++++++++----- httpd.h | 1 + 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/agedu.but b/agedu.but index e98e556..4e90a14 100644 --- a/agedu.but +++ b/agedu.but @@ -166,10 +166,11 @@ default it invents its own URL and prints it out. \lcont{ -The web server runs until \cw{agedu} receives an end-of-file event -on its standard input. (The expected usage is that you run it from -the command line, immediately browse web pages until you're -satisfied, and then press Ctrl-D.) +The web server runs until \cw{agedu} receives an end-of-file event on +its standard input. (The expected usage is that you run it from the +command line, immediately browse web pages until you're satisfied, and +then press Ctrl-D.) To disable the EOF behaviour, use the +\cw{--no-eof} option. In case the index file contains any confidential information about your file system, the web server protects the pages it serves from @@ -638,6 +639,11 @@ consist of the username, followed by a colon, followed by the password, followed \e{immediately} by end of file (no trailing newline, or else it will be considered part of the password). +\dt \cw{--no-eof} + +\dd Stop \cw{agedu} in web server mode from looking for end-of-file on +standard input and treating it as a signal to terminate. + \U LIMITATIONS The data file is pretty large. The core of \cw{agedu} is the diff --git a/agedu.c b/agedu.c index 08286a5..afaa556 100644 --- a/agedu.c +++ b/agedu.c @@ -341,6 +341,8 @@ static void text_query(const void *mappedfile, const char *querydir, HELPOPT("[--scan,--load] keep real atimes on directories") \ NOVAL(NODIRATIME) LONG(no_dir_atime) LONG(no_dir_atimes) \ HELPOPT("[--scan,--load] fake atimes on directories") \ + NOVAL(NOEOF) LONG(no_eof) LONG(noeof) \ + HELPOPT("[--web] do not close web server on EOF") \ NOVAL(MTIME) LONG(mtime) \ HELPOPT("[--scan] use mtime instead of atime") \ NOVAL(SHOWFILES) LONG(files) \ @@ -510,6 +512,7 @@ int main(int argc, char **argv) int depth = -1, gotdepth = 0; int fakediratimes = 1; int mtime = 0; + int closeoneof = 1; int showfiles = 0; #ifdef DEBUG_MAD_OPTION_PARSING_MACROS @@ -767,6 +770,9 @@ int main(int argc, char **argv) case OPT_MTIME: mtime = 1; break; + case OPT_NOEOF: + closeoneof = 0; + break; case OPT_DATAFILE: filename = optval; break; @@ -1589,6 +1595,7 @@ int main(int argc, char **argv) dcfg.address = httpserveraddr; dcfg.port = httpserverport; + dcfg.closeoneof = closeoneof; dcfg.basicauthdata = httpauthdata; pcfg.format = NULL; pcfg.rootpage = NULL; diff --git a/httpd.c b/httpd.c index aa40084..dd7aa23 100644 --- a/httpd.c +++ b/httpd.c @@ -569,17 +569,20 @@ void run_httpd(const void *t, int authmask, const struct httpd_config *dcfg, printf("URL: http://%s:%d/\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); } + fflush(stdout); /* * Now construct an fd structure to hold it. */ new_fdstruct(fd, FD_LISTENER); - /* - * Read from standard input, and treat EOF as a notification - * to exit. - */ - new_fdstruct(0, FD_CLIENT); + if (dcfg->closeoneof) { + /* + * Read from standard input, and treat EOF as a notification + * to exit. + */ + new_fdstruct(0, FD_CLIENT); + } /* * Now we're ready to run our main loop. Keep looping round on diff --git a/httpd.h b/httpd.h index 1683ebb..a964e2f 100644 --- a/httpd.h +++ b/httpd.h @@ -10,6 +10,7 @@ struct httpd_config { const char *address; int port; + int closeoneof; const char *basicauthdata; }; -- 2.11.0