aboutsummaryrefslogtreecommitdiff
path: root/lib/dirtree.c
AgeCommit message (Collapse)Author
2021-07-08Work around a posix violation in the croups filesystem that LTP requires.Rob Landley
Posix says you removing a non-empty directory "shall fail" in both: https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/functions/unlinkat.html https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/functions/rmdir.html So toybox mv went ahead and unlinked the directory even if the contents hadn't all been deleted because posix guarantees it to be harmless. But cgroups (https://lwn.net/Articles/679786/) deletes the non-empty directory, thus the Linux Test Project's cgroups_fj_function test6 was failing with toybox mv because they depend on not triggering the posix violating behavior. Work around it by having mv DIRTREE_SAVE failing nodes and then check for a non-empty ->child in the COMEAGAIN as a signal not to unlink the dir. While I'm there do some code cleanup, add a cp -i test...
2021-02-07Add lots of "static" annotations, make a couple things use FLAG() macros, etc.Rob Landley
2020-10-15Three trivial code cleanups and a comment tweak.Rob Landley
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