diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-04-11 17:07:11 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-10-16 14:19:23 -0300 |
commit | 905ae44c77a4b899100de99360823a586e095622 (patch) | |
tree | 71d31e80c6f6cc43d062de42be37388aa91e7632 /sysdeps/unix/sysv/linux/dirstream.h | |
parent | f1ed4d4c2cb24f8f0d4f54c89847adf2bb185f50 (diff) | |
download | glibc-905ae44c77a4b899100de99360823a586e095622.tar.gz glibc-905ae44c77a4b899100de99360823a586e095622.tar.xz glibc-905ae44c77a4b899100de99360823a586e095622.zip |
linux: Move posix dir implementations to Linux
This generic implementation already expects a getdents API which is Linux specific. It also allows simplify it by assuming _DIRENT_HAVE_D_RECLEN and _DIRENT_HAVE_D_OFF support. The readdir are also expanded on each required implementation, futher fixes and improvements will make parametrize the implementation more complex. Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for all affected ABIs.
Diffstat (limited to 'sysdeps/unix/sysv/linux/dirstream.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/dirstream.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/dirstream.h b/sysdeps/unix/sysv/linux/dirstream.h new file mode 100644 index 0000000000..a3ea2b7197 --- /dev/null +++ b/sysdeps/unix/sysv/linux/dirstream.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1993-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU 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 2.1 of the License, or (at your option) any later version. + + The GNU 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 GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _DIRSTREAM_H +#define _DIRSTREAM_H 1 + +#include <sys/types.h> + +#include <libc-lock.h> + +/* Directory stream type. + + The miscellaneous Unix `readdir' implementations read directory data + into a buffer and return `struct dirent *' pointers into it. */ + +struct __dirstream + { + int fd; /* File descriptor. */ + + __libc_lock_define (, lock) /* Mutex lock for this structure. */ + + size_t allocation; /* Space allocated for the block. */ + size_t size; /* Total valid data in the block. */ + size_t offset; /* Current offset into the block. */ + + off_t filepos; /* Position of next entry to read. */ + + int errcode; /* Delayed error code. */ + + /* Directory block. We must make sure that this block starts + at an address that is aligned adequately enough to store + dirent entries. Using the alignment of "void *" is not + sufficient because dirents on 32-bit platforms can require + 64-bit alignment. We use "long double" here to be consistent + with what malloc uses. */ + char data[0] __attribute__ ((aligned (__alignof__ (long double)))); + }; + +#define _DIR_dirfd(dirp) ((dirp)->fd) + +#endif /* dirstream.h */ |