fts_gnu.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /** $MirOS: contrib/hosted/fwcf/fts_gnu.h,v 1.1 2006/09/24 00:28:32 tg Exp $ */
  2. /* $OpenBSD: fts.h,v 1.11 2005/06/17 20:36:55 millert Exp $ */
  3. /* $NetBSD: fts.h,v 1.5 1994/12/28 01:41:50 mycroft Exp $ */
  4. /*
  5. * Copyright (c) 1989, 1993
  6. * The Regents of the University of California. All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. * 3. Neither the name of the University nor the names of its contributors
  17. * may be used to endorse or promote products derived from this software
  18. * without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. * SUCH DAMAGE.
  31. *
  32. * @(#)fts.h 8.3 (Berkeley) 8/14/94
  33. */
  34. #ifndef _FTS_H_
  35. #define _FTS_H_
  36. #include <features.h>
  37. #include <sys/types.h>
  38. /* The fts interface is incompatible with the LFS interface which
  39. transparently uses the 64-bit file access functions on GNU OS. */
  40. #ifdef __USE_FILE_OFFSET64
  41. # error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64"
  42. #endif
  43. struct _fts_private; /* implementation data */
  44. typedef struct {
  45. struct _ftsent *fts_cur; /* current node */
  46. struct _ftsent *fts_child; /* linked list of children */
  47. struct _ftsent **fts_array; /* sort array */
  48. dev_t fts_dev; /* starting device # */
  49. char *fts_path; /* path for this descent */
  50. int fts_rfd; /* fd for root */
  51. size_t fts_pathlen; /* sizeof(path) */
  52. int fts_nitems; /* elements in the sort array */
  53. int (*fts_compar)(); /* compare function */
  54. #define FTS_COMFOLLOW 0x0001 /* follow command line symlinks */
  55. #define FTS_LOGICAL 0x0002 /* logical walk */
  56. #define FTS_NOCHDIR 0x0004 /* don't change directories */
  57. #define FTS_NOSTAT 0x0008 /* don't get stat info */
  58. #define FTS_PHYSICAL 0x0010 /* physical walk */
  59. #define FTS_SEEDOT 0x0020 /* return dot and dot-dot */
  60. #define FTS_XDEV 0x0040 /* don't cross devices */
  61. #define FTS_OPTIONMASK 0x00ff /* valid user option mask */
  62. #define FTS_NAMEONLY 0x1000 /* (private) child names only */
  63. #define FTS_STOP 0x2000 /* (private) unrecoverable error */
  64. int fts_options; /* fts_open options, global flags */
  65. struct _fts_private *fts_priv; /* Implementation data */
  66. } FTS;
  67. typedef struct _ftsent {
  68. struct _ftsent *fts_cycle; /* cycle node */
  69. struct _ftsent *fts_parent; /* parent directory */
  70. struct _ftsent *fts_link; /* next file in directory */
  71. long fts_number; /* local numeric value */
  72. void *fts_pointer; /* local address value */
  73. char *fts_accpath; /* access path */
  74. char *fts_path; /* root path */
  75. int fts_errno; /* errno for this node */
  76. int fts_symfd; /* fd for symlink */
  77. size_t fts_pathlen; /* strlen(fts_path) */
  78. size_t fts_namelen; /* strlen(fts_name) */
  79. ino_t fts_ino; /* inode */
  80. dev_t fts_dev; /* device */
  81. nlink_t fts_nlink; /* link count */
  82. #define FTS_ROOTPARENTLEVEL -1
  83. #define FTS_ROOTLEVEL 0
  84. short fts_level; /* depth (-1 to N) */
  85. #define FTS_D 1 /* preorder directory */
  86. #define FTS_DC 2 /* directory that causes cycles */
  87. #define FTS_DEFAULT 3 /* none of the above */
  88. #define FTS_DNR 4 /* unreadable directory */
  89. #define FTS_DOT 5 /* dot or dot-dot */
  90. #define FTS_DP 6 /* postorder directory */
  91. #define FTS_ERR 7 /* error; errno is set */
  92. #define FTS_F 8 /* regular file */
  93. #define FTS_INIT 9 /* initialized only */
  94. #define FTS_NS 10 /* stat(2) failed */
  95. #define FTS_NSOK 11 /* no stat(2) requested */
  96. #define FTS_SL 12 /* symbolic link */
  97. #define FTS_SLNONE 13 /* symbolic link without target */
  98. unsigned short fts_info; /* user flags for FTSENT structure */
  99. #define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */
  100. #define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */
  101. unsigned short fts_flags; /* private flags for FTSENT structure */
  102. #define FTS_AGAIN 1 /* read node again */
  103. #define FTS_FOLLOW 2 /* follow symbolic link */
  104. #define FTS_NOINSTR 3 /* no instructions */
  105. #define FTS_SKIP 4 /* discard node */
  106. unsigned short fts_instr; /* fts_set() instructions */
  107. struct stat *fts_statp; /* stat(2) information */
  108. char fts_name[1]; /* file name */
  109. } FTSENT;
  110. FTSENT *fts_children(FTS *, int);
  111. int fts_close(FTS *);
  112. FTS *fts_open(char * const *, int,
  113. int (*)(const FTSENT **, const FTSENT **));
  114. FTSENT *fts_read(FTS *);
  115. int fts_set(FTS *, FTSENT *, int);
  116. #endif /* !_FTS_H_ */