Browse Source

Changed assignment in read() to be more sane.

PHP-4.0.5
Chris Vandomelen 26 years ago
parent
commit
322891a2dd
  1. 35
      ext/sockets/sockets.c

35
ext/sockets/sockets.c

@ -580,6 +580,37 @@ PHP_FUNCTION(write)
/* {{{ proto int read(int fd, string &buf, int length)
Reads length bytes from fd into buf */
/* php_read -- wrapper around read() so that it only reads to a \r, \n, or \0. */
int php_read(int fd, void *buf, int maxlen)
{
char *t;
int m = 0, n = 0;
int no_read = 0;
errno = 0;
t = (char *) buf;
while (*t != '\n' && *t != '\r' && *t != '\0' && n < maxlen) {
if (m > 0) {
t++;
n++;
} else if (m == 0) {
no_read++;
if (no_read > 200) {
errno = ECONNRESET;
return -1;
}
}
m = read(fd, (void *) t, 1);
if (errno != 0 && errno != ESPIPE && errno != EAGAIN) {
return -1;
}
errno = 0;
}
return n;
}
PHP_FUNCTION(read)
{
zval **fd, **buf, **length;
@ -599,10 +630,10 @@ PHP_FUNCTION(read)
RETURN_FALSE;
}
ret = read(Z_LVAL_PP(fd), tmpbuf, Z_LVAL_PP(length));
ret = php_read(Z_LVAL_PP(fd), tmpbuf, Z_LVAL_PP(length));
if (ret >= 0) {
Z_STRVAL_PP(buf) = estrndup(tmpbuf,strlen(tmpbuf));
Z_STRVAL_PP(buf) = estrndup(tmpbuf,ret);
Z_STRLEN_PP(buf) = ret;
efree(tmpbuf);

Loading…
Cancel
Save