dgaudet 97/06/30 13:28:54
Modified: src buff.c buff.h http_main.c Log: Allow for replacing standalone_main. Allow the use of sfio in buff.c. Submitted by: Doug MacEachern <[EMAIL PROTECTED]> Revision Changes Path 1.33 +67 -5 apache/src/buff.c Index: buff.c =================================================================== RCS file: /export/home/cvs/apache/src/buff.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C3 -r1.32 -r1.33 *** buff.c 1997/06/29 19:27:20 1.32 --- buff.c 1997/06/30 20:28:50 1.33 *************** *** 200,206 **** { int rv; ! #ifdef WIN32 if (fb->flags & B_SOCKET) { rv = recvwithtimeout( fb->fd_in, buf, nbyte, 0 ); if (rv == SOCKET_ERROR) --- 200,206 ---- { int rv; ! #if defined (WIN32) if (fb->flags & B_SOCKET) { rv = recvwithtimeout( fb->fd_in, buf, nbyte, 0 ); if (rv == SOCKET_ERROR) *************** *** 218,224 **** { int rv; ! #ifdef WIN32 if (fb->flags & B_SOCKET) { rv = sendwithtimeout( fb->fd, buf, nbyte, 0); if (rv == SOCKET_ERROR) --- 218,224 ---- { int rv; ! #if defined(WIN32) if (fb->flags & B_SOCKET) { rv = sendwithtimeout( fb->fd, buf, nbyte, 0); if (rv == SOCKET_ERROR) *************** *** 226,233 **** } else rv = write( fb->fd, buf, nbyte ); #else ! rv = write( fb->fd, buf, nbyte ); #endif /* WIN32 */ return rv; } --- 226,235 ---- } else rv = write( fb->fd, buf, nbyte ); + #elif defined (B_SFIO) + i = sfwrite(fb->sf_out, buf, nbyte); #else ! rv = write(fb->fd, buf, nbyte); #endif /* WIN32 */ return rv; } *************** *** 279,284 **** --- 281,295 ---- fb->fd = -1; fb->fd_in = -1; + #ifdef B_SFIO + fb->sf_in = NULL; + fb->sf_out = NULL; + fb->sf_in = sfnew(fb->sf_in, NIL(Void_t*), + (size_t)SF_UNBOUND, 0, SF_READ); + fb->sf_out = sfnew(fb->sf_out, NIL(Void_t*), + (size_t)SF_UNBOUND, 1, SF_WRITE); + #endif + return fb; } *************** *** 426,440 **** return value; } - /* * This is called instead of read() everywhere in here. It implements * the B_SAFEREAD functionality -- which is to force a flush() if a read() * would block. It also deals with the EINTR errno result from read(). * return code is like read() except EINTR is eliminated. */ static int ! saferead( BUFF *fb, void *buf, int nbyte ) { int rv; --- 437,462 ---- return value; } /* * This is called instead of read() everywhere in here. It implements * the B_SAFEREAD functionality -- which is to force a flush() if a read() * would block. It also deals with the EINTR errno result from read(). * return code is like read() except EINTR is eliminated. */ + + + #if !defined (B_SFIO) || defined (WIN32) + #define saferead saferead_guts + #else static int ! saferead(BUFF *fb, char *buf, int nbyte) ! { ! return sfread(fb->sf_in, buf, nbyte); ! } ! #endif ! ! static int ! saferead_guts(BUFF *fb, void *buf, int nbyte) { int rv; *************** *** 461,466 **** --- 483,523 ---- return( rv ); } + #ifdef B_SFIO + int bsfio_read(Sfio_t *f, char *buf, int nbyte, apache_sfio *disc) + { + int rv; + BUFF *fb = disc->buff; + + rv = saferead_guts(fb, buf, nbyte); + + buf[rv] = '\0'; + f->next = 0; + + return(rv); + } + + int bsfio_write(Sfio_t *f, char *buf, int nbyte, apache_sfio *disc) + { + return write(disc->buff->fd, buf, nbyte); + } + + Sfdisc_t *bsfio_new(pool *p, BUFF *b) + { + apache_sfio* disc; + + if(!(disc = (apache_sfio*)palloc(p, sizeof(apache_sfio))) ) + return (Sfdisc_t *)disc; + + disc->disc.readf = (Sfread_f)bsfio_read; + disc->disc.writef = (Sfwrite_f)bsfio_write; + disc->disc.seekf = (Sfseek_f)NULL; + disc->disc.exceptf = (Sfexcept_f)NULL; + disc->buff = b; + + return (Sfdisc_t *)disc; + } + #endif /* * Read up to nbyte bytes into buf. *************** *** 1069,1074 **** --- 1126,1136 ---- fb->flags |= B_EOF | B_EOUT; fb->fd = -1; fb->fd_in = -1; + + #ifdef B_SFIO + sfclose(fb->sf_in); + sfclose(fb->sf_out); + #endif if (rc1 != 0) return rc1; else if (rc2 != 0) return rc2; 1.15 +18 -0 apache/src/buff.h Index: buff.h =================================================================== RCS file: /export/home/cvs/apache/src/buff.h,v retrieving revision 1.14 retrieving revision 1.15 diff -C3 -r1.14 -r1.15 *** buff.h 1997/06/16 19:32:50 1.14 --- buff.h 1997/06/30 20:28:50 1.15 *************** *** 50,55 **** --- 50,59 ---- * */ + #ifdef B_SFIO + #include "sfio.h" + #endif + #include <stdarg.h> /* Reading is buffered */ *************** *** 96,102 **** --- 100,120 ---- /* could also put pointers to the basic I/O routines here */ int fd; /* the file descriptor */ int fd_in; /* input file descriptor, if different */ + + #ifdef B_SFIO + Sfio_t *sf_in; + Sfio_t *sf_out; + #endif }; + + #ifdef B_SFIO + typedef struct { + Sfdisc_t disc; + BUFF *buff; + } apache_sfio; + + extern Sfdisc_t *bsfio_new(pool *p, BUFF *b); + #endif /* Options to bset/getopt */ #define BO_BYTECT (1) 1.171 +19 -1 apache/src/http_main.c Index: http_main.c =================================================================== RCS file: /export/home/cvs/apache/src/http_main.c,v retrieving revision 1.170 retrieving revision 1.171 diff -C3 -r1.170 -r1.171 *** http_main.c 1997/06/29 19:27:21 1.170 --- http_main.c 1997/06/30 20:28:51 1.171 *************** *** 2172,2177 **** --- 2172,2188 ---- (request_rec*)NULL); conn_io = bcreate(ptrans, B_RDWR | B_SOCKET); + + #ifdef B_SFIO + (void)sfdisc(conn_io->sf_in, SF_POPDISC); + sfdisc(conn_io->sf_in, bsfio_new(conn_io->pool, conn_io)); + sfsetbuf(conn_io->sf_in, NULL, 0); + + (void)sfdisc(conn_io->sf_out, SF_POPDISC); + sfdisc(conn_io->sf_out, bsfio_new(conn_io->pool, conn_io)); + sfsetbuf(conn_io->sf_out, NULL, 0); + #endif + dupped_csd = csd; #if defined(NEED_DUPPED_CSD) if ((dupped_csd = dup(csd)) < 0) { *************** *** 2315,2320 **** --- 2326,2334 ---- * Executive routines. */ + #ifndef STANDALONE_MAIN + #define STANDALONE_MAIN standalone_main + void standalone_main(int argc, char **argv) { int remaining_children_to_start; *************** *** 2512,2517 **** --- 2526,2535 ---- } while (restart_pending); } /* standalone_main */ + #else + /* prototype */ + void STANDALONE_MAIN(int argc, char **argv); + #endif /* STANDALONE_MAIN */ extern char *optarg; extern int optind; *************** *** 2585,2591 **** if(standalone) { clear_pool (pconf); /* standalone_main rereads... */ ! standalone_main(argc, argv); } else { conn_rec *conn; --- 2603,2609 ---- if(standalone) { clear_pool (pconf); /* standalone_main rereads... */ ! STANDALONE_MAIN(argc, argv); } else { conn_rec *conn;