1*4bd01d6aSJitendra Bhati /*- 2*4bd01d6aSJitendra Bhati * SPDX-License-Identifier: BSD-3-Clause 3*4bd01d6aSJitendra Bhati * 4*4bd01d6aSJitendra Bhati * Copyright (c) 1989, 1993 5*4bd01d6aSJitendra Bhati * The Regents of the University of California. All rights reserved. 6*4bd01d6aSJitendra Bhati * 7*4bd01d6aSJitendra Bhati * Redistribution and use in source and binary forms, with or without 8*4bd01d6aSJitendra Bhati * modification, are permitted provided that the following conditions 9*4bd01d6aSJitendra Bhati * are met: 10*4bd01d6aSJitendra Bhati * 1. Redistributions of source code must retain the above copyright 11*4bd01d6aSJitendra Bhati * notice, this list of conditions and the following disclaimer. 12*4bd01d6aSJitendra Bhati * 2. Redistributions in binary form must reproduce the above copyright 13*4bd01d6aSJitendra Bhati * notice, this list of conditions and the following disclaimer in the 14*4bd01d6aSJitendra Bhati * documentation and/or other materials provided with the distribution. 15*4bd01d6aSJitendra Bhati * 3. Neither the name of the University nor the names of its contributors 16*4bd01d6aSJitendra Bhati * may be used to endorse or promote products derived from this software 17*4bd01d6aSJitendra Bhati * without specific prior written permission. 18*4bd01d6aSJitendra Bhati * 19*4bd01d6aSJitendra Bhati * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20*4bd01d6aSJitendra Bhati * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*4bd01d6aSJitendra Bhati * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*4bd01d6aSJitendra Bhati * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23*4bd01d6aSJitendra Bhati * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*4bd01d6aSJitendra Bhati * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*4bd01d6aSJitendra Bhati * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*4bd01d6aSJitendra Bhati * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*4bd01d6aSJitendra Bhati * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*4bd01d6aSJitendra Bhati * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*4bd01d6aSJitendra Bhati * SUCH DAMAGE. 30*4bd01d6aSJitendra Bhati */ 31*4bd01d6aSJitendra Bhati 32*4bd01d6aSJitendra Bhati #ifndef _FTS_COMPAT15_H_ 33*4bd01d6aSJitendra Bhati #define _FTS_COMPAT15_H_ 34*4bd01d6aSJitendra Bhati 35*4bd01d6aSJitendra Bhati typedef struct { 36*4bd01d6aSJitendra Bhati struct _ftsent15 *fts_cur; /* current node */ 37*4bd01d6aSJitendra Bhati struct _ftsent15 *fts_child; /* linked list of children */ 38*4bd01d6aSJitendra Bhati struct _ftsent15 **fts_array; /* sort array */ 39*4bd01d6aSJitendra Bhati dev_t fts_dev; /* starting device # */ 40*4bd01d6aSJitendra Bhati char *fts_path; /* path for this descent */ 41*4bd01d6aSJitendra Bhati int fts_rfd; /* fd for root */ 42*4bd01d6aSJitendra Bhati __size_t fts_pathlen; /* sizeof(path) */ 43*4bd01d6aSJitendra Bhati __size_t fts_nitems; /* elements in the sort array */ 44*4bd01d6aSJitendra Bhati union { 45*4bd01d6aSJitendra Bhati int (*fts_compar) /* compare function */ 46*4bd01d6aSJitendra Bhati (const struct _ftsent15 * const *, 47*4bd01d6aSJitendra Bhati const struct _ftsent15 * const *); 48*4bd01d6aSJitendra Bhati #ifdef __BLOCKS__ 49*4bd01d6aSJitendra Bhati int (^fts_compar_b) 50*4bd01d6aSJitendra Bhati (const struct _ftsent15 * const *, 51*4bd01d6aSJitendra Bhati const struct _ftsent15 * const *); 52*4bd01d6aSJitendra Bhati #else 53*4bd01d6aSJitendra Bhati void *fts_compar_b; 54*4bd01d6aSJitendra Bhati #endif 55*4bd01d6aSJitendra Bhati }; 56*4bd01d6aSJitendra Bhati int fts_options; /* fts_open options, global flags */ 57*4bd01d6aSJitendra Bhati void *fts_clientptr; /* thunk for sort function */ 58*4bd01d6aSJitendra Bhati } FTS15; 59*4bd01d6aSJitendra Bhati 60*4bd01d6aSJitendra Bhati typedef struct _ftsent15 { 61*4bd01d6aSJitendra Bhati struct _ftsent15 *fts_cycle; /* cycle node */ 62*4bd01d6aSJitendra Bhati struct _ftsent15 *fts_parent; /* parent directory */ 63*4bd01d6aSJitendra Bhati struct _ftsent15 *fts_link; /* next file in directory */ 64*4bd01d6aSJitendra Bhati long long fts_number; /* local numeric value */ 65*4bd01d6aSJitendra Bhati void *fts_pointer; /* local address value */ 66*4bd01d6aSJitendra Bhati char *fts_accpath; /* access path */ 67*4bd01d6aSJitendra Bhati char *fts_path; /* root path */ 68*4bd01d6aSJitendra Bhati int fts_errno; /* errno for this node */ 69*4bd01d6aSJitendra Bhati int fts_symfd; /* fd for symlink */ 70*4bd01d6aSJitendra Bhati __size_t fts_pathlen; /* strlen(fts_path) */ 71*4bd01d6aSJitendra Bhati __size_t fts_namelen; /* strlen(fts_name) */ 72*4bd01d6aSJitendra Bhati __ino_t fts_ino; /* inode */ 73*4bd01d6aSJitendra Bhati __dev_t fts_dev; /* device */ 74*4bd01d6aSJitendra Bhati __nlink_t fts_nlink; /* link count */ 75*4bd01d6aSJitendra Bhati long fts_level; /* depth (-1 to N) */ 76*4bd01d6aSJitendra Bhati int fts_info; /* user status for FTSENT structure */ 77*4bd01d6aSJitendra Bhati unsigned fts_flags; /* private flags for FTSENT structure */ 78*4bd01d6aSJitendra Bhati int fts_instr; /* fts_set() instructions */ 79*4bd01d6aSJitendra Bhati struct stat *fts_statp; /* stat(2) information */ 80*4bd01d6aSJitendra Bhati char *fts_name; /* file name */ 81*4bd01d6aSJitendra Bhati FTS15 *fts_fts; /* back pointer to main FTS */ 82*4bd01d6aSJitendra Bhati } FTSENT15; 83*4bd01d6aSJitendra Bhati 84*4bd01d6aSJitendra Bhati FTSENT15 *freebsd15_fts_children(FTS15 *, int); 85*4bd01d6aSJitendra Bhati int freebsd15_fts_close(FTS15 *); 86*4bd01d6aSJitendra Bhati void *freebsd15_fts_get_clientptr(FTS15 *); 87*4bd01d6aSJitendra Bhati #define freebsd15_fts_get_clientptr(fts) ((fts)->fts_clientptr) 88*4bd01d6aSJitendra Bhati FTS15 *freebsd15_fts_get_stream(FTSENT15 *); 89*4bd01d6aSJitendra Bhati #define freebsd15_fts_get_stream(ftsent) ((ftsent)->fts_fts) 90*4bd01d6aSJitendra Bhati FTS15 *freebsd15_fts_open(char * const *, int, 91*4bd01d6aSJitendra Bhati int (*)(const FTSENT15 * const *, 92*4bd01d6aSJitendra Bhati const FTSENT15 * const *)); 93*4bd01d6aSJitendra Bhati FTSENT15 *freebsd15_fts_read(FTS15 *); 94*4bd01d6aSJitendra Bhati int freebsd15_fts_set(FTS15 *, FTSENT15 *, int); 95*4bd01d6aSJitendra Bhati void freebsd15_fts_set_clientptr(FTS15 *, void *); 96*4bd01d6aSJitendra Bhati 97*4bd01d6aSJitendra Bhati #endif /* !_FTS_COMPAT15_H_ */ 98