diff --git a/src/ChangeLog b/src/ChangeLog index aca13ab3..1255ab38 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2000-12-06 Hrvoje Niksic + + * rbuf.h: Implement only a single version of RBUF_READCHAR, using + rbuf_read_bufferful when the buffer is depleted. + + * rbuf.c (rbuf_read_bufferful): New function. + 2000-12-06 Hrvoje Niksic * gen_sslfunc.h: Use ansi2knr style function declarations. diff --git a/src/rbuf.c b/src/rbuf.c index b0ed3cab..831b4b6c 100644 --- a/src/rbuf.c +++ b/src/rbuf.c @@ -58,6 +58,17 @@ rbuf_uninitialize (struct rbuf *rbuf) rbuf->fd = -1; } +int +rbuf_read_bufferful (struct rbuf *rbuf) +{ +#ifdef HAVE_SSL + if (rbuf->ssl) + return ssl_iread (rbuf->ssl, rbuf->buffer, sizeof (rbuf->buffer)); + else +#endif + return iread (rbuf->fd, rbuf->buffer, sizeof (rbuf->buffer)); +} + /* Currently unused -- see RBUF_READCHAR. */ #if 0 /* Function version of RBUF_READCHAR. */ diff --git a/src/rbuf.h b/src/rbuf.h index 415933ce..df0b3d33 100644 --- a/src/rbuf.h +++ b/src/rbuf.h @@ -49,38 +49,18 @@ struct rbuf result of historical implementation of header code. The macro should return the character or EOF, and in case of error store it to rbuf->err or something. */ -#ifdef HAVE_SSL -/* SSL version of rbuf. If rbuf.ssl isn't NULL use ssl_iread instead - of iread */ + #define RBUF_READCHAR(rbuf, store) \ ((rbuf)->buffer_left \ ? (--(rbuf)->buffer_left, \ *((char *) (store)) = *(rbuf)->buffer_pos++, 1) \ : ((rbuf)->buffer_pos = (rbuf)->buffer, \ ((((rbuf)->internal_dont_touch_this \ - = (rbuf->ssl == NULL) ? (iread ((rbuf)->fd, (rbuf)->buffer, \ - sizeof ((rbuf)->buffer))) : (ssl_iread ((rbuf)->ssl, (rbuf)->buffer, \ - sizeof ((rbuf)->buffer))) ) <= 0) \ + = rbuf_read_bufferful (rbuf)) <= 0) \ ? (rbuf)->internal_dont_touch_this \ : ((rbuf)->buffer_left = (rbuf)->internal_dont_touch_this - 1, \ *((char *) (store)) = *(rbuf)->buffer_pos++, \ 1)))) -#else -#define RBUF_READCHAR(rbuf, store) \ -((rbuf)->buffer_left \ - ? (--(rbuf)->buffer_left, \ - *((char *) (store)) = *(rbuf)->buffer_pos++, 1) \ - : ((rbuf)->buffer_pos = (rbuf)->buffer, \ - ((((rbuf)->internal_dont_touch_this \ - = iread ((rbuf)->fd, (rbuf)->buffer, \ - sizeof ((rbuf)->buffer))) <= 0) \ - ? (rbuf)->internal_dont_touch_this \ - : ((rbuf)->buffer_left = (rbuf)->internal_dont_touch_this - 1, \ - *((char *) (store)) = *(rbuf)->buffer_pos++, \ - 1)))) - - -#endif /* HAVE_SSL */ /* Return the file descriptor of RBUF. */ #define RBUF_FD(rbuf) ((rbuf)->fd) @@ -97,4 +77,7 @@ int rbuf_peek PARAMS ((struct rbuf *, char *)); int rbuf_flush PARAMS ((struct rbuf *, char *, int)); void rbuf_discard PARAMS ((struct rbuf *)); +/* Internal, but used by the macro. */ +int rbuf_read_bufferful PARAMS ((struct rbuf *)); + #endif /* RBUF_H */