From: Klaus Kaempf Date: Mon, 11 Aug 2008 10:13:17 +0000 (+0000) Subject: prepare for diskusage.xml X-Git-Tag: BASE-SuSE-Code-12_1-Branch~584 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c6eada18db721a3cd2500dfaa360aae1688b4d3;p=platform%2Fupstream%2Flibsolv.git prepare for diskusage.xml --- diff --git a/tools/repo_rpmmd.c b/tools/repo_rpmmd.c index 42799dc..57aec09 100644 --- a/tools/repo_rpmmd.c +++ b/tools/repo_rpmmd.c @@ -105,6 +105,12 @@ enum state { STATE_FILE, + STATE_DISKUSAGE, + STATE_TRANSLATIONS, + STATE_DUINFO, + STATE_DIRS, + STATE_DIR, + // general NUMSTATES }; @@ -122,6 +128,8 @@ static struct stateswitch stateswitches[] = { { STATE_START, "pattern", STATE_SOLVABLE, 0 }, { STATE_START, "patch", STATE_SOLVABLE, 0 }, { STATE_START, "package", STATE_SOLVABLE, 0 }, + { STATE_START, "diskusage", STATE_DISKUSAGE, 0 }, + { STATE_START, "translations", STATE_TRANSLATIONS, 0 }, { STATE_SOLVABLE, "name", STATE_NAME, 1 }, { STATE_SOLVABLE, "arch", STATE_ARCH, 1 }, @@ -192,6 +200,11 @@ static struct stateswitch stateswitches[] = { { STATE_ENHANCES, "rpm:entry", STATE_ENHANCESENTRY, 0 }, { STATE_FRESHENS, "rpm:entry", STATE_FRESHENSENTRY, 0 }, + /* diskusage.xml */ + { STATE_DISKUSAGE, "duinfo", STATE_DUINFO, 0 }, + { STATE_DUINFO, "dirs", STATE_DIRS, 0 }, + { STATE_DIRS, "dir", STATE_DIR, 0 }, + { NUMSTATES} }; @@ -224,6 +237,12 @@ struct parsedata { }; +/* + * makeevr_atts + * parse 'epoch', 'ver' and 'rel', return evr Id + * + */ + static Id makeevr_atts(Pool *pool, struct parsedata *pd, const char **atts) { @@ -289,6 +308,16 @@ makeevr_atts(Pool *pool, struct parsedata *pd, const char **atts) return str2id(pool, pd->content, 1); } + +/* + * find_attr + * find value for xml attribute + * I: txt, name of attribute + * I: atts, list of key/value attributes + * O: pointer to value of matching key, or NULL + * + */ + static inline const char * find_attr(const char *txt, const char **atts) { @@ -300,6 +329,11 @@ find_attr(const char *txt, const char **atts) return 0; } + +/* + * dependency relations + */ + static char *flagtab[] = { "GT", "EQ", @@ -309,6 +343,13 @@ static char *flagtab[] = { "LE" }; + +/* + * adddep + * parse attributes to reldep Id + * + */ + static unsigned int adddep(Pool *pool, struct parsedata *pd, unsigned int olddeps, const char **atts, int isreq) { @@ -364,6 +405,12 @@ adddep(Pool *pool, struct parsedata *pd, unsigned int olddeps, const char **atts return repo_addid_dep(pd->common.repo, olddeps, id, marker); } + +/* + * set_desciption_author + * + */ + static void set_desciption_author(Repodata *data, Id handle, char *str) { @@ -408,6 +455,12 @@ set_desciption_author(Repodata *data, Id handle, char *str) repodata_set_str(data, handle, SOLVABLE_DESCRIPTION, str); } + +/* + * set_sourcerpm + * + */ + static void set_sourcerpm(Repodata *data, Solvable *s, Id handle, char *sourcerpm) { @@ -453,6 +506,15 @@ set_sourcerpm(Repodata *data, Solvable *s, Id handle, char *sourcerpm) repodata_set_id(data, handle, SOLVABLE_SOURCENAME, strn2id(pool, sourcerpm, sevr - sourcerpm - 1, 1)); } +/*-----------------------------------------------*/ +/* XML callbacks */ + +/* + * startElement + * XML callback + * + */ + static void XMLCALL startElement(void *userData, const char *name, const char **atts) { @@ -627,11 +689,24 @@ startElement(void *userData, const char *name, const char **atts) if (str && (end = atoi(str)) != 0) repodata_set_num(pd->data, handle, SOLVABLE_HEADEREND, end); } + case STATE_DISKUSAGE: + case STATE_TRANSLATIONS: + case STATE_DUINFO: + case STATE_DIRS: + case STATE_DIR: + default: break; } } + +/* + * endElement + * XML callback + * + */ + static void XMLCALL endElement(void *userData, const char *name) { @@ -788,6 +863,13 @@ endElement(void *userData, const char *name) // fprintf(stderr, "back from known %d %d %d\n", pd->state, pd->depth, pd->statedepth); } + +/* + * characterData + * XML callback + * + */ + static void XMLCALL characterData(void *userData, const XML_Char *s, int len) { @@ -811,8 +893,17 @@ characterData(void *userData, const XML_Char *s, int len) } +/*-----------------------------------------------*/ +/* 'main' */ + #define BUFF_SIZE 8192 +/* + * repo_add_rpmmd + * parse rpm-md metadata (primary, others, diskusage, translations) + * + */ + void repo_add_rpmmd(Repo *repo, FILE *fp, int flags) {