From: Klaus Kaempf Date: Mon, 4 Aug 2008 10:32:34 +0000 (+0000) Subject: prepare to parse diskusage and translations through rpmmd files X-Git-Tag: BASE-SuSE-Code-12_1-Branch~591 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f861e1279d878098144a4ba73e23935f609530cd;p=platform%2Fupstream%2Flibsolv.git prepare to parse diskusage and translations through rpmmd files (backup checkin) --- diff --git a/tools/repo_rpmmd.c b/tools/repo_rpmmd.c index f88c273..0166c20 100644 --- a/tools/repo_rpmmd.c +++ b/tools/repo_rpmmd.c @@ -178,6 +178,7 @@ static struct stateswitch stateswitches[] = { { NUMSTATES} }; + struct parsedata { struct parsedata_common common; char *kind; @@ -200,8 +201,12 @@ struct parsedata { Repodata *data; Id handle; XML_Parser *parser; + Id (*dirs)[3]; // dirid, size, nfiles + int ndirs; + Id langcache[ID_NUM_INTERNAL]; }; + static Id makeevr_atts(Pool *pool, struct parsedata *pd, const char **atts) { diff --git a/tools/rpmmd2solv.c b/tools/rpmmd2solv.c index 88cac02..5c72a8f 100644 --- a/tools/rpmmd2solv.c +++ b/tools/rpmmd2solv.c @@ -59,11 +59,12 @@ static void usage(int status) { fprintf(stderr, "\nUsage:\n" - "rpmmd2solv [-a][-h][-k][-n ]\n" - " reads a 'rpmmd' repository from and writes a .solv file to \n" + "rpmmd2solv [-a][-h][-k][-n ][-l ]\n" + " reads 'primary' from a 'rpmmd' repository from and writes a .solv file to \n" " -h : print help & exit\n" " -k : don't mix kinds (experimental!)\n" " -n : save attributes as .attr\n" + " -l : parse localization data for \n" ); exit(status); } @@ -75,12 +76,12 @@ main(int argc, char **argv) const char *attrname = 0; const char *basefile = 0; const char *dir = 0; - + const char *locale = 0; Pool *pool = pool_create(); Repo *repo = repo_create(pool, ""); - while ((c = getopt (argc, argv, "hkn:b:d:")) >= 0) + while ((c = getopt (argc, argv, "hkn:b:d:l:")) >= 0) { switch(c) { @@ -99,6 +100,9 @@ main(int argc, char **argv) case 'd': dir = optarg; break; + case 'l': + locale = optarg; + break; default: usage(1); break; @@ -109,9 +113,9 @@ main(int argc, char **argv) FILE *fp; int l; char *fnp; - l = strlen(dir); - fnp = sat_malloc(l + 20); - sprintf(fnp, "%s/primary.xml.gz", dir); + l = strlen(dir) + 128; + fnp = sat_malloc(l+1); + snprintf(fnp, l, "%s/primary.xml.gz", dir); if (!(fp = myfopen(fnp))) { perror(fnp); @@ -119,6 +123,39 @@ main(int argc, char **argv) } repo_add_rpmmd(repo, fp, flags); fclose(fp); + snprintf(fnp, l, "%s/diskusage.xml.gz", dir); + if ((fp = myfopen(fnp))) + { + repo_add_rpmmd(repo, fp, flags); + fclose(fp); + } + if (locale) + { + if (snprintf(fnp, l, "%s/translation-%s.xml.gz", dir, locale) >= l) + { + fprintf(stderr, "-l parameter too long\n"); + exit(1); + } + while (!(fp = myfopen(fnp))) + { + fprintf(stderr, "not opened %s\n", fnp); + if (strlen(locale) > 2) + { + if (snprintf(fnp, l, "%s/translation-%.2s.xml.gz", dir, locale) >= l) + { + fprintf(stderr, "-l parameter too long\n"); + exit(1); + } + if ((fp = myfopen(fnp))) + break; + } + perror(fnp); + exit(1); + } + fprintf(stderr, "opened %s\n", fnp); + repo_add_rpmmd(repo, fp, flags); + fclose(fp); + } sat_free(fnp); } else