From: Michael Schroeder Date: Fri, 9 May 2008 13:15:03 +0000 (+0000) Subject: - add pool_id2langid function X-Git-Tag: BASE-SuSE-Code-12_1-Branch~308^2~363 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fa43e2264db16379fa814c6e53b2226d4e996c5b;p=thirdparty%2Flibsolv.git - add pool_id2langid function --- diff --git a/src/pool.c b/src/pool.c index 613c9b01..967e4f64 100644 --- a/src/pool.c +++ b/src/pool.c @@ -982,6 +982,28 @@ pool_set_languages(Pool *pool, const char **languages, int nlanguages) pool->languages[i] = strdup(languages[i]); } +Id +pool_id2langid(Pool *pool, Id id, const char *lang, int create) +{ + const char *n; + char buf[256], *p; + int l; + + if (!lang) + return id; + n = id2str(pool, id); + l = strlen(n) + strlen(lang) + 2; + if (l > sizeof(buf)) + p = sat_malloc(strlen(n) + strlen(lang) + 2); + else + p = buf; + sprintf(p, "%s:%s", n, lang); + id = str2id(pool, p, create); + if (p != buf) + free(p); + return id; +} + char * pool_alloctmpspace(Pool *pool, int len) { diff --git a/src/pool.h b/src/pool.h index 113347fb..14e3976f 100644 --- a/src/pool.h +++ b/src/pool.h @@ -166,6 +166,7 @@ static inline Solvable *pool_id2solvable(Pool *pool, Id p) extern const char *solvable2str(Pool *pool, Solvable *s); void pool_set_languages(Pool *pool, const char **languages, int nlanguages); +Id pool_id2langid(Pool *pool, Id id, const char *lang, int create); Id solvable_lookup_id(Solvable *s, Id keyname); unsigned int solvable_lookup_num(Solvable *s, Id keyname, unsigned int notfound); diff --git a/src/solvable.c b/src/solvable.c index d0a0fa13..630ef20a 100644 --- a/src/solvable.c +++ b/src/solvable.c @@ -177,24 +177,12 @@ solvable_lookup_str_poollang(Solvable *s, Id keyname) const char * solvable_lookup_str_lang(Solvable *s, Id keyname, const char *lang) { - Pool *pool; - Id id; - char *p; - const char *kn, *str; - - if (!s->repo) - return repo_lookup_str(s, keyname); - pool = s->repo->pool; - kn = id2str(pool, keyname); - p = sat_malloc(strlen(kn) + strlen(lang) + 2); - sprintf(p, "%s:%s", kn, lang); - id = str2id(pool, p, 0); - free(p); - if (id) + if (s->repo) { - str = repo_lookup_str(s, id); - if (str) - return str; + const char *str; + Id id = pool_id2langid(s->repo->pool, keyname, lang, 0); + if (id && (str = repo_lookup_str(s, id)) != 0) + return str; } return repo_lookup_str(s, keyname); }