From aae606ee0855dcd4d4bc56804c61e79697d766d9 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Wed, 1 Jul 2009 11:46:37 +0200 Subject: [PATCH] - add repo_add_debpackages to read a debian Packages file --- ext/repo_deb.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ext/repo_deb.h | 1 + 2 files changed, 68 insertions(+) diff --git a/ext/repo_deb.c b/ext/repo_deb.c index e75924e..13cd107 100644 --- a/ext/repo_deb.c +++ b/ext/repo_deb.c @@ -275,6 +275,73 @@ control2solvable(Solvable *s, Repodata *data, char *control) } 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) { Pool *pool = repo->pool; diff --git a/ext/repo_deb.h b/ext/repo_deb.h index d06dbeb..dd79ab7 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) -- 2.7.4