From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 438FB138346 for ; Sun, 5 Jan 2020 16:08:35 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 02893E0928; Sun, 5 Jan 2020 16:08:34 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id CAFCAE0928 for ; Sun, 5 Jan 2020 16:08:33 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 27B4734DDD0 for ; Sun, 5 Jan 2020 16:08:32 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 962B7B6 for ; Sun, 5 Jan 2020 16:08:30 +0000 (UTC) From: "Fabian Groffen" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Fabian Groffen" Message-ID: <1578239965.dc9f36140c34969f57e4fb3259315fedd1c61544.grobian@gentoo> Subject: [gentoo-commits] proj/portage-utils:master commit in: /, libq/ X-VCS-Repository: proj/portage-utils X-VCS-Files: TODO.md libq/tree.c libq/tree.h qfile.c qsize.c X-VCS-Directories: libq/ / X-VCS-Committer: grobian X-VCS-Committer-Name: Fabian Groffen X-VCS-Revision: dc9f36140c34969f57e4fb3259315fedd1c61544 X-VCS-Branch: master Date: Sun, 5 Jan 2020 16:08:30 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 80fc12ad-08bb-4ca4-bfe6-3179fe6c2cbb X-Archives-Hash: 1859221316ee8b12ea246a26b52c9530 commit: dc9f36140c34969f57e4fb3259315fedd1c61544 Author: Fabian Groffen gentoo org> AuthorDate: Sun Jan 5 15:21:02 2020 +0000 Commit: Fabian Groffen gentoo org> CommitDate: Sun Jan 5 15:59:25 2020 +0000 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=dc9f3614 qfile/qlist: move away from tree_pkg_vdb_fopenat Signed-off-by: Fabian Groffen gentoo.org> TODO.md | 1 + libq/tree.c | 33 +++++++-------------------------- libq/tree.h | 21 ++++++--------------- qfile.c | 12 ++++++------ qsize.c | 24 +++++++++--------------- 5 files changed, 29 insertions(+), 62 deletions(-) diff --git a/TODO.md b/TODO.md index fe74cab..fc10f26 100644 --- a/TODO.md +++ b/TODO.md @@ -24,6 +24,7 @@ or parsing Packages) - cached, such that repeated matches for the same thing are served off the cache (set), as frequently happens in dependency calculations + - tree\_{open,close}\_cat can be made static afterwards # qmerge - dep resolver needs spanktastic love. diff --git a/libq/tree.c b/libq/tree.c index 49b2fa1..0c05dc5 100644 --- a/libq/tree.c +++ b/libq/tree.c @@ -161,7 +161,7 @@ tree_close(tree_ctx *ctx) free(ctx); } -int +static int tree_filter_cat(const struct dirent *de) { int i; @@ -230,7 +230,7 @@ tree_open_cat(tree_ctx *ctx, const char *name) return cat_ctx; } -tree_cat_ctx * +static tree_cat_ctx * tree_next_cat(tree_ctx *ctx) { /* search for a category directory */ @@ -295,7 +295,7 @@ tree_close_cat(tree_cat_ctx *cat_ctx) free(cat_ctx); } -int +static int tree_filter_pkg(const struct dirent *de) { int i; @@ -527,29 +527,7 @@ tree_pkg_vdb_openat( return openat(pkg_ctx->fd, file, flags | O_CLOEXEC, mode); } -FILE * -tree_pkg_vdb_fopenat( - tree_pkg_ctx *pkg_ctx, - const char *file, - int flags, - mode_t mode, - const char *fmode) -{ - FILE *fp; - int fd; - - fd = tree_pkg_vdb_openat(pkg_ctx, file, flags, mode); - if (fd == -1) - return NULL; - - fp = fdopen(fd, fmode); - if (!fp) - close(fd); - - return fp; -} - -bool +static bool tree_pkg_vdb_eat( tree_pkg_ctx *pkg_ctx, const char *file, @@ -721,6 +699,7 @@ tree_read_file_md5(tree_pkg_ctx *pkg_ctx) assign_var(DEFINED_PHASES); assign_var(REQUIRED_USE); assign_var(BDEPEND); + assign_var(EPREFIX); assign_var(_eclasses_); assign_var(_md5_); warn("Cache file for '%s/%s' has unknown key %s", @@ -794,6 +773,7 @@ tree_read_file_ebuild(tree_pkg_ctx *pkg_ctx) match_key(PDEPEND); match_key(EAPI); match_key(REQUIRED_USE); + match_key(BDEPEND); #undef match_key } @@ -899,6 +879,7 @@ tree_read_file_binpkg_xpak_cb( match_path(BDEPEND); match_path(CONTENTS); match_path(USE); + match_path(EPREFIX); match_path(repository); else return; diff --git a/libq/tree.h b/libq/tree.h index eb60296..c941172 100644 --- a/libq/tree.h +++ b/libq/tree.h @@ -89,16 +89,17 @@ struct tree_pkg_meta { char *Q_PROVIDE; /* line 14 */ char *Q_EAPI; char *Q_PROPERTIES; - /* These are MD5-Cache only */ - char *Q_DEFINED_PHASES; - char *Q_REQUIRED_USE; char *Q_BDEPEND; - char *Q__eclasses_; - char *Q__md5_; /* binpkgs/vdb */ + char *Q_DEFINED_PHASES; + char *Q_REQUIRED_USE; char *Q_CONTENTS; char *Q_USE; + char *Q_EPREFIX; char *Q_repository; + /* These are MD5-Cache only */ + char *Q__eclasses_; + char *Q__md5_; }; /* Metadata.xml */ @@ -116,20 +117,10 @@ tree_ctx *tree_open(const char *sroot, const char *portdir); tree_ctx *tree_open_vdb(const char *sroot, const char *svdb); tree_ctx *tree_open_binpkg(const char *sroot, const char *spkg); void tree_close(tree_ctx *ctx); -int tree_filter_cat(const struct dirent *de); tree_cat_ctx *tree_open_cat(tree_ctx *ctx, const char *name); -tree_cat_ctx *tree_next_cat(tree_ctx *ctx); void tree_close_cat(tree_cat_ctx *cat_ctx); -int tree_filter_pkg(const struct dirent *de); tree_pkg_ctx *tree_open_pkg(tree_cat_ctx *cat_ctx, const char *name); tree_pkg_ctx *tree_next_pkg(tree_cat_ctx *cat_ctx); -FILE *tree_pkg_vdb_fopenat(tree_pkg_ctx *pkg_ctx, const char *file, - int flags, mode_t mode, const char *fmode); -#define tree_pkg_vdb_fopenat_ro(pkg_ctx, file) \ - tree_pkg_vdb_fopenat(pkg_ctx, file, O_RDONLY, 0, "r") -#define tree_pkg_vdb_fopenat_rw(pkg_ctx, file) \ - tree_pkg_vdb_fopenat(pkg_ctx, file, O_RDWR | O_CREAT | O_TRUNC, 0644, "w") -bool tree_pkg_vdb_eat(tree_pkg_ctx *pkg_ctx, const char *file, char **bufptr, size_t *buflen); tree_pkg_meta *tree_pkg_read(tree_pkg_ctx *pkg_ctx); void tree_close_meta(tree_pkg_meta *cache); char *tree_pkg_meta_get_int(tree_pkg_ctx *pkg_ctx, size_t offset, const char *key); diff --git a/qfile.c b/qfile.c index 0b01061..3036be0 100644 --- a/qfile.c +++ b/qfile.c @@ -160,7 +160,8 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv) struct qfile_opt_state *state = priv; const char *catname = pkg_ctx->cat_ctx->name; qfile_args_t *args = &state->args; - FILE *fp; + char *line; + char *savep; const char *base; depend_atom *atom = NULL; int i; @@ -196,16 +197,16 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv) } dont_skip_pkg: /* End of the package exclusion tests. */ - fp = tree_pkg_vdb_fopenat_ro(pkg_ctx, "CONTENTS"); - if (fp == NULL) + line = tree_pkg_meta_get(pkg_ctx, CONTENTS); + if (line == NULL) goto qlist_done; /* Run through CONTENTS file */ - while (getline(&state->buf, &state->buflen, fp) != -1) { + for (; (line = strtok_r(line, "\n", &savep)) != NULL; line = NULL) { size_t dirname_len; contents_entry *e; - e = contents_parse_line(state->buf); + e = contents_parse_line(line); if (!e) continue; @@ -314,7 +315,6 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv) found++; } } - fclose(fp); qlist_done: return found; diff --git a/qsize.c b/qsize.c index 617b50b..a25ce78 100644 --- a/qsize.c +++ b/qsize.c @@ -93,9 +93,6 @@ struct qsize_opt_state { const char *fmt; bool need_full_atom:1; - size_t buflen; - char *buf; - size_t num_all_files, num_all_nonfiles, num_all_ignored; uint64_t num_all_bytes; }; @@ -106,28 +103,30 @@ qsize_cb(tree_pkg_ctx *pkg_ctx, void *priv) struct qsize_opt_state *state = priv; size_t i; depend_atom *atom; - FILE *fp; + char *line; + char *savep; size_t num_files, num_nonfiles, num_ignored; uint64_t num_bytes; - if ((fp = tree_pkg_vdb_fopenat_ro(pkg_ctx, "CONTENTS")) == NULL) + if ((line = tree_pkg_meta_get(pkg_ctx, CONTENTS)) == NULL) return EXIT_SUCCESS; num_ignored = num_files = num_nonfiles = num_bytes = 0; - while (getline(&state->buf, &state->buflen, fp) != -1) { + for (; (line = strtok_r(line, "\n", &savep)) != NULL; line = NULL) { contents_entry *e; regex_t *regex; int ok = 0; - e = contents_parse_line(state->buf); + e = contents_parse_line(line); if (!e) continue; - array_for_each(state->ignore_regexp, i, regex) - if (!regexec(regex, state->buf, 0, NULL, 0)) { - num_ignored += 1; + array_for_each(state->ignore_regexp, i, regex) { + if (!regexec(regex, e->name, 0, NULL, 0)) { + num_ignored++; ok = 1; } + } if (ok) continue; @@ -141,7 +140,6 @@ qsize_cb(tree_pkg_ctx *pkg_ctx, void *priv) } else ++num_nonfiles; } - fclose(fp); state->num_all_bytes += num_bytes; state->num_all_files += num_files; state->num_all_nonfiles += num_nonfiles; @@ -227,9 +225,6 @@ int qsize_main(int argc, char **argv) state.fmt = "%[CATEGORY]%[PN]"; } - state.buflen = _Q_PATH_MAX; - state.buf = xmalloc(state.buflen); - vdb = tree_open_vdb(portroot, portvdb); if (vdb != NULL) { if (array_cnt(atoms) > 0) { @@ -257,7 +252,6 @@ int qsize_main(int argc, char **argv) atom_implode(atom); xarrayfree_int(state.atoms); xarrayfree(state.ignore_regexp); - free(state.buf); return ret; }