diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2012-09-26 11:31:41 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2012-09-26 11:58:29 +0300 |
commit | da20a6dbf1dfc655762440ce9784756fb4353eb8 (patch) | |
tree | 2e5502691f4118309d86c21e8086b64bf819d89e /build | |
parent | cb112b67450398aa0981b4055fc66e9972b91eff (diff) | |
download | rpm-da20a6dbf1dfc655762440ce9784756fb4353eb8.tar.gz rpm-da20a6dbf1dfc655762440ce9784756fb4353eb8.tar.bz2 rpm-da20a6dbf1dfc655762440ce9784756fb4353eb8.zip |
Dont waste time with argv for rpmfc file names
- argvAdd() gets more and more costly as the number of files increase,
use a plain old string array where one is called for: the size
is predetermined (from another argv) and we're just copying the
strings for internal storage here. We do need to pay a little bit
more attention to details now though.
Diffstat (limited to 'build')
-rw-r--r-- | build/rpmfc.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/build/rpmfc.c b/build/rpmfc.c index cd77301d9..d4d11b85c 100644 --- a/build/rpmfc.c +++ b/build/rpmfc.c @@ -46,7 +46,7 @@ struct rpmfc_s { rpmfcAttr *atypes; /*!< known file attribute types */ - ARGV_t fn; /*!< (no. files) file names */ + char ** fn; /*!< (no. files) file names */ ARGV_t *fattrs; /*!< (no. files) file attribute tokens */ ARGI_t fcolor; /*!< (no. files) file colors */ ARGI_t fcdictx; /*!< (no. files) file class dictionary indices */ @@ -749,9 +749,11 @@ rpmfc rpmfcFree(rpmfc fc) rpmfcAttrFree(*attr); free(fc->atypes); free(fc->buildRoot); - argvFree(fc->fn); - for (int i = 0; i < fc->nfiles; i++) + for (int i = 0; i < fc->nfiles; i++) { + free(fc->fn[i]); argvFree(fc->fattrs[i]); + } + free(fc->fn); free(fc->fattrs); argiFree(fc->fcolor); argiFree(fc->fcdictx); @@ -811,7 +813,7 @@ rpmRC rpmfcApply(rpmfc fc) int ix; /* Generate package and per-file dependencies. */ - for (fc->ix = 0; fc->fn != NULL && fc->fn[fc->ix] != NULL; fc->ix++) { + for (fc->ix = 0; fc->ix < fc->nfiles && fc->fn[fc->ix] != NULL; fc->ix++) { for (ARGV_t fattr = fc->fattrs[fc->ix]; fattr && *fattr; fattr++) { rpmfcHelperProvides(fc, *fattr); rpmfcHelperRequires(fc, *fattr); @@ -919,6 +921,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) } fc->nfiles = argvCount(argv); + fc->fn = xcalloc(fc->nfiles, sizeof(*fc->fn)); fc->fattrs = xcalloc(fc->nfiles, sizeof(*fc->fattrs)); /* Initialize the per-file dictionary indices. */ @@ -993,7 +996,7 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) rpmlog(RPMLOG_DEBUG, "%s: %s\n", s, ftype); /* Save the path. */ - argvAdd(&fc->fn, s); + fc->fn[fc->ix] = xstrdup(s); /* Add (filtered) file coloring */ fcolor |= rpmfcColor(ftype); |