]> git.saurik.com Git - apple/libc.git/blobdiff - include/fts.h
Libc-1353.100.2.tar.gz
[apple/libc.git] / include / fts.h
index 410368f2e1fa57ce16e2c14d1596b60aac699f79..325613704a24736c9bf2772b8e7935487b45e54c 100644 (file)
@@ -1,10 +1,8 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000, 2003-2006, 2008, 2012 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
 #ifndef        _FTS_H_
 #define        _FTS_H_
 
+#include <sys/_types.h>
+#include <sys/_types/_dev_t.h>
+#include <sys/_types/_ino_t.h>
+#include <sys/_types/_nlink_t.h>
+
+#include <Availability.h>
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wstrict-prototypes"
+
 typedef struct {
        struct _ftsent *fts_cur;        /* current node */
        struct _ftsent *fts_child;      /* linked list of children */
@@ -69,7 +77,14 @@ typedef struct {
        int fts_rfd;                    /* fd for root */
        int fts_pathlen;                /* sizeof(path) */
        int fts_nitems;                 /* elements in the sort array */
-       int (*fts_compar)();            /* compare function */
+#ifdef __BLOCKS__
+       union {
+#endif /* __BLOCKS__ */
+           int (*fts_compar)();        /* compare function */
+#ifdef __BLOCKS__
+           int (^fts_compar_b)();      /* compare block */
+       };
+#endif /* __BLOCKS__ */
 
 #define        FTS_COMFOLLOW   0x001           /* follow command line symlinks */
 #define        FTS_LOGICAL     0x002           /* logical walk */
@@ -78,11 +93,20 @@ typedef struct {
 #define        FTS_PHYSICAL    0x010           /* physical walk */
 #define        FTS_SEEDOT      0x020           /* return dot and dot-dot */
 #define        FTS_XDEV        0x040           /* don't cross devices */
-#define        FTS_WHITEOUT    0x080           /* return whiteout information */
-#define        FTS_OPTIONMASK  0x0ff           /* valid user option mask */
+#define        FTS_WHITEOUT    0x080           /* (no longer supported) return whiteout information */
+#define        FTS_COMFOLLOWDIR 0x400          /* (non-std) follow command line symlinks for directories only */
+#if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 1090) || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 70000)
+#define        FTS_OPTIONMASK  0x4ff           /* valid user option mask */
+#else
+#define        FTS_NOSTAT_TYPE 0x800           /* (non-std) no stat, but use d_type in struct dirent when available */
+#define        FTS_OPTIONMASK  0xcff           /* valid user option mask */
+#endif
 
 #define        FTS_NAMEONLY    0x100           /* (private) child names only */
 #define        FTS_STOP        0x200           /* (private) unrecoverable error */
+#ifdef __BLOCKS__
+#define        FTS_BLOCK_COMPAR 0x80000000     /* fts_compar is a block */
+#endif /* __BLOCKS__ */
        int fts_options;                /* fts_open options, global flags */
 } FTS;
 
@@ -96,8 +120,8 @@ typedef struct _ftsent {
        char *fts_path;                 /* root path */
        int fts_errno;                  /* errno for this node */
        int fts_symfd;                  /* fd for symlink */
-       u_short fts_pathlen;            /* strlen(fts_path) */
-       u_short fts_namelen;            /* strlen(fts_name) */
+       unsigned short fts_pathlen;     /* strlen(fts_path) */
+       unsigned short fts_namelen;     /* strlen(fts_name) */
 
        ino_t fts_ino;                  /* inode */
        dev_t fts_dev;                  /* device */
@@ -105,6 +129,7 @@ typedef struct _ftsent {
 
 #define        FTS_ROOTPARENTLEVEL     -1
 #define        FTS_ROOTLEVEL            0
+#define        FTS_MAXLEVEL             0x7fffffff
        short fts_level;                /* depth (-1 to N) */
 
 #define        FTS_D            1              /* preorder directory */
@@ -121,32 +146,96 @@ typedef struct _ftsent {
 #define        FTS_SL          12              /* symbolic link */
 #define        FTS_SLNONE      13              /* symbolic link without target */
 #define        FTS_W           14              /* whiteout object */
-       u_short fts_info;               /* user flags for FTSENT structure */
+       unsigned short fts_info;        /* user flags for FTSENT structure */
 
 #define        FTS_DONTCHDIR    0x01           /* don't chdir .. to the parent */
 #define        FTS_SYMFOLLOW    0x02           /* followed a symlink to get here */
 #define        FTS_ISW          0x04           /* this is a whiteout object */
-       u_short fts_flags;              /* private flags for FTSENT structure */
+       unsigned short fts_flags;       /* private flags for FTSENT structure */
 
 #define        FTS_AGAIN        1              /* read node again */
 #define        FTS_FOLLOW       2              /* follow symbolic link */
 #define        FTS_NOINSTR      3              /* no instructions */
 #define        FTS_SKIP         4              /* discard node */
-       u_short fts_instr;              /* fts_set() instructions */
+       unsigned short fts_instr;       /* fts_set() instructions */
 
        struct stat *fts_statp;         /* stat(2) information */
        char fts_name[1];               /* file name */
 } FTSENT;
 
 #include <sys/cdefs.h>
+#include <Availability.h>
 
 __BEGIN_DECLS
-FTSENT *fts_children __P((FTS *, int));
-int     fts_close __P((FTS *));
-FTS    *fts_open __P((char * const *, int,
-           int (*)(const FTSENT **, const FTSENT **)));
-FTSENT *fts_read __P((FTS *));
-int     fts_set __P((FTS *, FTSENT *, int));
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_CHILDREN
+//End-Libc
+FTSENT *fts_children(FTS *, int) __DARWIN_INODE64(fts_children);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_CHILDREN */
+FTSENT *fts_children(FTS *, int) LIBC_INODE64(fts_children);
+#endif /* !LIBC_ALIAS_FTS_CHILDREN */
+//End-Libc
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_CLOSE
+//End-Libc
+int     fts_close(FTS *) __DARWIN_INODE64(fts_close);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_CLOSE */
+int     fts_close(FTS *) LIBC_INODE64(fts_close);
+#endif /* !LIBC_ALIAS_FTS_CLOSE */
+//End-Libc
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_OPEN
+//End-Libc
+FTS    *fts_open(char * const *, int,
+           int (*)(const FTSENT **, const FTSENT **)) __DARWIN_INODE64(fts_open);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_OPEN */
+FTS    *fts_open(char * const *, int,
+           int (*)(const FTSENT **, const FTSENT **)) LIBC_INODE64(fts_open);
+#endif /* !LIBC_ALIAS_FTS_OPEN */
+//End-Libc
+#ifdef __BLOCKS__
+#if __has_attribute(noescape)
+#define __fts_noescape __attribute__((__noescape__))
+#else
+#define __fts_noescape
+#endif
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_OPEN_B
+//End-Libc
+FTS    *fts_open_b(char * const *, int,
+           int (^)(const FTSENT **, const FTSENT **) __fts_noescape)
+           __DARWIN_INODE64(fts_open_b) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_OPEN */
+FTS    *fts_open_b(char * const *, int,
+           int (^)(const FTSENT **, const FTSENT **) __fts_noescape)
+           LIBC_INODE64(fts_open_b);
+#endif /* !LIBC_ALIAS_FTS_OPEN */
+//End-Libc
+#endif /* __BLOCKS__ */
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_READ
+//End-Libc
+FTSENT *fts_read(FTS *) __DARWIN_INODE64(fts_read);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_READ */
+FTSENT *fts_read(FTS *) LIBC_INODE64(fts_read);
+#endif /* !LIBC_ALIAS_FTS_READ */
+//End-Libc
+//Begin-Libc
+#ifndef LIBC_ALIAS_FTS_SET
+//End-Libc
+int     fts_set(FTS *, FTSENT *, int) __DARWIN_INODE64(fts_set);
+//Begin-Libc
+#else /* LIBC_ALIAS_FTS_SET */
+int     fts_set(FTS *, FTSENT *, int) LIBC_INODE64(fts_set);
+#endif /* !LIBC_ALIAS_FTS_SET */
+//End-Libc
 __END_DECLS
 
+#pragma clang diagnostic pop
 #endif /* !_FTS_H_ */
+