diff options
| -rw-r--r-- | include/dirent.h | 18 | ||||
| -rw-r--r-- | src/dirent/posix_getdents.c | 11 | 
2 files changed, 26 insertions, 3 deletions
diff --git a/include/dirent.h b/include/dirent.h index 2d8fffb2..7fa60e06 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -9,14 +9,23 @@ extern "C" {  #define __NEED_ino_t  #define __NEED_off_t -#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)  #define __NEED_size_t -#endif +#define __NEED_ssize_t  #include <bits/alltypes.h>  #include <bits/dirent.h> +typedef unsigned short reclen_t; + +struct posix_dent { +	ino_t d_ino; +	off_t d_off; +	reclen_t d_reclen; +	unsigned char d_type; +	char d_name[]; +}; +  typedef struct __dirstream DIR;  #define d_fileno d_ino @@ -29,6 +38,8 @@ int            readdir_r(DIR *__restrict, struct dirent *__restrict, struct dire  void           rewinddir(DIR *);  int            dirfd(DIR *); +ssize_t posix_getdents(int, void *, size_t, int); +  int alphasort(const struct dirent **, const struct dirent **);  int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **)); @@ -37,7 +48,6 @@ void           seekdir(DIR *, long);  long           telldir(DIR *);  #endif -#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)  #define DT_UNKNOWN 0  #define DT_FIFO 1  #define DT_CHR 2 @@ -47,6 +57,8 @@ long           telldir(DIR *);  #define DT_LNK 10  #define DT_SOCK 12  #define DT_WHT 14 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)  #define IFTODT(x) ((x)>>12 & 017)  #define DTTOIF(x) ((x)<<12)  int getdents(int, struct dirent *, size_t); diff --git a/src/dirent/posix_getdents.c b/src/dirent/posix_getdents.c new file mode 100644 index 00000000..b19e8127 --- /dev/null +++ b/src/dirent/posix_getdents.c @@ -0,0 +1,11 @@ +#include <dirent.h> +#include <limits.h> +#include <errno.h> +#include "syscall.h" + +int posix_getdents(int fd, void *buf, size_t len, int flags) +{ +	if (flags) return __syscall_ret(-EOPNOTSUPP); +	if (len>INT_MAX) len = INT_MAX; +	return syscall(SYS_getdents, fd, buf, len); +}  | 
