From 408a9ff806c905990d41194b57368e2a751b60fc Mon Sep 17 00:00:00 2001 From: javiplx@gmail.com Date: Tue, 26 Apr 2011 07:28:41 -0400 Subject: Move pkg_parse_from_stream_nomalloc into parse_util git-svn-id: http://opkg.googlecode.com/svn/trunk@619 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- (limited to 'libopkg/pkg_parse.c') diff --git a/libopkg/pkg_parse.c b/libopkg/pkg_parse.c index e0d7fce..3f188a8 100644 --- a/libopkg/pkg_parse.c +++ b/libopkg/pkg_parse.c @@ -104,7 +104,7 @@ get_arch_priority(const char *arch) return 0; } -static int +int pkg_parse_line(pkg_t *pkg, const char *line, uint mask) { /* these flags are a bit hackish... */ @@ -266,91 +266,6 @@ dont_reset_flags: } int -pkg_parse_from_stream_nomalloc(pkg_t *pkg, FILE *fp, uint mask, - char **buf0, size_t buf0len) -{ - int ret, lineno; - char *buf, *nl; - size_t buflen; - - lineno = 1; - ret = 0; - - buflen = buf0len; - buf = *buf0; - buf[0] = '\0'; - - while (1) { - if (fgets(buf, (int)buflen, fp) == NULL) { - if (ferror(fp)) { - opkg_perror(ERROR, "fgets"); - ret = -1; - } else if (strlen(*buf0) == buf0len-1) { - opkg_msg(ERROR, "Missing new line character" - " at end of file!\n"); - pkg_parse_line(pkg, *buf0, mask); - } - break; - } - - nl = strchr(buf, '\n'); - if (nl == NULL) { - if (strlen(buf) < buflen-1) { - /* - * Line could be exactly buflen-1 long and - * missing a newline, but we won't know until - * fgets fails to read more data. - */ - opkg_msg(ERROR, "Missing new line character" - " at end of file!\n"); - pkg_parse_line(pkg, *buf0, mask); - break; - } - if (buf0len >= EXCESSIVE_LINE_LEN) { - opkg_msg(ERROR, "Excessively long line at " - "%d. Corrupt file?\n", - lineno); - ret = -1; - break; - } - - /* - * Realloc and point buf past the data already read, - * at the NULL terminator inserted by fgets. - * |<--------------- buf0len ----------------->| - * | |<------- buflen ---->| - * |---------------------|---------------------| - * buf0 buf - */ - buflen = buf0len +1; - buf0len *= 2; - *buf0 = xrealloc(*buf0, buf0len); - buf = *buf0 + buflen -2; - - continue; - } - - *nl = '\0'; - - lineno++; - - if (pkg_parse_line(pkg, *buf0, mask)) - break; - - buf = *buf0; - buflen = buf0len; - buf[0] = '\0'; - } - - if (pkg->name == NULL) { - /* probably just a blank line */ - ret = 1; - } - - return ret; -} - -int pkg_parse_from_stream(pkg_t *pkg, FILE *fp, uint mask) { int ret; @@ -358,7 +273,11 @@ pkg_parse_from_stream(pkg_t *pkg, FILE *fp, uint mask) const size_t len = 4096; buf = xmalloc(len); - ret = pkg_parse_from_stream_nomalloc(pkg, fp, mask, &buf, len); + ret = parse_from_stream_nomalloc(pkg, fp, mask, &buf, len); + if (pkg->name == NULL) { + /* probably just a blank line */ + ret = 1; + } free(buf); return ret; -- cgit v0.9.1