diff options
author | jilles <jilles@FreeBSD.org> | 2013-02-10 13:28:02 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2013-02-10 13:28:02 +0000 |
commit | 0c27377433985b4dd31e28d29658bcebbeb79c6e (patch) | |
tree | cc60cafdaa059a336ae072a33702fe68357eb46d /usr.bin/find | |
parent | 4633ab5d81ed486fa70c7ad4c3916eff29c31f37 (diff) | |
download | FreeBSD-src-0c27377433985b4dd31e28d29658bcebbeb79c6e.zip FreeBSD-src-0c27377433985b4dd31e28d29658bcebbeb79c6e.tar.gz |
find: In -execdir ... {} +, only pass one file per invocation.
This is inefficient but ensures that -execdir ... {} + does not mix files
from different directories in one invocation; the command could not access
some files. Files from the same directory should really be handled in one
invocation but this is somewhat more complicated.
Diffstat (limited to 'usr.bin/find')
-rw-r--r-- | usr.bin/find/function.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c index 5f8f813..4f2eba7 100644 --- a/usr.bin/find/function.c +++ b/usr.bin/find/function.c @@ -711,7 +711,13 @@ c_exec(OPTION *option, char ***argvp) for (ep = environ; *ep != NULL; ep++) argmax -= strlen(*ep) + 1 + sizeof(*ep); argmax -= 1 + sizeof(*ep); - new->e_pnummax = argmax / 16; + /* + * Ensure that -execdir ... {} + does not mix files + * from different directories in one invocation. + * Files from the same directory should be handled + * in one invocation but there is no code for it. + */ + new->e_pnummax = new->flags & F_EXECDIR ? 1 : argmax / 16; argmax -= sizeof(char *) * new->e_pnummax; if (argmax <= 0) errx(1, "no space for arguments"); |