- add pool_id2langid function
authorMichael Schroeder <mls@suse.de>
Fri, 9 May 2008 13:15:03 +0000 (13:15 +0000)
committerMichael Schroeder <mls@suse.de>
Fri, 9 May 2008 13:15:03 +0000 (13:15 +0000)
src/pool.c
src/pool.h
src/solvable.c

index 613c9b01daee059154cfcfa955eff436f7e48836..967e4f6425e1b7a7c142c6ea11c77237e3698714 100644 (file)
@@ -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)
 {
index 113347fb3e52c33ae0d660adebd9ecf942dbcabc..14e3976fa43106cbbd2e95642155fa960d4b9c0a 100644 (file)
@@ -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);
index d0a0fa13260b75ab51c68fccc390db18b2ab2fe4..630ef20aed5bd42b95f5105da8c3b66aa0fa37b3 100644 (file)
@@ -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);
 }