+static char *
+read_inline_file(FILE *fp, char **bufp, char **bufpp, int *buflp)
+{
+ char *result = solv_malloc(1024);
+ char *rp = result;
+ int resultl = 1024;
+
+ for (;;)
+ {
+ size_t rl;
+ if (rp - result + 256 >= resultl)
+ {
+ resultl = rp - result;
+ result = solv_realloc(result, resultl + 1024);
+ rp = result + resultl;
+ resultl += 1024;
+ }
+ if (!fgets(rp, resultl - (rp - result), fp))
+ *rp = 0;
+ rl = strlen(rp);
+ if (rl && (rp == result || rp[-1] == '\n'))
+ {
+ if (rl > 1 && rp[0] == '#' && rp[1] == '>')
+ {
+ memmove(rp, rp + 2, rl - 2);
+ rl -= 2;
+ }
+ else
+ {
+ while (rl + 16 > *buflp)
+ {
+ *bufp = solv_realloc(*bufp, *buflp + 512);
+ *buflp += 512;
+ }
+ memmove(*bufp, rp, rl);
+ if ((*bufp)[rl - 1] == '\n')
+ {
+ ungetc('\n', fp);
+ rl--;
+ }
+ (*bufp)[rl] = 0;
+ (*bufpp) = *bufp + rl;
+ rl = 0;
+ }
+ }
+ if (rl <= 0)
+ {
+ *rp = 0;
+ break;
+ }
+ rp += rl;
+ }
+ return result;
+}
+
+static char *
+read_file(FILE *fp)
+{
+ char *result = solv_malloc(1024);
+ char *rp = result;
+ int resultl = 1024;
+
+ for (;;)
+ {
+ size_t rl;
+ if (rp - result + 256 >= resultl)
+ {
+ resultl = rp - result;
+ result = solv_realloc(result, resultl + 1024);
+ rp = result + resultl;
+ resultl += 1024;
+ }
+ rl = fread(rp, 1, resultl - (rp - result), fp);
+ if (rl <= 0)
+ {
+ *rp = 0;
+ break;
+ }
+ rp += rl;
+ }
+ return result;
+}
+
+static int
+str2resultflags(Pool *pool, char *s) /* modifies the string! */
+{
+ int i, resultflags = 0;
+ while (s)
+ {
+ char *se = strchr(s, ',');
+ if (se)
+ *se++ = 0;
+ for (i = 0; resultflags2str[i].str; i++)
+ if (!strcmp(s, resultflags2str[i].str))
+ {
+ resultflags |= resultflags2str[i].flag;
+ break;
+ }
+ if (!resultflags2str[i].str)
+ pool_debug(pool, SOLV_ERROR, "result: unknown flag '%s'\n", s);
+ s = se;
+ }
+ return resultflags;
+}
+