commit: 3d4a141fd4bf94190f9e453304d68b965df85633
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 22 18:17:20 2016 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Mon Feb 22 18:17:20 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=3d4a141f
qsize: clean up stat logic a bit
By using the *at style func, we can avoid the fixed static buffer
and doing a string copy all the time.
qsize.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/qsize.c b/qsize.c
index b9f3afb..2df2fce 100644
--- a/qsize.c
+++ b/qsize.c
@@ -37,7 +37,6 @@ int qsize_main(int argc, char **argv)
q_vdb_cat_ctx *cat_ctx;
q_vdb_pkg_ctx *pkg_ctx;
size_t i;
- struct stat st;
char fs_size = 0, summary = 0, summary_only = 0;
size_t num_all_files, num_all_nonfiles, num_all_ignored;
size_t num_files, num_nonfiles, num_ignored;
@@ -46,7 +45,6 @@ int qsize_main(int argc, char **argv)
const char *str_disp_units = NULL;
size_t buflen;
char *buf;
- char filename[_Q_PATH_MAX], *filename_root;
depend_atom *atom;
DECLARE_ARRAY(atoms);
DECLARE_ARRAY(ignore_regexp);
@@ -81,8 +79,6 @@ int qsize_main(int argc, char **argv)
num_all_bytes = num_all_files = num_all_nonfiles = num_all_ignored = 0;
- strcpy(filename, portroot);
- filename_root = filename + strlen(filename);
buflen = _Q_PATH_MAX;
buf = xmalloc(buflen);
@@ -138,9 +134,9 @@ int qsize_main(int argc, char **argv)
continue;
if (e->type == CONTENTS_OBJ || e->type ==
CONTENTS_SYM) {
- strcpy(filename_root, e->name);
+ struct stat st;
++num_files;
- if (!lstat(filename, &st))
+ if (!fstatat(ctx->portroot_fd, e->name
+ 1, &st, AT_SYMLINK_NOFOLLOW))
num_bytes += (fs_size ?
st.st_blocks * S_BLKSIZE : st.st_size);
} else
++num_nonfiles;