Author: jhb
Date: Thu Sep  3 14:50:15 2020
New Revision: 365302
URL: https://svnweb.freebsd.org/changeset/base/365302

Log:
  Various fixes to the load() function.
  
  - Use getline() instead of fgetln().  This ensures the returned string
    is always null-terminated without losing the last character if the
    last line in a file doesn't have a newline.  Also, while fgetln says
    the returned buffer can be modified, that doesn't actually seem safe
    as the current implementation means you are modifying stdio's
    internal buffer.
  
  - Remove a spurious if before an ATF_REQUIRE that was clearly supposed
    to be non-optional.
  
  - Remove a pointless compare of 'ptr' against '\0' (really NULL) that
    duplicated the middle condition in the for().
  
  - Once a comment is found, skip the rest of the line, not just the
    current word.
  
  Reviewed by:  kevans
  Obtained from:        CheriBSD
  Sponsored by: DARPA
  Differential Revision:        https://reviews.freebsd.org/D26278

Modified:
  head/lib/libc/tests/resolv/resolv_test.c

Modified: head/lib/libc/tests/resolv/resolv_test.c
==============================================================================
--- head/lib/libc/tests/resolv/resolv_test.c    Thu Sep  3 13:57:20 2020        
(r365301)
+++ head/lib/libc/tests/resolv/resolv_test.c    Thu Sep  3 14:50:15 2020        
(r365302)
@@ -70,22 +70,23 @@ static void
 load(const char *fname)
 {
        FILE *fp;
-       size_t len;
+       size_t linecap;
        char *line;
 
-       if ((fp = fopen(fname, "r")) == NULL)
+       fp = fopen(fname, "r");
        ATF_REQUIRE(fp != NULL);
-       while ((line = fgetln(fp, &len)) != NULL) {
-               char c = line[len - 1];
+       line = NULL;
+       linecap = 0;
+       while (getline(&line, &linecap, fp) >= 0) {
                char *ptr;
-               line[len - 1] = '\0';
+
                for (ptr = strtok(line, WS); ptr; ptr = strtok(NULL, WS)) {
-                       if (ptr == '\0' || ptr[0] == '#')
-                               continue;
+                       if (ptr[0] == '#')
+                               break;
                        sl_add(hosts, strdup(ptr));
                }
-               line[len - 1] = c;
        }
+       free(line);
 
        (void)fclose(fp);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to