Mercurial > hg > dmlib
changeset 1282:086f49d616ac
Improve fgets() implementation in dmres.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 18 Aug 2017 02:15:51 +0300 |
parents | 767b6ad59599 |
children | 642a0dd98c6e |
files | src/dmres.c |
diffstat | 1 files changed, 10 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dmres.c Fri Aug 18 02:12:22 2017 +0300 +++ b/src/dmres.c Fri Aug 18 02:15:51 2017 +0300 @@ -953,23 +953,23 @@ return f->fops->fwrite(ptr, size, nmemb, f); } -char *dmfgets(char *s, int size, DMResource * f) +char *dmfgets(char *str, int size, DMResource * f) { - char *p = s, c; - int n = 0; + char *ptr = str, *end = str + size - 1; + int c; - while ((c = f->fops->fgetc(f)) != EOF) + if (size <= 0) + return NULL; + + while (ptr < end && (c = f->fops->fgetc(f)) != EOF) { - n++; + *ptr++ = c; if (c == '\n') break; - else - if (n < size - 1) - *p++ = c; } - *p = 0; + *ptr = 0; - return (n > 0) ? s : NULL; + return (ptr > str) ? str : NULL; }