1 /* Copyright (C) 1993-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 #ifndef _DIRSTREAM_H 19 #define _DIRSTREAM_H 1 20 21 #include <sys/types.h> 22 23 #include <libc-lock.h> 24 25 /* Directory stream type. 26 27 The miscellaneous Unix `readdir' implementations read directory data 28 into a buffer and return `struct dirent *' pointers into it. */ 29 30 struct __dirstream 31 { 32 int fd; /* File descriptor. */ 33 34 __libc_lock_define (, lock) /* Mutex lock for this structure. */ 35 36 size_t allocation; /* Space allocated for the block. */ 37 size_t size; /* Total valid data in the block. */ 38 size_t offset; /* Current offset into the block. */ 39 40 off_t filepos; /* Position of next entry to read. */ 41 42 int errcode; /* Delayed error code. */ 43 44 /* Directory block. We must make sure that this block starts 45 at an address that is aligned adequately enough to store 46 dirent entries. Using the alignment of "void *" is not 47 sufficient because dirents on 32-bit platforms can require 48 64-bit alignment. We use "long double" here to be consistent 49 with what malloc uses. */ 50 char data[0] __attribute__ ((aligned (__alignof__ (long double)))); 51 }; 52 53 #define _DIR_dirfd(dirp) ((dirp)->fd) 54 55 #endif /* dirstream.h */ 56