You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ma...@hyperreal.org on 1999/10/30 04:06:36 UTC
cvs commit: apache-2.0/src/modules/standard mod_echo.c mod_mime_magic.c
manoj 99/10/29 19:06:35
Modified: src CHANGES
src/include buff.h
src/main buff.c http_protocol.c
src/modules/standard mod_echo.c mod_mime_magic.c
Log:
Change ap_bread's interface to no longer require errno.
Revision Changes Path
1.15 +2 -4 apache-2.0/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-2.0/src/CHANGES,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -u -r1.14 -r1.15
--- CHANGES 1999/10/26 22:42:33 1.14
+++ CHANGES 1999/10/30 02:06:31 1.15
@@ -1,9 +1,7 @@
Changes with Apache 2.0-dev
- *) ap_bflush and ap_bclose now return ap_status_t error codes instead
- of returning -1 and setting errno. And error functions recorded
- with ap_bonerror now take a status code as an argument. [Manoj
- Kasichainula]
+ *) Large sections of buff, including the APIs, have been converted to
+ no longer use errno. [Manoj Kasichainula]
*) mod_speling runs in 2.0-dev now: a bug in readdir_r handling and
interface adaption to APR functions did it. [Martin Kraemer]
1.7 +2 -1 apache-2.0/src/include/buff.h
Index: buff.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/include/buff.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -u -r1.6 -r1.7
--- buff.h 1999/10/26 22:53:55 1.6
+++ buff.h 1999/10/30 02:06:32 1.7
@@ -182,7 +182,8 @@
void *data);
/* I/O */
-API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte);
+API_EXPORT(ap_status_t) ap_bread(BUFF *fb, void *buf, ap_size_t nbyte,
+ ap_ssize_t *bytes_read);
API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb);
API_EXPORT(int) ap_blookc(BUFF *fb);
API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte);
1.19 +35 -24 apache-2.0/src/main/buff.c
Index: buff.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/buff.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -u -r1.18 -r1.19
--- buff.c 1999/10/26 22:42:46 1.18
+++ buff.c 1999/10/30 02:06:32 1.19
@@ -334,19 +334,21 @@
/*
* Read up to nbyte bytes into buf.
* If fewer than byte bytes are currently available, then return those.
- * Returns 0 for EOF, -1 for error.
*/
-API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte)
+API_EXPORT(ap_status_t) ap_bread(BUFF *fb, void *buf, ap_size_t nbyte,
+ ap_ssize_t *bytes_read)
{
int i, nrd;
ap_status_t rv;
if (fb->flags & B_RDERR) {
- errno = fb->saved_errno;
- return -1;
+ *bytes_read = 0;
+ return fb->saved_errno;
}
- if (nbyte == 0)
- return 0;
+ if (nbyte == 0) {
+ *bytes_read = 0;
+ return APR_SUCCESS;
+ }
if (!(fb->flags & B_RD)) {
/* Unbuffered reading. First check if there was something in the
@@ -356,14 +358,10 @@
memcpy(buf, fb->inptr, i);
fb->incnt -= i;
fb->inptr += i;
- return i;
+ *bytes_read = i;
+ return APR_SUCCESS;
}
- rv = read_with_errors(fb, buf, nbyte, &i);
- if (rv == APR_SUCCESS) {
- return i;
- }
- errno = rv;
- return -1;
+ return read_with_errors(fb, buf, nbyte, bytes_read);
}
nrd = fb->incnt;
@@ -372,7 +370,8 @@
memcpy(buf, fb->inptr, nbyte);
fb->incnt = nrd - nbyte;
fb->inptr += nbyte;
- return nbyte;
+ *bytes_read = nbyte;
+ return APR_SUCCESS;
}
if (nrd > 0) {
@@ -381,16 +380,22 @@
buf = nrd + (char *) buf;
fb->incnt = 0;
}
- if (fb->flags & B_EOF)
- return nrd;
+ if (fb->flags & B_EOF) {
+ *bytes_read = nrd;
+ return APR_SUCCESS;
+ }
/* do a single read */
if (nbyte >= fb->bufsiz) {
/* read directly into caller's buffer */
rv = read_with_errors(fb, buf, nbyte, &i);
if (rv != APR_SUCCESS) {
- errno = rv;
- return nrd ? nrd : -1;
+ *bytes_read = nrd;
+#ifdef MIDWAY_ERROR_RETURNS_ERROR_BLAH_BLAH_BLAH
+ return rv;
+#else
+ return *bytes_read ? APR_SUCCESS : rv;
+#endif
}
}
else {
@@ -398,8 +403,12 @@
fb->inptr = fb->inbase;
rv = read_with_errors(fb, fb->inptr, fb->bufsiz, &i);
if (rv != APR_SUCCESS) {
- errno = rv;
- return nrd ? nrd : -1;
+ *bytes_read = nrd;
+#ifdef MIDWAY_ERROR_RETURNS_ERROR_BLAH_BLAH_BLAH
+ return rv;
+#else
+ return *bytes_read ? APR_SUCCESS : rv;
+#endif
}
fb->incnt = i;
if (i > nbyte)
@@ -408,7 +417,8 @@
fb->incnt -= i;
fb->inptr += i;
}
- return nrd + i;
+ *bytes_read = nrd + i;
+ return APR_SUCCESS;
}
@@ -529,11 +539,12 @@
*/
API_EXPORT(int) ap_bfilbuf(BUFF *fb)
{
- int i;
+ ap_status_t rv;
+ ap_ssize_t i;
char buf[1];
- i = ap_bread(fb, buf, 1);
- if (i == 0)
+ rv = ap_bread(fb, buf, 1, &i);
+ if (rv == APR_SUCCESS && i == 0)
errno = 0; /* no error; EOF */
if (i != 1)
return EOF;
1.27 +21 -15 apache-2.0/src/main/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/main/http_protocol.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -u -r1.26 -r1.27
--- http_protocol.c 1999/10/26 22:25:02 1.26
+++ http_protocol.c 1999/10/30 02:06:33 1.27
@@ -1813,17 +1813,21 @@
API_EXPORT(long) ap_get_client_block(request_rec *r, char *buffer, int bufsiz)
{
int c;
- long len_read, len_to_read;
+ ap_size_t len_to_read;
+ ap_ssize_t len_read;
long chunk_start = 0;
unsigned long max_body;
+ ap_status_t rv;
if (!r->read_chunked) { /* Content-length read */
len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
- len_read = ap_bread(r->connection->client, buffer, len_to_read);
- if (len_read <= 0) {
- if (len_read < 0)
+ rv = ap_bread(r->connection->client, buffer, len_to_read, &len_read);
+ if (len_read == 0) { /* error or eof */
+ if (rv != APR_SUCCESS) {
r->connection->keepalive = -1;
- return len_read;
+ return -1;
+ }
+ return 0;
}
r->read_length += len_read;
r->remaining -= len_read;
@@ -1931,8 +1935,8 @@
len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
- len_read = ap_bread(r->connection->client, buffer, len_to_read);
- if (len_read <= 0) {
+ (void) ap_bread(r->connection->client, buffer, len_to_read, &len_read);
+ if (len_read == 0) { /* error or eof */
r->connection->keepalive = -1;
return -1;
}
@@ -2072,7 +2076,9 @@
char buf[IOBUFSIZE];
long total_bytes_sent = 0;
long zero_timeout = 0;
- int n, w, o;
+ int w, o;
+ ap_ssize_t n;
+ ap_status_t rv;
if (length == 0) {
return 0;
@@ -2085,13 +2091,13 @@
ap_bsetopt(fb, BO_TIMEOUT, &zero_timeout);
while (!ap_is_aborted(r->connection)) {
- n = ap_bread(fb, buf, sizeof(buf));
- if (n <= 0) {
- if (n == 0) {
+ rv = ap_bread(fb, buf, sizeof(buf), &n);
+ if (n == 0) {
+ if (rv == APR_SUCCESS) { /* eof */
(void) ap_rflush(r);
break;
}
- if (n == -1 && errno != EAGAIN) {
+ if (rv != APR_EAGAIN) {
r->connection->aborted = 1;
break;
}
@@ -2101,9 +2107,9 @@
}
ap_bsetopt(fb, BO_TIMEOUT, &r->server->timeout);
- n = ap_bread(fb, buf, sizeof(buf));
- if (n <= 0) {
- if (n == 0) {
+ rv = ap_bread(fb, buf, sizeof(buf), &n);
+ if (n == 0) {
+ if (rv == APR_SUCCESS) { /* eof */
(void) ap_rflush(r);
}
r->connection->aborted = 1;
1.12 +2 -1 apache-2.0/src/modules/standard/mod_echo.c
Index: mod_echo.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_echo.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -u -r1.11 -r1.12
--- mod_echo.c 1999/08/31 05:33:48 1.11
+++ mod_echo.c 1999/10/30 02:06:34 1.12
@@ -39,7 +39,8 @@
for( ; ; )
{
int w;
- int r=ap_bread(c->client,buf,sizeof buf);
+ int r;
+ (void) ap_bread(c->client,buf,sizeof buf,&r);
if(r <= 0)
break;
w=ap_bwrite(c->client,buf,r);
1.7 +4 -2 apache-2.0/src/modules/standard/mod_mime_magic.c
Index: mod_mime_magic.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_mime_magic.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -u -r1.6 -r1.7
--- mod_mime_magic.c 1999/10/22 16:01:27 1.6
+++ mod_mime_magic.c 1999/10/30 02:06:34 1.7
@@ -2173,6 +2173,7 @@
struct uncompress_parms parm;
BUFF *bout;
ap_context_t *sub_pool;
+ ap_status_t rv;
parm.r = r;
parm.method = method;
@@ -2192,9 +2193,10 @@
}
*newch = (unsigned char *) ap_palloc(r->pool, n);
- if ((n = ap_bread(bout, *newch, n)) <= 0) {
+ rv = ap_bread(bout, *newch, n, &n);
+ if (n == 0) {
ap_destroy_pool(sub_pool);
- ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r,
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
MODNAME ": read failed %s", r->filename);
return -1;
}