diff options
author | Markus Fischer <mfischer@php.net> | 2002-06-11 21:22:12 +0000 |
---|---|---|
committer | Markus Fischer <mfischer@php.net> | 2002-06-11 21:22:12 +0000 |
commit | 17b3ef47f3903fa2dfb0bda9302fcbfb8a012f25 (patch) | |
tree | f047a15c1b6c3a9f24c216f4a22dc56bc8b0baec /main | |
parent | 137a29008680ee73e324c263cb7c31bc0322a05f (diff) | |
download | php-git-17b3ef47f3903fa2dfb0bda9302fcbfb8a012f25.tar.gz |
- Fix builtin gets() emulation (hopefully).
Diffstat (limited to 'main')
-rwxr-xr-x | main/streams.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/main/streams.c b/main/streams.c index fa1a9f8f15..ea1844871f 100755 --- a/main/streams.c +++ b/main/streams.c @@ -250,21 +250,13 @@ PHPAPI char *_php_stream_gets(php_stream *stream, char *buf, size_t maxlen TSRML return NULL; } else { /* unbuffered fgets - poor performance ! */ - size_t n = 1; char *c = buf; /* TODO: look at error returns? */ - while(n < maxlen && stream->ops->read(stream, c, 1 TSRMLS_CC) > 0) { - n++; - if (*c == '\n') { - c++; - break; - } - c++; - } - *c = 0; - return buf; + while (--maxlen > 0 && stream->ops->read(stream, buf, 1 TSRMLS_CC) == 1 && *buf++ != '\n'); + *buf = '\0'; + return c == buf && maxlen > 0 ? NULL : c; } } |