# HG changeset patch # User Matti Hamalainen # Date 1503011751 -10800 # Node ID 086f49d616aca57b1f09522006732798a2ea91a4 # Parent 767b6ad595998b06f6d759a8751aff8f64fe5ca2 Improve fgets() implementation in dmres. diff -r 767b6ad59599 -r 086f49d616ac src/dmres.c --- 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; }