[Toybox] [PATCH] New toy - rm

Georgi Chorbadzhiyski gf at unixsol.org
Sat Mar 17 01:49:48 PDT 2012


On 15.3.2012 г. 05:12, Rob Landley wrote:
> On 03/12/2012 08:34 AM, Georgi Chorbadzhiyski wrote:
>> I have used fts functions. They are implemented in glibc, uclibc, bionic and BSDs.
>> Unfortunately they are not implemented in musl. The fts usage is very simple and
>> probably can be replaced by local traversing function which traverses the files
>> and then directories in reverse order.
>
> Hmmm... interesting.
>
> I've now got three different traversal functions in the tree, the
> dirtree stuff based on readdir(), the ls stuff based on scandir, and
> this.  (Plus you've got a pending patch in here redoing chunks of
> dirtree...)
>
> I need to work out, at a design level, what the right thing is, and
> change everything to use it.
>
> The fts stuff is interesting, especially since it's already written so
> we get most of it for free.  But googling for it turns up a lot of
> accidental memory exhaustion issues from failure to scale to large
> directories.  Accidentally creating a large directory and then being
> unable to rm -rf the sucker is a bad thing.
>
> I think those can be avoided by using fts_read() instead of
> fts_children(), but I'm not really sure.  The lifetime rules for these
> objects are implicit, not clearly stated.
>
> Another issue is that it always creates an absolute path from root.  If
> you request a whole tree (such as for tar), that's a potentially very
> large memory requirement. (And fts_cycle is kinda creepy.)
>
> Still, "this is already in libc" is a pretty powerful argument...
>
> Lemme get back to this one.

There is another problem with fts funcs. I have to add #undef __USE_FILE_OFFSET64
in order to get them to compile with my glibc.

-- 
Georgi Chorbadzhiyski
http://georgi.unixsol.org/



More information about the Toybox mailing list