Print this page
opendir, dirfd are in XPG7
alphasort and scandir are new in XPG7


   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 




  27 /*      Copyright (c) 1988 AT&T     */
  28 /*        All Rights Reserved   */
  29 
  30 #ifndef _DIRENT_H
  31 #define _DIRENT_H
  32 
  33 #pragma ident   "%Z%%M% %I%     %E% SMI"        /* SVr4.0 1.6.1.5   */
  34 
  35 #include <sys/feature_tests.h>
  36 
  37 #include <sys/types.h>
  38 #include <sys/dirent.h>
  39 
  40 #ifdef  __cplusplus
  41 extern "C" {
  42 #endif
  43 
  44 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
  45 
  46 #define MAXNAMLEN       512             /* maximum filename length */
  47 #define DIRBUF          8192            /* buffer size for fs-indep. dirs */
  48 
  49 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
  50 
  51 #if !defined(__XOPEN_OR_POSIX)
  52 
  53 typedef struct {
  54         int     dd_fd;          /* file descriptor */
  55         int     dd_loc;         /* offset in block */
  56         int     dd_size;        /* amount of valid data */
  57         char    *dd_buf;        /* directory block */
  58 } DIR;                          /* stream data from opendir() */
  59 
  60 
  61 #else
  62 
  63 typedef struct {
  64         int     d_fd;           /* file descriptor */
  65         int     d_loc;          /* offset in block */
  66         int     d_size;         /* amount of valid data */
  67         char    *d_buf;         /* directory block */
  68 } DIR;                          /* stream data from opendir() */
  69 
  70 #endif /* !defined(__XOPEN_OR_POSIX) */
  71 
  72 #if defined(__STDC__)
  73 
  74 /* large file compilation environment setup */
  75 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
  76 #ifdef __PRAGMA_REDEFINE_EXTNAME
  77 #pragma redefine_extname        readdir readdir64
  78 #pragma redefine_extname        scandir scandir64
  79 #pragma redefine_extname        alphasort alphasort64
  80 #else
  81 #define readdir                 readdir64
  82 #define scandir                 scandir64
  83 #define alphasort               alphasort64
  84 #endif
  85 #endif  /* _FILE_OFFSET_BITS == 64 */
  86 
  87 /* In the LP64 compilation environment, all APIs are already large file */
  88 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
  89 #ifdef __PRAGMA_REDEFINE_EXTNAME
  90 #pragma redefine_extname        readdir64       readdir
  91 #pragma redefine_extname        scandir64       scandir
  92 #pragma redefine_extname        alphasort64     alphasort
  93 #else
  94 #define readdir64               readdir
  95 #define scandir64               scandir
  96 #define alphsort64              alphasort
  97 #endif
  98 #endif  /* _LP64 && _LARGEFILE64_SOURCE */
  99 
 100 extern DIR              *opendir(const char *);
 101 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
 102         defined(_ATFILE_SOURCE)
 103 extern DIR              *fdopendir(int);
 104 extern int              dirfd(DIR *);
 105 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */
 106 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
 107 extern int              scandir(const char *, struct dirent *(*[]),

 108                                 int (*)(const struct dirent *),
 109                                 int (*)(const struct dirent **,
 110                                         const struct dirent **));
 111 extern int              alphasort(const struct dirent **,
 112                                         const struct dirent **);
 113 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */

 114 extern struct dirent    *readdir(DIR *);
 115 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || \
 116         defined(_XOPEN_SOURCE)
 117 extern long             telldir(DIR *);
 118 extern void             seekdir(DIR *, long);
 119 #endif /* defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) ... */
 120 extern void             rewinddir(DIR *);
 121 extern int              closedir(DIR *);
 122 
 123 /* transitional large file interface */
 124 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 125             !defined(__PRAGMA_REDEFINE_EXTNAME))
 126 extern struct dirent64  *readdir64(DIR *);
 127 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
 128 extern int      scandir64(const char *, struct dirent64 *(*[]),
 129                         int (*)(const struct dirent64 *),
 130                         int (*)(const struct dirent64 **,
 131                                 const struct dirent64 **));
 132 extern int      alphasort64(const struct dirent64 **, const struct dirent64 **);
 133 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
 134 #endif
 135 
 136 #else
 137 
 138 extern DIR              *opendir();
 139 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
 140         defined(_ATFILE_SOURCE)
 141 extern DIR              *fdopendir();
 142 extern int              dirfd();
 143 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */
 144 extern struct dirent    *readdir();
 145 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || \
 146         defined(_XOPEN_SOURCE)
 147 extern long             telldir();
 148 extern void             seekdir();
 149 #endif /* defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) ... */
 150 extern void             rewinddir();
 151 extern int              closedir();
 152 
 153 /* transitional large file interface */
 154 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 155             !defined(__PRAGMA_REDEFINE_EXTNAME))
 156 extern struct dirent64  *readdir64();
 157 #endif
 158 
 159 #endif
 160 
 161 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || \
 162         defined(_XOPEN_SOURCE)
 163 #define rewinddir(dirp) seekdir(dirp, 0L)
 164 #endif
 165 
 166 /*
 167  * readdir_r() prototype is defined here.
 168  *
 169  * There are several variations, depending on whether compatibility with old
 170  * POSIX draft specifications or the final specification is desired and on
 171  * whether the large file compilation environment is active.  To combat a
 172  * combinatorial explosion, enabling large files implies using the final
 173  * specification (since the definition of the large file environment
 174  * considerably postdates that of the final readdir_r specification).
 175  *
 176  * In the LP64 compilation environment, all APIs are already large file,
 177  * and since there are no 64-bit applications that can have seen the
 178  * draft implementation, again, we use the final POSIX specification.
 179  */
 180 
 181 #if     defined(__EXTENSIONS__) || defined(_REENTRANT) || \
 182         !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE - 0 >= 199506L) || \
 183         defined(_POSIX_PTHREAD_SEMANTICS)
 184 
 185 #if     defined(__STDC__)
 186 
 187 #if     !defined(_LP64) && _FILE_OFFSET_BITS == 32
 188 
 189 #if     (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
 190 
 191 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 192 #pragma redefine_extname readdir_r      __posix_readdir_r
 193 extern int readdir_r(DIR *_RESTRICT_KYWD, struct dirent *_RESTRICT_KYWD,
 194                 struct dirent **_RESTRICT_KYWD);
 195 #else   /* __PRAGMA_REDEFINE_EXTNAME */
 196 
 197 extern int __posix_readdir_r(DIR *_RESTRICT_KYWD,
 198     struct dirent *_RESTRICT_KYWD, struct dirent **_RESTRICT_KYWD);
 199 
 200 #ifdef  __lint
 201 #define readdir_r       __posix_readdir_r
 202 #else   /* !__lint */
 203 
 204 static int
 205 readdir_r(DIR *_RESTRICT_KYWD __dp, struct dirent *_RESTRICT_KYWD __ent,
 206                 struct dirent **_RESTRICT_KYWD __res) {


 226 #endif
 227 #else   /* _LP64 */
 228 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 229 #pragma redefine_extname readdir_r      readdir64_r
 230 #else
 231 #define readdir_r               readdir64_r
 232 #endif
 233 #endif  /* _LP64 */
 234 extern int readdir_r(DIR *_RESTRICT_KYWD, struct dirent *_RESTRICT_KYWD,
 235         struct dirent **_RESTRICT_KYWD);
 236 
 237 #endif  /* !_LP64 && _FILE_OFFSET_BITS == 32 */
 238 
 239 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 240             !defined(__PRAGMA_REDEFINE_EXTNAME))
 241 /* transitional large file interface */
 242 extern int readdir64_r(DIR *_RESTRICT_KYWD, struct dirent64 *_RESTRICT_KYWD,
 243         struct dirent64 **_RESTRICT_KYWD);
 244 #endif
 245 
 246 #else  /* __STDC__ */
 247 
 248 #if     !defined(_LP64) && _FILE_OFFSET_BITS == 32
 249 
 250 #if     (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
 251 
 252 #ifdef __PRAGMA_REDEFINE_EXTNAME
 253 #pragma redefine_extname readdir_r __posix_readdir_r
 254 extern int readdir_r();
 255 #else  /* __PRAGMA_REDEFINE_EXTNAME */
 256 
 257 extern int __posix_readdir_r();
 258 
 259 #ifdef  __lint
 260 #define readdir_r __posix_readdir_r
 261 #else   /* !__lint */
 262 
 263 static int
 264 readdir_r(DIR *_RESTRICT_KYWD __dp, struct dirent *_RESTRICT_KYWD __ent,
 265         struct dirent **_RESTRICT_KYWD __res)
 266 {
 267         return (__posix_readdir_r(__dp, __ent, __res));
 268 }
 269 
 270 #endif /* !__lint */
 271 #endif /* __PRAGMA_REDEFINE_EXTNAME */
 272 
 273 #else  /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
 274 
 275 extern struct dirent *readdir_r();
 276 
 277 #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
 278 
 279 #else   /* !_LP64 && _FILE_OFFSET_BITS == 32 */
 280 
 281 #if defined(_LP64)
 282 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 283 #pragma redefine_extname readdir64_r    readdir_r
 284 #else
 285 #define readdir64_r     readdir
 286 #endif
 287 #else   /* _LP64 */
 288 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 289 #pragma redefine_extname readdir_r readdir64_r
 290 #else
 291 #define readdir_r readdir64_r
 292 #endif
 293 #endif  /* _LP64 */
 294 extern int      readdir_r();
 295 
 296 #endif  /* !_LP64 && _FILE_OFFSET_BITS == 32 */
 297 
 298 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 299             !defined(__PRAGMA_REDEFINE_EXTNAME))
 300 /* transitional large file interface */
 301 extern int      readdir64_r();
 302 #endif
 303 
 304 #endif /* __STDC__ */
 305 
 306 #endif /* defined(__EXTENSIONS__) || defined(_REENTRANT)... */
 307 
 308 #ifdef  __cplusplus
 309 }
 310 #endif
 311 
 312 #endif  /* _DIRENT_H */


   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 /*
  28  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
  29  */
  30 
  31 /*      Copyright (c) 1988 AT&T     */
  32 /*        All Rights Reserved   */
  33 
  34 #ifndef _DIRENT_H
  35 #define _DIRENT_H
  36 


  37 #include <sys/feature_tests.h>
  38 
  39 #include <sys/types.h>
  40 #include <sys/dirent.h>
  41 
  42 #ifdef  __cplusplus
  43 extern "C" {
  44 #endif
  45 
  46 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
  47 
  48 #define MAXNAMLEN       512             /* maximum filename length */
  49 #define DIRBUF          8192            /* buffer size for fs-indep. dirs */
  50 
  51 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
  52 
  53 #if !defined(__XOPEN_OR_POSIX)
  54 
  55 typedef struct {
  56         int     dd_fd;          /* file descriptor */
  57         int     dd_loc;         /* offset in block */
  58         int     dd_size;        /* amount of valid data */
  59         char    *dd_buf;        /* directory block */
  60 } DIR;                          /* stream data from opendir() */
  61 
  62 
  63 #else
  64 
  65 typedef struct {
  66         int     d_fd;           /* file descriptor */
  67         int     d_loc;          /* offset in block */
  68         int     d_size;         /* amount of valid data */
  69         char    *d_buf;         /* directory block */
  70 } DIR;                          /* stream data from opendir() */
  71 
  72 #endif /* !defined(__XOPEN_OR_POSIX) */
  73 


  74 /* large file compilation environment setup */
  75 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
  76 #ifdef __PRAGMA_REDEFINE_EXTNAME
  77 #pragma redefine_extname        readdir readdir64
  78 #pragma redefine_extname        scandir scandir64
  79 #pragma redefine_extname        alphasort alphasort64
  80 #else
  81 #define readdir                 readdir64
  82 #define scandir                 scandir64
  83 #define alphasort               alphasort64
  84 #endif
  85 #endif  /* _FILE_OFFSET_BITS == 64 */
  86 
  87 /* In the LP64 compilation environment, all APIs are already large file */
  88 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
  89 #ifdef __PRAGMA_REDEFINE_EXTNAME
  90 #pragma redefine_extname        readdir64       readdir
  91 #pragma redefine_extname        scandir64       scandir
  92 #pragma redefine_extname        alphasort64     alphasort
  93 #else
  94 #define readdir64               readdir
  95 #define scandir64               scandir
  96 #define alphsort64              alphasort
  97 #endif
  98 #endif  /* _LP64 && _LARGEFILE64_SOURCE */
  99 
 100 extern DIR              *opendir(const char *);
 101 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG7) || \
 102         defined(_ATFILE_SOURCE)
 103 extern DIR              *fdopendir(int);
 104 extern int              dirfd(DIR *);
 105 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */
 106 
 107 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG7)
 108 extern int              scandir(const char *, struct dirent ***,
 109                                 int (*)(const struct dirent *),
 110                                 int (*)(const struct dirent **,
 111                                         const struct dirent **));
 112 extern int              alphasort(const struct dirent **,
 113                                         const struct dirent **);
 114 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */
 115 
 116 extern struct dirent    *readdir(DIR *);
 117 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || \
 118         defined(_XOPEN_SOURCE)
 119 extern long             telldir(DIR *);
 120 extern void             seekdir(DIR *, long);
 121 #endif /* defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) ... */
 122 extern void             rewinddir(DIR *);
 123 extern int              closedir(DIR *);
 124 
 125 /* transitional large file interface */
 126 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 127             !defined(__PRAGMA_REDEFINE_EXTNAME))
 128 extern struct dirent64  *readdir64(DIR *);
 129 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
 130 extern int      scandir64(const char *, struct dirent64 ***,
 131                         int (*)(const struct dirent64 *),
 132                         int (*)(const struct dirent64 **,
 133                                 const struct dirent64 **));
 134 extern int      alphasort64(const struct dirent64 **, const struct dirent64 **);
 135 #endif /* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) */
 136 #endif
 137 









 138 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || \
 139         defined(_XOPEN_SOURCE)
















 140 #define rewinddir(dirp) seekdir(dirp, 0L)
 141 #endif
 142 
 143 /*
 144  * readdir_r() prototype is defined here.
 145  *
 146  * There are several variations, depending on whether compatibility with old
 147  * POSIX draft specifications or the final specification is desired and on
 148  * whether the large file compilation environment is active.  To combat a
 149  * combinatorial explosion, enabling large files implies using the final
 150  * specification (since the definition of the large file environment
 151  * considerably postdates that of the final readdir_r specification).
 152  *
 153  * In the LP64 compilation environment, all APIs are already large file,
 154  * and since there are no 64-bit applications that can have seen the
 155  * draft implementation, again, we use the final POSIX specification.
 156  */
 157 
 158 #if     defined(__EXTENSIONS__) || defined(_REENTRANT) || \
 159         !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE - 0 >= 199506L) || \
 160         defined(_POSIX_PTHREAD_SEMANTICS)
 161 


 162 #if     !defined(_LP64) && _FILE_OFFSET_BITS == 32
 163 
 164 #if     (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
 165 
 166 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 167 #pragma redefine_extname readdir_r      __posix_readdir_r
 168 extern int readdir_r(DIR *_RESTRICT_KYWD, struct dirent *_RESTRICT_KYWD,
 169                 struct dirent **_RESTRICT_KYWD);
 170 #else   /* __PRAGMA_REDEFINE_EXTNAME */
 171 
 172 extern int __posix_readdir_r(DIR *_RESTRICT_KYWD,
 173     struct dirent *_RESTRICT_KYWD, struct dirent **_RESTRICT_KYWD);
 174 
 175 #ifdef  __lint
 176 #define readdir_r       __posix_readdir_r
 177 #else   /* !__lint */
 178 
 179 static int
 180 readdir_r(DIR *_RESTRICT_KYWD __dp, struct dirent *_RESTRICT_KYWD __ent,
 181                 struct dirent **_RESTRICT_KYWD __res) {


 201 #endif
 202 #else   /* _LP64 */
 203 #ifdef  __PRAGMA_REDEFINE_EXTNAME
 204 #pragma redefine_extname readdir_r      readdir64_r
 205 #else
 206 #define readdir_r               readdir64_r
 207 #endif
 208 #endif  /* _LP64 */
 209 extern int readdir_r(DIR *_RESTRICT_KYWD, struct dirent *_RESTRICT_KYWD,
 210         struct dirent **_RESTRICT_KYWD);
 211 
 212 #endif  /* !_LP64 && _FILE_OFFSET_BITS == 32 */
 213 
 214 #if     defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
 215             !defined(__PRAGMA_REDEFINE_EXTNAME))
 216 /* transitional large file interface */
 217 extern int readdir64_r(DIR *_RESTRICT_KYWD, struct dirent64 *_RESTRICT_KYWD,
 218         struct dirent64 **_RESTRICT_KYWD);
 219 #endif
 220 




























































 221 #endif /* defined(__EXTENSIONS__) || defined(_REENTRANT)... */
 222 
 223 #ifdef  __cplusplus
 224 }
 225 #endif
 226 
 227 #endif  /* _DIRENT_H */