On Sun, Jul 28, 2019 at 10:23 AM Lassi Kortela <xxxxxx@lassi.io> wrote:

It's probably best to provide dumb wrappers.

I agree, and both Olin and I have adhered to this principle within reason, only removing obvious footguns like the errno variable.
> I'm certainly
> being tempted to crib more than I should from the POSIX document,

Crib away, that's what it's for.  I wouldn't worry about copyright legalisms.
* Call count = getgroups(0, NULL) to get the actual count.
* Then call getgroups(count, gid_array);

I prefer this strategy.
> Plus an inability to pass an array of two timespec structs to set file
> times to nanosecond precision, the argument type (array (struct
> timespec) 2) doesn't do the right thing:

Probably just adding a type two-timespecs would do it. 

John Cowan          http://vrici.lojban.org/~cowan        xxxxxx@ccil.org
The whole of Gaul is quartered into three halves.
        --Julius Caesar