On Tue, 26 Sept 2023 at 16:19, Florian Weimer <fweimer@xxxxxxxxxx> wrote: > getdents gets away with this buffer size because applications can copy > out all the data from struct dirent if they need long-term storage. > They have to do that because the usual readdir interface overwrites the > buffer, potentially at the next readdir call. This means the buffer > size does not introduce an amount of memory fragmention that is > dependent on the directory size. > > With an opaque, pointer-carrying struct, copying out the data is not > possible in a generic fashion. Only the parts that the application > knows about can be copied out. So I think it's desirable to have a > fairly exact allocation. Okay, so let's add a 'size' field to the struct, which is set to the size used (as opposed to the size of the buffer). That should solve copying without wasting a single byte of memory. Otherwise the format is fully copyable, since the strings are denoted with an offset, which doesn't change after the buffer is copied. Thanks, Miklos