poldek: poldek/pkgdir/dir/dir.c, poldek/pkgdir/rpmdb/rpmdb.c, poldek/pm/rpm...
mis
mis at pld-linux.org
Sat May 31 15:01:45 CEST 2008
Author: mis Date: Sat May 31 13:01:44 2008 GMT
Module: poldek Tag: HEAD
---- Log message:
- fixed memleak with rpm5 - pm_rpmhdr_langs() returns tn_array
---- Files affected:
poldek/poldek/pkgdir/dir:
dir.c (1.29 -> 1.30)
poldek/poldek/pkgdir/rpmdb:
rpmdb.c (1.31 -> 1.32)
poldek/poldek/pm/rpm:
pm_rpm.h (1.22 -> 1.23) , rpmhdr.c (1.12 -> 1.13)
poldek/poldek:
pkgroup.c (1.27 -> 1.28) , pkgu.c (1.40 -> 1.41)
---- Diffs:
================================================================
Index: poldek/poldek/pkgdir/dir/dir.c
diff -u poldek/poldek/pkgdir/dir/dir.c:1.29 poldek/poldek/pkgdir/dir/dir.c:1.30
--- poldek/poldek/pkgdir/dir/dir.c:1.29 Sat Feb 2 22:49:04 2008
+++ poldek/poldek/pkgdir/dir/dir.c Sat May 31 15:01:38 2008
@@ -250,7 +250,7 @@
}
if (pkg == NULL) { /* not exists in previous index */
- char **langs;
+ tn_array *langs;
nnew++;
n_assert(h); /* loaded in previous if block */
@@ -261,10 +261,10 @@
pkg->load_pkguinf = load_pkguinf;
if ((langs = pm_rpmhdr_langs(h))) {
- int i = 0;
- while (langs[i])
- pkgdir__update_avlangs(pkgdir, langs[i++], 1);
- free(langs);
+ int i;
+ for (i=0; i < n_array_size(langs); i++)
+ pkgdir__update_avlangs(pkgdir, n_array_nth(langs, i), 1);
+ n_array_free(langs);
}
pkg->groupid = pkgroup_idx_update_rpmhdr(pkgroups, h);
================================================================
Index: poldek/poldek/pkgdir/rpmdb/rpmdb.c
diff -u poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.31 poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.32
--- poldek/poldek/pkgdir/rpmdb/rpmdb.c:1.31 Sat Feb 2 22:49:04 2008
+++ poldek/poldek/pkgdir/rpmdb/rpmdb.c Sat May 31 15:01:39 2008
@@ -144,7 +144,7 @@
int load_package(unsigned int recno, void *header, struct pkgdir *pkgdir)
{
struct pkg *pkg;
- char **langs;
+ tn_array *langs;
pkg = pm_rpm_ldhdr(pkgdir->na, header, NULL, 0, PKG_LDCAPREQS);
@@ -162,10 +162,10 @@
n_array_push(pkgdir->pkgs, pkg);
if ((langs = pm_rpmhdr_langs(header))) {
- int i = 0;
- while (langs[i])
- pkgdir__update_avlangs(pkgdir, langs[i++], 1);
- free(langs);
+ int i;
+ for (i=0; i < n_array_size(langs); i++)
+ pkgdir__update_avlangs(pkgdir, n_array_nth(langs, i), 1);
+ n_array_free(langs);
}
return 1;
================================================================
Index: poldek/poldek/pm/rpm/pm_rpm.h
diff -u poldek/poldek/pm/rpm/pm_rpm.h:1.22 poldek/poldek/pm/rpm/pm_rpm.h:1.23
--- poldek/poldek/pm/rpm/pm_rpm.h:1.22 Sun Feb 24 23:40:43 2008
+++ poldek/poldek/pm/rpm/pm_rpm.h Sat May 31 15:01:39 2008
@@ -134,7 +134,7 @@
const char **version, const char **release,
const char **arch, int *color);
-char **pm_rpmhdr_langs(Header h);
+tn_array *pm_rpmhdr_langs(Header h);
int pm_rpmhdr_get_entry(Header h, int32_t tag, void *buf, int32_t *type, int32_t *cnt);
int pm_rpmhdr_get_raw_entry(Header h, int32_t tag, void *buf, int32_t *cnt);
================================================================
Index: poldek/poldek/pm/rpm/rpmhdr.c
diff -u poldek/poldek/pm/rpm/rpmhdr.c:1.12 poldek/poldek/pm/rpm/rpmhdr.c:1.13
--- poldek/poldek/pm/rpm/rpmhdr.c:1.12 Sun Feb 24 23:14:08 2008
+++ poldek/poldek/pm/rpm/rpmhdr.c Sat May 31 15:01:39 2008
@@ -204,28 +204,28 @@
return h;
}
-char **pm_rpmhdr_langs(Header h)
+tn_array *pm_rpmhdr_langs(Header h)
{
+ tn_array *alangs;
char **langs;
-
+ int t, n = 0, i;
+
#ifndef HAVE_RPMPKGREAD /* rpm < 5 */
langs = headerGetLangs(h);
-#else
- int cnt, type, i = 0;
- char **tmp;
+ while (langs[n])
+ n++;
+ t = t;
- pm_rpmhdr_get_entry(h, RPMTAG_HEADERI18NTABLE, &langs, &type, &cnt);
+#else
+ pm_rpmhdr_get_entry(h, RPMTAG_HEADERI18NTABLE, &langs, &t, &n);
+#endif
+
+ alangs = n_array_new(n, free, (tn_fn_cmp)strcmp);
+ for (i=0; i < n ; i++)
+ n_array_push(alangs, n_strdup(langs[i]));
- /* terminate list by NULL */
- tmp = n_malloc(sizeof(*tmp) * (cnt + 1));
- for (i=0; i < cnt ; i++)
- tmp[i] = n_strdup(langs[i]); /* XXX, memleak, TOFIX */
- tmp[i] = NULL;
free(langs);
- langs = tmp;
-
-#endif
- return langs;
+ return alangs;
}
================================================================
Index: poldek/poldek/pkgroup.c
diff -u poldek/poldek/pkgroup.c:1.27 poldek/poldek/pkgroup.c:1.28
--- poldek/poldek/pkgroup.c:1.27 Sat Feb 2 22:49:04 2008
+++ poldek/poldek/pkgroup.c Sat May 31 15:01:39 2008
@@ -450,8 +450,9 @@
int pkgroup_idx_update_rpmhdr(struct pkgroup_idx *idx, void *rpmhdr)
{
- char **langs, **groups;
- int i, ngroups = 0, nlangs = 0;
+ tn_array *langs;
+ char **groups;
+ int i, ngroups = 0;
struct pkgroup *gr = NULL;
Header h;
@@ -460,26 +461,18 @@
return 0;
if (!pm_rpmhdr_get_raw_entry(h, RPMTAG_GROUP, (void*)&groups, &ngroups)) {
- free(langs);
+ n_array_free(langs);
return 0;
}
-
-
- i = 0;
- while (langs[i++] != NULL)
- ;
-
- nlangs = i;
- n_assert(nlangs >= ngroups);
+ n_assert(n_array_size(langs) >= ngroups);
- DBGF("ngroups %d, %d, %d\n", ngroups, nlangs, rc);
+ DBGF("ngroups %d, %d, %d\n", ngroups, n_array_size(langs), rc);
for (i=0; i < ngroups; i++) {
+ const char *lang = n_array_nth(langs, i);
DBGF(" gr[%d of %d] %s\n", i, ngroups, groups[i]);
- if (langs[i] == NULL)
- break;
- if (strcmp(langs[i], "C") == 0) {
+ if (n_str_eq(lang, "C")) {
if ((gr = n_hash_get(idx->ht, groups[i])) == NULL) {
gr = pkgroup_new(n_array_size(idx->arr) + 1, groups[i]);
n_array_push(idx->arr, gr);
@@ -491,18 +484,17 @@
if (gr != NULL) {
for (i=0; i < ngroups; i++) {
- if (langs[i] == NULL)
- break;
+ const char *lang = n_array_nth(langs, i);
- if (strcmp(langs[i], "C") == 0 || *groups[i] == '\0')
+ if (n_str_eq(lang, "C") || *groups[i] == '\0')
continue;
- pkgroup_add(gr, langs[i], groups[i]);
+ pkgroup_add(gr, lang, groups[i]);
}
}
free(groups);
- free(langs);
+ n_array_free(langs);
if (gr)
DBGF("gr_add %d %s\n", gr->id, gr->name);
================================================================
Index: poldek/poldek/pkgu.c
diff -u poldek/poldek/pkgu.c:1.40 poldek/poldek/pkgu.c:1.41
--- poldek/poldek/pkgu.c:1.40 Sun May 25 21:49:57 2008
+++ poldek/poldek/pkgu.c Sat May 31 15:01:40 2008
@@ -641,9 +641,10 @@
struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr)
{
- char **langs, **summs, **descrs;
+ tn_array *langs;
+ char **summs, **descrs;
int nsumms, ndescrs;
- int i, n, nlangs = 0;
+ int i, n;
struct pkguinf *pkgu;
Header h = hdr;
@@ -651,7 +652,7 @@
pkgu->_ht = n_hash_new(3, NULL);
if ((langs = pm_rpmhdr_langs(h))) {
- tn_array *avlangs, *sl_langs;
+ tn_array *sl_langs = NULL;
char *sl_lang;
pm_rpmhdr_get_raw_entry(h, RPMTAG_SUMMARY, (void*)&summs, &nsumms);
@@ -661,24 +662,22 @@
if (n > ndescrs)
n = ndescrs;
- avlangs = n_array_new(4, free, (tn_fn_cmp)strcmp);
pkgu->_langs_rpmhdr = n_array_new(4, free, NULL);
-
for (i=0; i < n; i++) {
struct pkguinf_i18n *inf;
+ const char *lang;
- if (langs[i] == NULL)
+ if (n_array_size(langs) < i)
break;
- n_array_push(avlangs, n_strdup(langs[i]));
- n_array_push(pkgu->_langs_rpmhdr, n_strdup(langs[i]));
+ lang = n_array_nth(langs, i);
+ n_array_push(pkgu->_langs_rpmhdr, n_strdup(lang));
inf = pkguinf_i18n_new(pkgu->_na, summs[i], descrs[i]);
- n_hash_insert(pkgu->_ht, langs[i], inf);
+ n_hash_insert(pkgu->_ht, lang, inf);
}
- nlangs = n;
-
- sl_langs = lc_lang_select(avlangs, lc_messages_lang());
+
+ sl_langs = lc_lang_select(langs, lc_messages_lang());
if (sl_langs == NULL)
sl_lang = "C";
else
@@ -693,11 +692,9 @@
pkgu_set_recodable(pkgu, PKGUINF_DESCRIPTION, inf->description, sl_lang);
}
- n_array_free(avlangs);
- if (sl_langs)
- n_array_free(sl_langs);
+ n_array_free(langs);
+ n_array_cfree(&sl_langs);
- free(langs);
free(summs);
free(descrs);
}
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pkgdir/dir/dir.c?r1=1.29&r2=1.30&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pkgdir/rpmdb/rpmdb.c?r1=1.31&r2=1.32&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/rpm/pm_rpm.h?r1=1.22&r2=1.23&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/rpm/rpmhdr.c?r1=1.12&r2=1.13&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pkgroup.c?r1=1.27&r2=1.28&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pkgu.c?r1=1.40&r2=1.41&f=u
More information about the pld-cvs-commit
mailing list