[Toybox] mkpathat() behavior

Rob Landley rob at landley.net
Fri May 9 02:00:12 PDT 2014


On 05/08/14 23:05, Ashwini Sharma wrote:
> Thanks for clearing the usage part of mkpathat()
> 
> regards,
> Ashwini
> 
> 
> On Wed, May 7, 2014 at 10:28 PM, Rob Landley <rob at landley.net
> <mailto:rob at landley.net>> wrote:
> 
>     On 05/07/14 04:52, Ashwini Sharma wrote:
>     > Hi Rob, list,
>     >
>     > __mkpathat()__ function doesn't create the last component in the
>     given path
>     > if (flags & 1) == 0, e.g. input path is "a/b/c" and flags = 2,
>     then __a__
>     > and __b__ are created but __c__ isn't.
> 
>     That's right. If you have a path to a directory and want to create the
>     entire thing, use flags = 3.
> 
>     If you have a path to a file and just want to create the directory
>     leading
>     up to that file (or confirm it exists and is a directory), use flags
>     = 2.
> 
>     If you want to use it as just "mkdir", flags = 1.
> 
>     Then add the verbose flag if you want it to say what it's doing.

Flags like that are always a little tricky. On the one hand, it's
compact and flexible. On the other, magic constants are bad.

I'm having that problem right now with the comma_collect()
infrastructure I'm trying to add to dd (for conv=). It's also needed by
mount, and there's something similar in umount already, so in theory
it's a good opportunity for code sharing.

But the problem is that _using_ it really wants something like:

#define COMMALIST     "error\0trunc\0fsync\0sync\0swab32\0swab\0"
#define COMMA_ERROR   1
#define COMMA_TRUNC   2
#define COMMA_FSYNC   4
#define COMMA_SYNC    8
#define COMMA_SWAB32 16
#define COMMA_SWAP   32

Which isn't necessarily an improvement to doing a non-automated version
by hand.

For the command line option parsing lib/args.c is doing, I added
automatic infrastructure to calculate FLAG_ macross to the build and
generate headers, so worrying about bit values isn't the user's problem.
For mkpathat() I just documented the bits in a comment before the
function and left combining them to the user, because there are only 3
bits to worry about.

But in between, neither approach is particularly appealing...

Rob

 1399626012.0


More information about the Toybox mailing list