X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/59e0d9fe772464b93d835d2a2964457702469a43..6465356a983ac139f81d3b7913cdb548477c346c:/include/dirent.h diff --git a/include/dirent.h b/include/dirent.h index b31e1cb..b52baae 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -1,10 +1,8 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000, 2002-2008 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. - * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -61,37 +59,33 @@ #define _DIRENT_H_ /* - * The kernel defines the format of directory entries returned by - * the getdirentries(2) system call. + * The kernel defines the format of directory entries */ #include <_types.h> #include +#include +#include -#ifdef _POSIX_SOURCE -typedef void * DIR; -#else -#include - -/* definitions for library routines operating on directories. */ -#define DIRBLKSIZ 1024 - -struct _telldir; /* see telldir.h */ +struct _telldir; /* forward reference */ /* structure describing an open directory. */ -typedef struct _dirdesc { - int dd_fd; /* file descriptor associated with directory */ - long dd_loc; /* offset in current buffer */ - long dd_size; /* amount of data returned by getdirentries */ - char *dd_buf; /* data buffer */ - int dd_len; /* size of data buffer */ - long dd_seek; /* magic cookie returned by getdirentries */ - long dd_rewind; /* magic cookie for rewinding */ - int dd_flags; /* flags for readdir */ - pthread_mutex_t dd_lock; /* for thread locking */ - struct _telldir *dd_td; /* telldir position recording */ +typedef struct { + int __dd_fd; /* file descriptor associated with directory */ + long __dd_loc; /* offset in current buffer */ + long __dd_size; /* amount of data returned */ + char *__dd_buf; /* data buffer */ + int __dd_len; /* size of data buffer */ + long __dd_seek; /* magic cookie returned */ + long __dd_rewind; /* magic cookie for rewinding */ + int __dd_flags; /* flags for readdir */ + __darwin_pthread_mutex_t __dd_lock; /* for thread locking */ + struct _telldir *__dd_td; /* telldir position recording */ } DIR; -#define dirfd(dirp) ((dirp)->dd_fd) +#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL + +/* definitions for library routines operating on directories. */ +#define DIRBLKSIZ 1024 /* flags for opendir2 */ #define DTF_HIDEW 0x0001 /* hide whiteout entries */ @@ -99,38 +93,138 @@ typedef struct _dirdesc { #define DTF_REWIND 0x0004 /* rewind after reading union stack */ #define __DTF_READALL 0x0008 /* everything has been read */ -#ifndef NULL -#define NULL __OSX_NULL -#endif /* ! NULL */ - -#endif /* ! _POSIX_SOURCE */ +#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */ #ifndef KERNEL -#include +__BEGIN_DECLS + +//Begin-Libc +#ifndef LIBC_ALIAS_CLOSEDIR +//End-Libc +int closedir(DIR *) __DARWIN_ALIAS(closedir); +//Begin-Libc +#else /* LIBC_ALIAS_CLOSEDIR */ +int closedir(DIR *) LIBC_ALIAS(closedir); +#endif /* !LIBC_ALIAS_CLOSEDIR */ +//End-Libc + +//Begin-Libc +#ifndef LIBC_ALIAS_OPENDIR +//End-Libc +DIR *opendir(const char *) __DARWIN_ALIAS_I(opendir); +//Begin-Libc +#else /* LIBC_ALIAS_OPENDIR */ +DIR *opendir(const char *) LIBC_ALIAS_I(opendir); +#endif /* !LIBC_ALIAS_OPENDIR */ +//End-Libc +struct dirent *readdir(DIR *) __DARWIN_INODE64(readdir); +int readdir_r(DIR *, struct dirent *, struct dirent **) __DARWIN_INODE64(readdir_r); + +//Begin-Libc +#ifndef LIBC_ALIAS_REWINDDIR +//End-Libc +void rewinddir(DIR *) __DARWIN_ALIAS_I(rewinddir); +//Begin-Libc +#else /* LIBC_ALIAS_REWINDDIR */ +void rewinddir(DIR *) LIBC_ALIAS_I(rewinddir); +#endif /* !LIBC_ALIAS_REWINDDIR */ +//End-Libc + +//Begin-Libc +#ifndef LIBC_ALIAS_SEEKDIR +//End-Libc +void seekdir(DIR *, long) __DARWIN_ALIAS_I(seekdir); +//Begin-Libc +#else /* LIBC_ALIAS_SEEKDIR */ +void seekdir(DIR *, long) LIBC_ALIAS_I(seekdir); +#endif /* !LIBC_ALIAS_SEEKDIR */ +//End-Libc + +//Begin-Libc +#ifndef LIBC_ALIAS_TELLDIR +//End-Libc +long telldir(DIR *) __DARWIN_ALIAS_I(telldir); +//Begin-Libc +#else /* LIBC_ALIAS_TELLDIR */ +long telldir(DIR *) LIBC_ALIAS_I(telldir); +#endif /* !LIBC_ALIAS_TELLDIR */ +//End-Libc + +__END_DECLS + + +/* Additional functionality provided by: + * POSIX.1-2008 + */ + +#if __DARWIN_C_LEVEL >= 200809L __BEGIN_DECLS -#ifndef _POSIX_SOURCE -int alphasort(const void *, const void *); -#endif /* not POSIX */ -int closedir(DIR *); -#ifndef _POSIX_SOURCE -int getdirentries(int, char *, int, long *); -#endif /* not POSIX */ -DIR *opendir(const char *); -#ifndef _POSIX_SOURCE -DIR *__opendir2(const char *, int); -#endif /* not POSIX */ -struct dirent *readdir(DIR *); -int readdir_r(DIR *, struct dirent *, struct dirent **); -void rewinddir(DIR *); -#ifndef _POSIX_SOURCE + +int alphasort(const struct dirent **, const struct dirent **) __DARWIN_INODE64(alphasort); + +#if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8) || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0) +#include +#include +#define dirfd(dirp) ({ \ + DIR *_dirp = (dirp); \ + int ret = -1; \ + if (_dirp == NULL || _dirp->__dd_fd < 0) \ + errno = EINVAL; \ + else \ + ret = _dirp->__dd_fd; \ + ret; \ +}) +#else +int dirfd(DIR *dirp) __OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0); +#endif + int scandir(const char *, struct dirent ***, - int (*)(struct dirent *), int (*)(const void *, const void *)); -#endif /* not POSIX */ -void seekdir(DIR *, long); -long telldir(DIR *); + int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **)) __DARWIN_INODE64(scandir); +#ifdef __BLOCKS__ +int scandir_b(const char *, struct dirent ***, + int (^)(const struct dirent *), int (^)(const struct dirent **, const struct dirent **)) __DARWIN_INODE64(scandir_b) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2); +#endif /* __BLOCKS__ */ + +__END_DECLS +#endif /* __DARWIN_C_LEVEL >= 200809L */ + + +#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL +__BEGIN_DECLS + +int getdirentries(int, char *, int, long *) + +//Begin-Libc +#ifndef __LIBC__ +//End-Libc +#if __DARWIN_64_BIT_INO_T +/* + * getdirentries() doesn't work when 64-bit inodes is in effect, so we + * generate a link error. + */ + __asm("_getdirentries_is_not_available_when_64_bit_inodes_are_in_effect") +#else /* !__DARWIN_64_BIT_INO_T */ + __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_6, __IPHONE_2_0,__IPHONE_2_0) +#endif /* __DARWIN_64_BIT_INO_T */ +//Begin-Libc +#endif /* !__LIBC__ */ +//End-Libc +; + +//Begin-Libc +#ifndef LIBC_ALIAS___OPENDIR2 +//End-Libc +DIR *__opendir2(const char *, int) __DARWIN_ALIAS_I(__opendir2); +//Begin-Libc +#else /* LIBC_ALIAS___OPENDIR2 */ +DIR *__opendir2(const char *, int) LIBC_ALIAS_I(__opendir2); +#endif /* !LIBC_ALIAS___OPENDIR2 */ +//End-Libc + __END_DECLS +#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */ #endif /* !KERNEL */