commit: 85f864f7f3236823b63c3087a8c7316abc50695d
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Apr 18 19:58:54 2025 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Apr 18 19:58:54 2025 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=85f864f7
qfile: no point in comparing resolved to a non-resolved path in qfile_cb
When ROOT is given, the entries from VDB are always resolved, so no
point in comparing against a non-resolved path.
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
qfile.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/qfile.c b/qfile.c
index 7fe2685..084ead0 100644
--- a/qfile.c
+++ b/qfile.c
@@ -166,11 +166,10 @@ 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;
- char *real_root = state->real_root;
qfile_args_t *args = &state->args;
qfile_str_len_t *base_names = args->basenames;
qfile_str_len_t *dir_names = args->dirnames;
- qfile_str_len_t *real_dir_names = args->dirnames;
+ qfile_str_len_t *real_dir_names = args->realdirnames;
short *non_orphans = args->non_orphans;
int *results = args->results;
char *line;
@@ -239,23 +238,22 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv)
path_ok = false;
- if (dir_names[i].len > 0 &&
- dir_names[i].len == dirname_len &&
+ if (dir_names[i].len == dirname_len &&
memcmp(e->name, dir_names[i].str,
dir_names[i].len) == 0)
{
/* dir_name == dirname(CONTENTS) */
path_ok = true;
- } else if (real_dir_names[i].len > 0 &&
- real_dir_names[i].len == dirname_len
&&
+ } else if (real_dir_names[i].len == dirname_len &&
memcmp(e->name,
real_dir_names[i].str,
real_dir_names[i].len) == 0)
{
/* real_dir_name == dirname(CONTENTS) */
path_ok = true;
- } else if (real_root[0]) {
+ } else if (state->real_root_len > 0) {
char rpath[_Q_PATH_MAX + 1];
char *_rpath;
char fullpath[_Q_PATH_MAX + 1];
+ char *real_root = state->real_root;
size_t real_root_len = state->real_root_len;
snprintf(fullpath, sizeof(fullpath), "%s%s",
@@ -275,6 +273,7 @@ static int qfile_cb(tree_pkg_ctx *pkg_ctx, void *priv)
warn("Real path of \"%s\" is
not under ROOT: %s",
fullpath,
rpath);
} else if (dir_names[i].len > 0 &&
+ real_dir_names[i].len == 0 &&
strcmp(_rpath, dir_names[i].str) ==
0) {
/* dir_name ==
realpath(dirname(CONTENTS)) */
path_ok = true;
@@ -444,7 +443,7 @@ prepare_qfile_args(const int argc, const char **argv,
struct qfile_opt_state *st
tmppath, abspath);
goto skip_query_item;
}
- if (strcmp(dirnames[i].str, abspath + real_root_len))
+ if (strcmp(dirnames[i].str, abspath + real_root_len) !=
0)
{
realdirnames[i].str = xstrdup(abspath +
real_root_len);
realdirnames[i].len =
strlen(realdirnames[i].str);
@@ -567,12 +566,13 @@ int qfile_main(int argc, char **argv)
state.pwd = xstrdup(state.pwd);
if (state.pwd[lastc] == '/')
state.pwd[lastc] = '\0';
+ state.pwd_len = strlen(state.pwd);
}
/* Get realpath of $ROOT, with no trailing slash */
if (portroot[0] == '/')
p = realpath(portroot, NULL);
- else if (state.pwd) {
+ else if (state.pwd_len > 0) {
snprintf(state.buf, state.buflen, "%s/%s", state.pwd, portroot);
p = realpath(state.buf, NULL);
} else