From: Michael Schroeder Date: Wed, 1 Jul 2009 09:46:37 +0000 (+0200) Subject: - add repo_add_debpackages to read a debian Packages file X-Git-Tag: BASE-SuSE-Code-12_1-Branch~194 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aae606ee0855dcd4d4bc56804c61e79697d766d9;p=thirdparty%2Flibsolv.git - add repo_add_debpackages to read a debian Packages file --- diff --git a/ext/repo_deb.c b/ext/repo_deb.c index e75924eb..13cd1075 100644 --- a/ext/repo_deb.c +++ b/ext/repo_deb.c @@ -274,6 +274,73 @@ control2solvable(Solvable *s, Repodata *data, char *control) s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); } +void +repo_add_debpackages(Repo *repo, FILE *fp, int flags) +{ + Pool *pool = repo->pool; + Repodata *data; + char *buf, *p; + int bufl, l, ll; + Solvable *s; + + if (!(flags & REPO_REUSE_REPODATA)) + data = repo_add_repodata(repo, 0); + else + data = repo_last_repodata(repo); + buf = sat_malloc(4096); + bufl = 4096; + l = 0; + buf[l] = 0; + p = buf; + for (;;) + { + if (!(p = strchr(p, '\n'))) + { + int l3; + if (l + 1024 >= bufl) + { + buf = sat_realloc(buf, bufl + 4096); + bufl += 4096; + p = buf + l; + continue; + } + p = buf + l; + ll = fread(p, 1, bufl - l - 1, fp); + if (ll <= 0) + break; + p[ll] = 0; + while ((l3 = strlen(p)) < ll) + p[l3] = '\n'; + l += ll; + continue; + } + p++; + if (*p != '\n') + continue; + *p = 0; + ll = p - buf + 1; + s = pool_id2solvable(pool, repo_add_solvable(repo)); + control2solvable(s, data, buf); + if (!s->name) + repo_free_solvable_block(repo, s - pool->solvables, 1, 1); + if (l > ll) + memmove(buf, p + 1, l - ll); + l -= ll; + p = buf; + buf[l] = 0; + } + if (l) + { + s = pool_id2solvable(pool, repo_add_solvable(repo)); + control2solvable(s, data, buf); + if (!s->name) + repo_free_solvable_block(repo, s - pool->solvables, 1, 1); + } + sat_free(buf); + if (!(flags & REPO_NO_INTERNALIZE)) + repodata_internalize(data); +} + void repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags) { diff --git a/ext/repo_deb.h b/ext/repo_deb.h index d06dbeb2..dd79ab7f 100644 --- a/ext/repo_deb.h +++ b/ext/repo_deb.h @@ -5,6 +5,7 @@ * for further information */ +extern void repo_add_debpackages(Repo *repo, FILE *fp, int flags); extern void repo_add_debs(Repo *repo, const char **debs, int ndebs, int flags); #define DEBS_ADD_WITH_PKGID (1 << 8)