Cygwin: implement dirent.d_reclen
This change is in preparation of adding posix_getdents() from the upcoming POSIX Base Specification Issue 8. - Add d_reclen - Add GLibC compatible test macros for dirent members - Bump dirent version - Set d_reclen to the fixed size of the dirent struct We can do that because the size is a multiple of 8, so it fits snugly in the buffer filled by posix_getdents and keep the alignement. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
cd260e4daa
commit
7e40e0169a
|
@ -103,6 +103,7 @@ readdir_worker (DIR *dir, dirent *de)
|
|||
|
||||
de->d_ino = 0;
|
||||
de->d_type = DT_UNKNOWN;
|
||||
de->d_reclen = sizeof *de;
|
||||
memset (&de->__d_unused1, 0, sizeof (de->__d_unused1));
|
||||
|
||||
res = ((fhandler_base *) dir->__fh)->readdir (dir, de);
|
||||
|
|
|
@ -486,12 +486,13 @@ details. */
|
|||
349: Add fallocate.
|
||||
350: Add close_range.
|
||||
351: Add getlocalename_l.
|
||||
352: Implement dirent.d_reclen.
|
||||
|
||||
Note that we forgot to bump the api for ualarm, strtoll, strtoull,
|
||||
sigaltstack, sethostname. */
|
||||
|
||||
#define CYGWIN_VERSION_API_MAJOR 0
|
||||
#define CYGWIN_VERSION_API_MINOR 351
|
||||
#define CYGWIN_VERSION_API_MINOR 352
|
||||
|
||||
/* There is also a compatibity version number associated with the shared memory
|
||||
regions. It is incremented when incompatible changes are made to the shared
|
||||
|
|
|
@ -13,17 +13,30 @@
|
|||
#include <sys/types.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define __DIRENT_VERSION 2
|
||||
#define __DIRENT_VERSION 3
|
||||
|
||||
/* Testing macros as per GLibC:
|
||||
_DIRENT_HAVE_D_NAMLEN == dirent has a d_namlen member
|
||||
_DIRENT_HAVE_D_OFF == dirent has a d_off member
|
||||
_DIRENT_HAVE_D_RECLEN == dirent has a d_reclen member
|
||||
_DIRENT_HAVE_D_TYPE == dirent has a d_type member
|
||||
*/
|
||||
#undef _DIRENT_HAVE_D_NAMLEN
|
||||
#undef _DIRENT_HAVE_D_OFF
|
||||
#define _DIRENT_HAVE_D_RECLEN
|
||||
#define _DIRENT_HAVE_D_TYPE
|
||||
|
||||
struct dirent
|
||||
{
|
||||
uint32_t __d_version; /* Used internally */
|
||||
ino_t d_ino;
|
||||
unsigned char d_type;
|
||||
unsigned char __d_unused1[3];
|
||||
__uint32_t __d_internal1;
|
||||
char d_name[NAME_MAX + 1];
|
||||
__uint32_t __d_version; /* Used internally */
|
||||
ino_t d_ino;
|
||||
unsigned char d_type;
|
||||
unsigned char __d_unused1[1];
|
||||
__uint16_t d_reclen;
|
||||
__uint32_t __d_internal1;
|
||||
char d_name[NAME_MAX + 1];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#define d_fileno d_ino /* BSD compatible definition */
|
||||
|
|
Loading…
Reference in New Issue