From d7467e98be78830c721bbecc66399762b02166a6 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Fri, 3 Jan 2014 18:20:15 +0100 Subject: [PATCH] Move the declaration of the DIR structure into its own header. --- libc/dirent/dir.cpp | 1 + libc/dirent/fddir-sortix.cpp | 1 + libc/include/DIR.h | 69 ++++++++++++++++++++++++++++++++++++ libc/include/dirent.h | 28 ++++----------- 4 files changed, 77 insertions(+), 22 deletions(-) create mode 100644 libc/include/DIR.h diff --git a/libc/dirent/dir.cpp b/libc/dirent/dir.cpp index dda2cd91..f04a7216 100644 --- a/libc/dirent/dir.cpp +++ b/libc/dirent/dir.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include diff --git a/libc/dirent/fddir-sortix.cpp b/libc/dirent/fddir-sortix.cpp index f15e655e..62c57bf2 100644 --- a/libc/dirent/fddir-sortix.cpp +++ b/libc/dirent/fddir-sortix.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include #include diff --git a/libc/include/DIR.h b/libc/include/DIR.h new file mode 100644 index 00000000..0d265f11 --- /dev/null +++ b/libc/include/DIR.h @@ -0,0 +1,69 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + DIR.h + The DIR structure from + +*******************************************************************************/ + +#ifndef INCLUDE_DIR_H +#define INCLUDE_DIR_H + +#include + +#include + +__BEGIN_DECLS + +#ifndef __size_t_defined +#define __size_t_defined +#define __need_size_t +#include +#endif + +struct dirent; + +#ifndef __DIR_defined +#define __DIR_defined +typedef struct DIR DIR; +#endif + +#define _DIR_REGISTERED (1<<0) +#define _DIR_ERROR (1<<1) +#define _DIR_EOF (1<<2) + +struct DIR +{ + void* user; + int (*read_func)(void* user, struct dirent* dirent, size_t* size); + int (*rewind_func)(void* user); + int (*fd_func)(void* user); + int (*close_func)(void* user); + void (*free_func)(DIR* dir); + /* Application writers shouldn't use anything beyond this point. */ + DIR* prev; + DIR* next; + struct dirent* entry; + size_t entrysize; + int flags; +}; + +__END_DECLS + +#endif diff --git a/libc/include/dirent.h b/libc/include/dirent.h index 9ac7c364..1710cab8 100644 --- a/libc/include/dirent.h +++ b/libc/include/dirent.h @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013. + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2013, 2014. This file is part of the Sortix C Library. @@ -44,26 +44,7 @@ typedef __ino_t ino_t; #ifndef __DIR_defined #define __DIR_defined -struct dirent; - -#define _DIR_REGISTERED (1<<0) -#define _DIR_ERROR (1<<1) -#define _DIR_EOF (1<<2) -typedef struct _DIR -{ - void* user; - int (*read_func)(void* user, struct dirent* dirent, size_t* size); - int (*rewind_func)(void* user); - int (*fd_func)(void* user); - int (*close_func)(void* user); - void (*free_func)(struct _DIR* dir); - /* Application writers shouldn't use anything beyond this point. */ - struct _DIR* prev; - struct _DIR* next; - struct dirent* entry; - size_t entrysize; - int flags; -} DIR; +typedef struct DIR DIR; #endif struct dirent @@ -76,7 +57,7 @@ struct dirent #undef _DIRENT_HAVE_D_NAMLEN #define _DIRENT_HAVE_D_RECLEN #define _DIRENT_HAVE_D_OFF -#undef _DIRENT_HAVE_D_TYPE +#undef _DIRENT_HAVE_D_TYPE #define _D_EXACT_NAMLEN(d) ((d)->d_reclen - __builtin_offsetof(struct dirent, d_name) - 1) #define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN(d) + 1) @@ -87,9 +68,12 @@ int dirfd(DIR* dir); DIR* fdopendir(int fd); DIR* opendir(const char* path); struct dirent* readdir(DIR* dir); +/* TODO: readdir_r */ void rewinddir(DIR* dir); int scandir(const char*, struct dirent***, int (*)(const struct dirent*), int (*)(const struct dirent**, const struct dirent**)); +/* TODO: seekdir */ +/* TODO: telldir */ int versionsort(const struct dirent**, const struct dirent**); #if defined(_SORTIX_SOURCE)