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;
 }