diff options
author | Sascha Schumann <sas@php.net> | 1999-05-20 13:56:19 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 1999-05-20 13:56:19 +0000 |
commit | 27fc61c4dc81f422cb9b72e4d144213ef6ba8d3c (patch) | |
tree | 2a6892c123e61a4d80290d83605b6e7204536e75 /ext/standard | |
parent | 3facf7cb7c00aef883978653650d205794a0daa2 (diff) | |
download | php-git-27fc61c4dc81f422cb9b72e4d144213ef6ba8d3c.tar.gz |
Apply the fix for feof()
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/file.c | 3 | ||||
-rw-r--r-- | ext/standard/fsock.c | 42 | ||||
-rw-r--r-- | ext/standard/fsock.h | 1 |
3 files changed, 34 insertions, 12 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c index 84f902d91d..399804bb82 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -703,7 +703,6 @@ PHP_FUNCTION(feof) int id, type; int issock=0; int socketd=0, *sock; - unsigned int temp; if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg1) == FAILURE) { WRONG_PARAM_COUNT; @@ -721,7 +720,7 @@ PHP_FUNCTION(feof) /* we're at the eof if the file doesn't exist */ RETURN_TRUE; } - if ((issock?!(recv(socketd,(char *)&temp,1,MSG_PEEK)):feof(fp))) { + if ((issock?(_php3_sock_eof(socketd)):feof(fp))) { RETURN_TRUE; } else { RETURN_FALSE; diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c index 1c161468ef..29bb65ff66 100644 --- a/ext/standard/fsock.c +++ b/ext/standard/fsock.c @@ -93,6 +93,8 @@ struct php3i_sockbuf { static struct php3i_sockbuf *phpsockbuf; +typedef struct php3i_sockbuf php3i_sockbuf; + static int php3_minit_fsock(INIT_FUNC_ARGS); static int php3_mshutdown_fsock(SHUTDOWN_FUNC_ARGS); static int php3_rshutdown_fsock(SHUTDOWN_FUNC_ARGS); @@ -290,23 +292,43 @@ PHP_FUNCTION(pfsockopen) * (buffered data is not persistent) * - php3_fopen_url_wrapper() is still doing single-byte lookahead/read */ -/* {{{ _php3_sock_fgets() */ -int _php3_sock_fgets(char *buf, int maxlen, int socket) +static php3i_sockbuf *_php3_sock_findsock(int socket) { - struct php3i_sockbuf *sockbuf = NULL, *tmpsockbuf; - int bytesread, toread, len, buflen, count = 0; - char *nl; + /* FIXME: O(n) could be improved */ - tmpsockbuf = phpsockbuf; - while (tmpsockbuf) { - if (tmpsockbuf->socket == socket) { - sockbuf = tmpsockbuf; + php3i_sockbuf *buf = NULL, *tmp; + + for(tmp = phpsockbuf; tmp; tmp = tmp->next) + if(tmp->socket == socket) { + buf = tmp; break; } - tmpsockbuf = tmpsockbuf->next; + + return buf; +} + +int _php3_sock_eof(int socket) +{ + php3i_sockbuf *sockbuf; + int ret = 0; + + sockbuf = _php3_sock_findsock(socket); + if(sockbuf) { + ret = (sockbuf->writepos - sockbuf->readpos) == 0 ? 1 : 0; } + return ret; +} +/* {{{ _php3_sock_fgets() */ +int _php3_sock_fgets(char *buf, int maxlen, int socket) +{ + struct php3i_sockbuf *sockbuf; + int bytesread, toread, len, buflen, count = 0; + char *nl; + + sockbuf = _php3_sock_findsock(socket); + if (sockbuf) { toread = sockbuf->writepos - sockbuf->readpos; if (toread > maxlen) { diff --git a/ext/standard/fsock.h b/ext/standard/fsock.h index fbd15c9948..a4a01b1bf9 100644 --- a/ext/standard/fsock.h +++ b/ext/standard/fsock.h @@ -53,6 +53,7 @@ extern int lookup_hostname(const char *addr, struct in_addr *in); extern int _php3_sock_fgets(char *buf, int maxlen, int socket); extern int _php3_sock_fread(char *buf, int maxlen, int socket); extern int _php3_is_persistent_sock(int); +int _php3_sock_eof(int socket); #define phpext_fsock_ptr fsock_module_ptr |