From: Michael Schroeder Date: Tue, 7 Feb 2012 11:10:47 +0000 (+0100) Subject: - use join2 for temp store of the language instead of strdup X-Git-Tag: BASE-SuSE-Code-12_2-Branch~175 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e2fac7128adc90bca3547a4049e083e2a96a7269;p=thirdparty%2Flibsolv.git - use join2 for temp store of the language instead of strdup --- diff --git a/ext/repo_comps.c b/ext/repo_comps.c index efdfa02b..b16c1cf4 100644 --- a/ext/repo_comps.c +++ b/ext/repo_comps.c @@ -125,18 +125,17 @@ struct parsedata { * find value for xml attribute * I: txt, name of attribute * I: atts, list of key/value attributes - * I: dup, strdup it * O: pointer to value of matching key, or NULL * */ static inline const char * -find_attr(const char *txt, const char **atts, int dup) +find_attr(const char *txt, const char **atts) { for (; *atts; atts += 2) { if (!strcmp(*atts, txt)) - return dup ? solv_strdup(atts[1]) : atts[1]; + return atts[1]; } return 0; } @@ -200,17 +199,20 @@ startElement(void *userData, const char *name, const char **atts) case STATE_CNAME: case STATE_DESCRIPTION: case STATE_CDESCRIPTION: - pd->tmplang = find_attr("xml:lang", atts, 1); - break; + { + const char *lang = find_attr("xml:lang", atts); + pd->tmplang = lang ? join2(&pd->jd, lang, 0, 0) : 0; + break; + } case STATE_PACKAGEREQ: { - const char *type = find_attr("type", atts, 0); + const char *type = find_attr("type", atts); pd->condreq = 0; pd->reqtype = SOLVABLE_RECOMMENDS; if (type && !strcmp(type, "conditional")) { - const char *requires = find_attr("requires", atts, 0); + const char *requires = find_attr("requires", atts); if (requires && *requires) pd->condreq = pool_str2id(pool, requires, 1); } @@ -270,13 +272,11 @@ endElement(void *userData, const char *name) case STATE_NAME: case STATE_CNAME: repodata_set_str(pd->data, pd->handle, pool_id2langid(pd->pool, SOLVABLE_SUMMARY, pd->tmplang, 1), pd->content); - pd->tmplang = solv_free((void *)pd->tmplang); break; case STATE_DESCRIPTION: case STATE_CDESCRIPTION: repodata_set_str(pd->data, pd->handle, pool_id2langid(pd->pool, SOLVABLE_DESCRIPTION, pd->tmplang, 1), pd->content); - pd->tmplang = solv_free((void *)pd->tmplang); break; case STATE_PACKAGEREQ: @@ -388,7 +388,6 @@ repo_add_comps(Repo *repo, FILE *fp, int flags) } XML_ParserFree(parser); - solv_free((void *)pd.tmplang); solv_free(pd.content); join_freemem(&pd.jd); diff --git a/ext/repo_products.c b/ext/repo_products.c index 802dabe6..acff8cd5 100644 --- a/ext/repo_products.c +++ b/ext/repo_products.c @@ -115,7 +115,7 @@ struct parsedata { const char *tmpvers; const char *tmprel; - const char *tmpurltype; + Id urltype; unsigned int ctime; @@ -133,18 +133,17 @@ struct parsedata { * find value for xml attribute * I: txt, name of attribute * I: atts, list of key/value attributes - * I: dup, strdup it * O: pointer to value of matching key, or NULL * */ static inline const char * -find_attr(const char *txt, const char **atts, int dup) +find_attr(const char *txt, const char **atts) { for (; *atts; atts += 2) { if (!strcmp(*atts, txt)) - return dup ? solv_strdup(atts[1]) : atts[1]; + return atts[1]; } return 0; } @@ -201,7 +200,7 @@ startElement(void *userData, const char *name, const char **atts) case STATE_PRODUCT: /* parse 'schemeversion' and store in global variable */ { - const char * scheme = find_attr("schemeversion", atts, 0); + const char * scheme = find_attr("schemeversion", atts); pd->productscheme = (scheme && *scheme) ? atoi(scheme) : -1; } if (!s) @@ -213,13 +212,14 @@ startElement(void *userData, const char *name, const char **atts) /* ... */ case STATE_SUMMARY: - pd->tmplang = find_attr("lang", atts, 1); - break; case STATE_DESCRIPTION: - pd->tmplang = find_attr("lang", atts, 1); - break; + { + const char *lang = find_attr("lang", atts); + pd->tmplang = lang ? join2(&pd->jd, lang, 0, 0) : 0; + break; + } case STATE_URL: - pd->tmpurltype = find_attr("name", atts, 1); + pd->urltype = pool_str2id(pd->pool, find_attr("name", atts), 1); break; default: break; @@ -306,22 +306,19 @@ endElement(void *userData, const char *name) break; case STATE_SUMMARY: repodata_set_str(pd->data, pd->handle, pool_id2langid(pd->pool, SOLVABLE_SUMMARY, pd->tmplang, 1), pd->content); - pd->tmplang = solv_free((void *)pd->tmplang); break; case STATE_SHORTSUMMARY: repodata_set_str(pd->data, pd->handle, PRODUCT_SHORTLABEL, pd->content); break; case STATE_DESCRIPTION: repodata_set_str(pd->data, pd->handle, pool_id2langid(pd->pool, SOLVABLE_DESCRIPTION, pd->tmplang, 1), pd->content); - pd->tmplang = solv_free((void *)pd->tmplang); break; case STATE_URL: - if (pd->tmpurltype) + if (pd->urltype) { repodata_add_poolstr_array(pd->data, pd->handle, PRODUCT_URL, pd->content); - repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, pool_str2id(pd->pool, pd->tmpurltype, 1)); + repodata_add_idarray(pd->data, pd->handle, PRODUCT_URL_TYPE, pd->urltype); } - pd->tmpurltype = solv_free((void *)pd->tmpurltype); break; case STATE_TARGET: repodata_set_str(pd->data, pd->handle, PRODUCT_REGISTER_TARGET, pd->content); @@ -475,7 +472,6 @@ repo_add_code11_products(Repo *repo, const char *dirpath, int flags) } closedir(dir); } - solv_free((void *)pd.tmplang); solv_free(pd.content); join_freemem(&pd.jd); diff --git a/ext/repo_rpmmd.c b/ext/repo_rpmmd.c index 9527a415..c7148f68 100644 --- a/ext/repo_rpmmd.c +++ b/ext/repo_rpmmd.c @@ -790,8 +790,11 @@ startElement(void *userData, const char *name, const char **atts) case STATE_SUMMARY: case STATE_CATEGORY: case STATE_DESCRIPTION: - pd->tmplang = solv_strdup(find_attr("lang", atts)); - break; + { + const char *lang = find_attr("lang", atts); + pd->tmplang = lang ? join2(&pd->jd, lang, 0, 0) : 0; + break; + } case STATE_USERVISIBLE: repodata_set_void(pd->data, handle, SOLVABLE_ISVISIBLE); break; @@ -800,15 +803,15 @@ startElement(void *userData, const char *name, const char **atts) const char *tmp = find_attr("pattern", atts); if (tmp) repodata_add_poolstr_array(pd->data, pd->handle, SOLVABLE_INCLUDES, join2(&pd->jd, "pattern", ":", tmp)); + break; } - break; case STATE_EXTENDSENTRY: { const char *tmp = find_attr("pattern", atts); if (tmp) repodata_add_poolstr_array(pd->data, pd->handle, SOLVABLE_EXTENDS, join2(&pd->jd, "pattern", ":", tmp)); + break; } - break; case STATE_LOCATION: str = find_attr("href", atts); if (str) @@ -1030,15 +1033,12 @@ endElement(void *userData, const char *name) break; case STATE_SUMMARY: repodata_set_str(pd->data, handle, langtag(pd, SOLVABLE_SUMMARY, pd->tmplang), pd->content); - pd->tmplang = solv_free((char *)pd->tmplang); break; case STATE_DESCRIPTION: set_description_author(pd->data, handle, pd->content, pd); - pd->tmplang = solv_free((char *)pd->tmplang); break; case STATE_CATEGORY: repodata_set_str(pd->data, handle, langtag(pd, SOLVABLE_CATEGORY, pd->tmplang), pd->content); - pd->tmplang = solv_free((char *)pd->tmplang); break; case STATE_DISTRIBUTION: repodata_set_poolstr(pd->data, handle, SOLVABLE_DISTRIBUTION, pd->content); @@ -1082,7 +1082,6 @@ endElement(void *userData, const char *name) case STATE_EULA: if (pd->content[0]) repodata_set_str(pd->data, handle, langtag(pd, SOLVABLE_EULA, pd->tmplang), pd->content); - pd->tmplang = solv_free((char *)pd->tmplang); break; case STATE_KEYWORD: if (pd->content[0]) diff --git a/ext/repo_zyppdb.c b/ext/repo_zyppdb.c index f9691603..ed6a5b50 100644 --- a/ext/repo_zyppdb.c +++ b/ext/repo_zyppdb.c @@ -93,18 +93,17 @@ struct parsedata { * find value for xml attribute * I: txt, name of attribute * I: atts, list of key/value attributes - * I: dup, strdup it * O: pointer to value of matching key, or NULL * */ static inline const char * -find_attr(const char *txt, const char **atts, int dup) +find_attr(const char *txt, const char **atts) { for (; *atts; atts += 2) { if (!strcmp(*atts, txt)) - return dup ? solv_strdup(atts[1]) : atts[1]; + return atts[1]; } return 0; } @@ -161,7 +160,7 @@ startElement(void *userData, const char *name, const char **atts) case STATE_PRODUCT: { /* parse 'type' */ - const char *type = find_attr("type", atts, 0); + const char *type = find_attr("type", atts); s = pd->solvable = pool_id2solvable(pool, repo_add_solvable(pd->repo)); repodata_extend(pd->data, s - pool->solvables); pd->handle = s - pool->solvables; @@ -171,15 +170,18 @@ startElement(void *userData, const char *name, const char **atts) break; case STATE_VERSION: { - const char *ver = find_attr("ver", atts, 0); - const char *rel = find_attr("rel", atts, 0); - /* const char *epoch = find_attr("epoch", atts, 1); ignored */ + const char *ver = find_attr("ver", atts); + const char *rel = find_attr("rel", atts); + /* const char *epoch = find_attr("epoch", atts); ignored */ s->evr = makeevr(pd->pool, join2(&pd->jd, ver, "-", rel)); } break; /* ... */ case STATE_SUMMARY: - pd->tmplang = find_attr("lang", atts, 1); + { + const char *lang = find_attr("lang", atts); + pd->tmplang = lang ? join2(&pd->jd, lang, 0, 0) : 0; + } break; default: break; @@ -227,7 +229,6 @@ endElement(void *userData, const char *name) break; case STATE_SUMMARY: repodata_set_str(pd->data, pd->handle, pool_id2langid(pd->pool, SOLVABLE_SUMMARY, pd->tmplang, 1), pd->content); - pd->tmplang = solv_free((void *)pd->tmplang); break; case STATE_VENDOR: s->vendor = pool_str2id(pd->pool, pd->content, 1); @@ -355,7 +356,6 @@ repo_add_zyppdb_products(Repo *repo, const char *dirpath, int flags) } closedir(dir); - solv_free((void *)pd.tmplang); free(pd.content); join_freemem(&pd.jd); if (!(flags & REPO_NO_INTERNALIZE))