aboutsummaryrefslogtreecommitdiff
path: root/lib/dirtree.c
AgeCommit message (Collapse)Author
2020-10-15Nitpicky cleanup.Rob Landley
We need to *name = 0 explicitly for the !name && !statless case, so don't need the +1 in memset that was only zeroing in the !name && statless case.
2020-10-15dirtree_path: always honor size request.Elliott Hughes
tar asks dirtree_path() to reserve space for a trailing '/', but recent changes broke that for the case that was resolving to just a strdup(). Caught by `export ASAN=1` and `make test_tar`.
2020-10-12Fix bug introduced last commit: the if (name) else case needs to zero it.Rob Landley
2020-10-11toysh: more variable/wildcard plumbing and tests.Rob Landley
2020-10-06The non-recursive dirtree_path wasn't stripping a trailing / from initial path.Rob Landley
2020-10-03Return empty string for dirtree_path() of "" (instead of NULL).Rob Landley
2020-10-03Non-recursive dirtree_path() needs to return start of allocationRob Landley
when passed in extra allocation length or else free() gets very unhappy.
2020-09-26Teach dirtree that top level "" node is "." but not show in dirtree_path().Rob Landley
2019-12-14dirtree.c: avoid spurious EINVAL warnings.Elliott Hughes
An Android engineer complained that they were seeing this when not running as root: $ adb shell ls ls: ./postinstall: Invalid argument ls: ./init: Permission denied ls: ./data_mirror: Invalid argument ls: ./init.environ.rc: Invalid argument ls: ./metadata: Invalid argument acct adb_keys apex From strace, it was here: newfstatat(4, "adb_keys", 0x7fc67eca88, AT_SYMLINK_NOFOLLOW) = -1 EACCES (Permission denied) readlinkat(4, "adb_keys", 0x5e843c7720, 4095) = -1 EINVAL (Invalid argument) So stop looking at st.st_mode (and then deciding to do a readlinkat()) if we didn't actually successfully stat().
2019-11-23Elliott pointed out a codepath that could use uninitialized data.Rob Landley
(If DIRTREE_SYMFOLLOW returns ENOENT, skipping the second fstatat() would also skip the else goto error)
2019-10-29Let "find -L -type -l" find dangling symlinks.Rob Landley
2019-08-26Try to make ls failure more graceful. Print ? ? ? entries instead of error msg.Rob Landley
Tweak DIRTREE_STATLESS so it returns zero stat for any error (I'm testing that dev, ino, and blksize are all zero), and fill in file type from readdir()
2019-08-09find: fix dangling symlink behavior.Elliott Hughes
ENOENT is ignored, but other errors are reported.
2019-06-20The O_PATH breaks stuff, have to work around Android's selinux rules for /Rob Landley
some other way.
2019-06-11Add DIRTREE_STATLESS to return entries we couldn't stat().Rob Landley
Sets ->again |= 2 when that happens and ->st is zeroed. While we're there, don't memset(st) and then memcpy(st) over it, and use O_PATH in the open().
2018-10-27Dirtree shouldn't put a "No" in front of filename for "permission denied".Rob Landley
2016-12-08Add DIRTREE_PROC to skip non-numeric entries and make ps/top etc use it.Rob Landley
2016-11-21Have dirtree_notdotdot() pass through !node->parent so . and .. on the commandRob Landley
line aren't filtered out. Audited all the callers and removed redundant calls, adjusted call sequence, etc. (And let rm _not_ do this, because posix.)
2016-04-21Have dirtree_recurse() take the new dirfd as an argument.Rob Landley
2016-03-07Cleanup pass on the dirtree infrastructure, in preparation for making rm -rRob Landley
handle infinite depth. Fix docs, tweak dirtree_handle_callback() semantics, remove dirtree_start() and don't export dirtree_handle_callback(), instead offer dirtree_flagread(). (dirtree_read() is a wrapper around dirtree_flagread passing 0 for flags.)
2015-12-06Rename dirtree->data to dirfd, and don't store symlink length in it.Rob Landley
2015-05-09Add DIRTREE_SHUTUP to disable dirtree warnings if file vanishes out fromRob Landley
under traversal. Pass through full flag set in dirtree_add_node(), add dirtree_start() wrapper to provide symlink-only behavior (avoiding a lot of DIRTREE_SYMFOLLOW*!!(logic) repeated in callers).
2014-09-22Respond to two static analysis issues in dirtree_path() reported by Ashwini ↵Rob Landley
Sharma. dirtree->name is an array, not a pointer, so can't be zero. Remove the test. We dereference plen without checking it for null but calling dirtree_path(0, 0) is pilot error: only the _first_ call can have plen = 0. Add a comment.
2014-07-29Actually set the again flag when calling the dirtree comeagain callback.Rob Landley
2014-07-26Move DIRTREE_COMEAGAIN second callback up to when the filehandle is still ↵Rob Landley
open, and add dir->again variable to distinguish second call instead of checking for -1 filehandle.
2014-07-26Default xcreate/xopen to O_CLOEXEC. (Pass O_CLOEXEC in the flags to switch ↵Rob Landley
it back off.) This way we're not leaking filehandles to children from things like find -exec.
2014-07-21Fix memory leak in error path.Rob Landley
2013-07-06This inlines CRC64, and nothing more.Isaac Dunham
The functions involved were called only once.
2012-12-31Make dirtree_handle_callback() start with dirtree_ like the rest of the ↵Rob Landley
dirtree functions.
2012-12-08Complicate the rm -i behavior to do what posix specifies.Rob Landley
2012-12-06Have dirtree_add_node() set parent so error message can provide full path.Rob Landley
2012-11-13Reindent to two spaces per level. Remove vi: directives that haven't worked ↵Rob Landley
right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style. The actual code should be the same afterward, this is just cosmetic refactoring.
2012-07-18Only add / in dirtree_path if it hasn't already got one, spotted by Ashwini ↵Rob Landley
Sharma.
2012-06-24Unify chown and chgrp, add support for -hHLP flags.0.3.1Rob Landley
2012-06-16Add dirtree_parentfd()Rob Landley
2012-06-09Implement DIRTREE_SYMFOLLOW and ls -cSHL.Rob Landley
2012-06-01Changed my mind about the design again, now callback is dirtree_opennode() ↵Rob Landley
and recursion choice is how caller interprets flags.
2012-06-01Factor out dirtree_comeagain() callback, setting up depth-first search with ↵Rob Landley
open filehandle in node->extra.
2012-05-27Update chgrp so -R works, tweaking DIRTREE_COMEAGAIN design along the way.Rob Landley
2012-05-20dirtree logic cleanup: switch DIRTREE_NORECURSE and DIRTREE_NOSAVE to ↵Rob Landley
DIRTREE_RECURSE and DIRTREE_SAVE.
2012-05-09Whitespace (tabs vs spaces) cleanup.Rob Landley
2012-04-22More work on ls. Now ls -lR sort of works-ish.Rob Landley
2012-04-14Rewrite dirtree so we don't need readdir, scandir, and fts.h. Rewrite ls ↵Rob Landley
(from scratch) to use new dirtree infrastructure. (This breaks everything else that currently uses dirtree.)
2008-11-12Work around a reiserfs bug. (One line change, switch from looking at broken ↵Rob Landley
struct dirent->dt_type to looking at stat() output. The rest are unrelated variable renames.)
2008-05-12Update mdev to work around the newest sysfs api breakage in the 2.6.25 kernel.Rob Landley
(Yeah, I know sysfs hasn't actually got an API, but I like to pretend...)
2008-03-24If we don't remember to closedir(), the leaked filehandles add up.Rob Landley
2008-02-21Make cp pass most of its test suite. Still need to add symlink support.Rob Landley
2008-02-20Add first pass at cp, totally untested, unlikely to work yet. :)Rob Landley
2008-02-16Dirtree needs to use lstat(), not stat. And failure should probably be aRob Landley
warning rather than an error (it means the directory tree is changing out from under it, but only the user knows if that's fatal).
2007-11-15Remove trailing whitespace (thanks to Charlie Shepherd), and a couple commentRob Landley
tweaks.