]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
An errnoless interface for ap_bgets
authorManoj Kasichainula <manoj@apache.org>
Sat, 30 Oct 1999 08:05:10 +0000 (08:05 +0000)
committerManoj Kasichainula <manoj@apache.org>
Sat, 30 Oct 1999 08:05:10 +0000 (08:05 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84075 13f79535-47bb-0310-9956-ffa450edef68

modules/generators/mod_cgi.c
modules/http/http_protocol.c
server/util_script.c

index 08e7b2fe3f2826a3f1520006aa09e92899fd6c92..811989024d2e6134cd511e7eb48303d1c8682b1c 100644 (file)
@@ -201,6 +201,7 @@ static int log_script(request_rec *r, cgi_server_conf * conf, int ret,
     ap_file_t *f;
     int i;
     struct stat finfo;
+    ap_ssize_t n;       /* Ignored */
 
     if (!conf->logname ||
        ((stat(ap_server_root_relative(r->pool, conf->logname), &finfo) == 0)
@@ -208,19 +209,22 @@ static int log_script(request_rec *r, cgi_server_conf * conf, int ret,
          (ap_open(&f, ap_server_root_relative(r->pool, conf->logname),
                   APR_APPEND, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) {
        /* Soak up script output */
-       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0)
+       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, &n)
+               == APR_SUCCESS)
            continue;
 #ifdef WIN32
         /* Soak up stderr and redirect it to the error log.
          * Script output to stderr is already directed to the error log
          * on Unix, thanks to the magic of fork().
          */
-        while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) {
+        while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n)
+               == APR_SUCCESS) {
             ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r, 
                           "%s", argsbuffer);            
         }
 #else
-       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0)
+       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n)
+               == APR_SUCCESS)
            continue;
 #endif
        return ret;
@@ -256,18 +260,19 @@ static int log_script(request_rec *r, cgi_server_conf * conf, int ret,
     if (sbuf && *sbuf)
        ap_fprintf(f, "%s\n", sbuf);
 
-    if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) {
+    if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, &n) == APR_SUCCESS) {
        ap_puts("%stdout\n", f);
        ap_puts(argsbuffer, f);
-       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0)
+       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, &n) > 0)
            ap_puts(argsbuffer, f);
        ap_puts("\n", f);
     }
 
-    if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) {
+    if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n) == APR_SUCCESS) {
        ap_puts("%stderr\n", f);
        ap_puts(argsbuffer, f);
-       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0)
+       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n)
+               == APR_SUCCESS)
            ap_puts(argsbuffer, f);
        ap_puts("\n", f);
     }
@@ -445,6 +450,7 @@ static int cgi_handler(request_rec *r)
     char *argv0, *dbuf = NULL;
     char *command;
     char **argv = NULL;
+    ap_ssize_t n;       /* Ignored */
 
     BUFF *script_out = NULL, *script_in = NULL, *script_err = NULL;
     char argsbuffer[HUGE_STRING_LEN];
@@ -591,10 +597,12 @@ static int cgi_handler(request_rec *r)
        if (location && location[0] == '/' && r->status == 200) {
 
            /* Soak up all the script output */
-           while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) {
+           while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, &n)
+                   == APR_SUCCESS) {
                continue;
            }
-           while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) {
+           while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n)
+                   == APR_SUCCESS) {
                continue;
            }
            /* This redirect needs to be a GET no matter what the original
@@ -625,7 +633,8 @@ static int cgi_handler(request_rec *r)
        }
        ap_bclose(script_in);
 
-       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) {
+       while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, &n)
+               == APR_SUCCESS) {
            continue;
        }
        ap_bclose(script_err);
index fd09d20936881f0a019457d5ca423330b42f63da..483e46c42a71af5e9cd180a9f7bdf297f8cd773c 100644 (file)
@@ -674,23 +674,24 @@ API_EXPORT(int) ap_method_number_of(const char *method)
 static int getline(char *s, int n, BUFF *in, int fold)
 {
     char *pos, next;
-    int retval;
+    ap_status_t retval;
+    ap_ssize_t nbytes;
     int total = 0;
 
     pos = s;
 
     do {
-        retval = ap_bgets(pos, n, in);
-       /* retval == -1 if error, 0 if EOF */
+        retval = ap_bgets(pos, n, in, &nbytes);
+       /* retval == APR_EOF if EOF, normal error codes otherwise */
 
-        if (retval <= 0)
-            return ((retval < 0) && (total == 0)) ? -1 : total;
+        if (retval != APR_SUCCESS)        /* error or eof */
+            return ((retval != APR_EOF) && (total == 0)) ? -1 : total;
 
-        /* retval is the number of characters read, not including NUL      */
+        /* nbytes is the number of characters read, not including NUL      */
 
-        n -= retval;            /* Keep track of how much of s is full     */
-        pos += (retval - 1);    /* and where s ends                        */
-        total += retval;        /* and how long s has become               */
+        n -= nbytes;            /* Keep track of how much of s is full     */
+        pos += (nbytes - 1);    /* and where s ends                        */
+        total += nbytes;        /* and how long s has become               */
 
         if (*pos == '\n') {     /* Did we get a full line of input?        */
             /*
@@ -715,7 +716,7 @@ static int getline(char *s, int n, BUFF *in, int fold)
          * the last line was not empty and we have room in the buffer and
          * the next line begins with a continuation character.
          */
-    } while (fold && (retval != 1) && (n > 1)
+    } while (fold && (nbytes != 1) && (n > 1)
                   && (next = ap_blookc(in))
                   && ((next == ' ') || (next == '\t')));
 
index 187d9015e706297ec81886178b3bc4fcdaf2d56a..ec6ed259f7c997fee3d54735f730e89f23b4d46f 100644 (file)
@@ -616,7 +616,8 @@ API_EXPORT(int) ap_scan_script_header_err(request_rec *r, FILE *f,
 
 static int getsfunc_BUFF(char *w, int len, void *fb)
 {
-    return ap_bgets(w, len, (BUFF *) fb) > 0;
+    ap_ssize_t n;       /* Ignored */
+    return ap_bgets(w, len, (BUFF *) fb, &n) == APR_SUCCESS;
 }
 
 API_EXPORT(int) ap_scan_script_header_err_buff(request_rec *r, BUFF *fb,