libopkg: do not rely on getline()
[oweals/opkg-lede.git] / libopkg / release_parse.c
index e1d9a8456d42762587ba2b41a4c4318b2a7b8369..f41104586433e1419b8f8921283d9015a01cda47 100644 (file)
 #include "parse_util.h"
 
 static int
-release_parse_line(release_t *release, const char *line)
+release_parse_line(void *ptr, const char *line, uint mask)
 {
+       release_t *release = (release_t *) ptr;
+
        int ret = 0;
        unsigned int count = 0;
        char **list = 0;
@@ -111,25 +113,14 @@ dont_reset_flags:
 int
 release_parse_from_stream(release_t *release, FILE *fp)
 {
-       int ret = 0;
-       char *buf = NULL;
-       size_t buflen, nread;
-
-       nread = getline(&buf, &buflen, fp);
-       while ( nread != -1 ) {
-               if (buf[nread-1] == '\n') buf[nread-1] = '\0';
-               if (release_parse_line(release, buf))
-                        opkg_msg(DEBUG, "Failed to parse release line for %s:\n\t%s\n",
-                                       release->name, buf);
-               nread = getline(&buf, &buflen, fp);
-       }
-
-       if (!feof(fp)) {
-               opkg_perror(ERROR, "Problems reading Release file for %sd\n", release->name);
-               ret = -1;
-       }
+       int ret;
+       char *buf;
+       const size_t len = 4096;
 
+       buf = xmalloc(len);
+       ret = parse_from_stream_nomalloc(release_parse_line, release, fp, 0, &buf, len);
        free(buf);
+
        return ret;
 }