1*00b67f09SDavid van Moolenbroek /* $NetBSD: dir.h,v 1.4 2014/12/10 04:38:01 christos Exp $ */ 2*00b67f09SDavid van Moolenbroek 3*00b67f09SDavid van Moolenbroek /* 4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") 5*00b67f09SDavid van Moolenbroek * Copyright (C) 1999-2001 Internet Software Consortium. 6*00b67f09SDavid van Moolenbroek * 7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 10*00b67f09SDavid van Moolenbroek * 11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE. 18*00b67f09SDavid van Moolenbroek */ 19*00b67f09SDavid van Moolenbroek 20*00b67f09SDavid van Moolenbroek /* Id: dir.h,v 1.21 2007/06/19 23:47:19 tbox Exp */ 21*00b67f09SDavid van Moolenbroek 22*00b67f09SDavid van Moolenbroek /* Principal Authors: DCL */ 23*00b67f09SDavid van Moolenbroek 24*00b67f09SDavid van Moolenbroek #ifndef ISC_DIR_H 25*00b67f09SDavid van Moolenbroek #define ISC_DIR_H 1 26*00b67f09SDavid van Moolenbroek 27*00b67f09SDavid van Moolenbroek /*! \file */ 28*00b67f09SDavid van Moolenbroek 29*00b67f09SDavid van Moolenbroek #include <sys/types.h> /* Required on some systems. */ 30*00b67f09SDavid van Moolenbroek #include <dirent.h> 31*00b67f09SDavid van Moolenbroek 32*00b67f09SDavid van Moolenbroek #include <isc/lang.h> 33*00b67f09SDavid van Moolenbroek #include <isc/result.h> 34*00b67f09SDavid van Moolenbroek 35*00b67f09SDavid van Moolenbroek #define ISC_DIR_NAMEMAX 256 36*00b67f09SDavid van Moolenbroek #define ISC_DIR_PATHMAX 1024 37*00b67f09SDavid van Moolenbroek 38*00b67f09SDavid van Moolenbroek /*% Directory Entry */ 39*00b67f09SDavid van Moolenbroek typedef struct isc_direntry { 40*00b67f09SDavid van Moolenbroek /*! 41*00b67f09SDavid van Moolenbroek * Ideally, this should be NAME_MAX, but AIX does not define it by 42*00b67f09SDavid van Moolenbroek * default and dynamically allocating the space based on pathconf() 43*00b67f09SDavid van Moolenbroek * complicates things undesirably, as does adding special conditionals 44*00b67f09SDavid van Moolenbroek * just for AIX. So a comfortably sized buffer is chosen instead. 45*00b67f09SDavid van Moolenbroek */ 46*00b67f09SDavid van Moolenbroek char name[ISC_DIR_NAMEMAX]; 47*00b67f09SDavid van Moolenbroek unsigned int length; 48*00b67f09SDavid van Moolenbroek } isc_direntry_t; 49*00b67f09SDavid van Moolenbroek 50*00b67f09SDavid van Moolenbroek /*% Directory */ 51*00b67f09SDavid van Moolenbroek typedef struct isc_dir { 52*00b67f09SDavid van Moolenbroek unsigned int magic; 53*00b67f09SDavid van Moolenbroek /*! 54*00b67f09SDavid van Moolenbroek * As with isc_direntry_t->name, making this "right" for all systems 55*00b67f09SDavid van Moolenbroek * is slightly problematic because AIX does not define PATH_MAX. 56*00b67f09SDavid van Moolenbroek */ 57*00b67f09SDavid van Moolenbroek char dirname[ISC_DIR_PATHMAX]; 58*00b67f09SDavid van Moolenbroek isc_direntry_t entry; 59*00b67f09SDavid van Moolenbroek DIR * handle; 60*00b67f09SDavid van Moolenbroek } isc_dir_t; 61*00b67f09SDavid van Moolenbroek 62*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS 63*00b67f09SDavid van Moolenbroek 64*00b67f09SDavid van Moolenbroek void 65*00b67f09SDavid van Moolenbroek isc_dir_init(isc_dir_t *dir); 66*00b67f09SDavid van Moolenbroek 67*00b67f09SDavid van Moolenbroek isc_result_t 68*00b67f09SDavid van Moolenbroek isc_dir_open(isc_dir_t *dir, const char *dirname); 69*00b67f09SDavid van Moolenbroek 70*00b67f09SDavid van Moolenbroek isc_result_t 71*00b67f09SDavid van Moolenbroek isc_dir_read(isc_dir_t *dir); 72*00b67f09SDavid van Moolenbroek 73*00b67f09SDavid van Moolenbroek isc_result_t 74*00b67f09SDavid van Moolenbroek isc_dir_reset(isc_dir_t *dir); 75*00b67f09SDavid van Moolenbroek 76*00b67f09SDavid van Moolenbroek void 77*00b67f09SDavid van Moolenbroek isc_dir_close(isc_dir_t *dir); 78*00b67f09SDavid van Moolenbroek 79*00b67f09SDavid van Moolenbroek isc_result_t 80*00b67f09SDavid van Moolenbroek isc_dir_chdir(const char *dirname); 81*00b67f09SDavid van Moolenbroek 82*00b67f09SDavid van Moolenbroek isc_result_t 83*00b67f09SDavid van Moolenbroek isc_dir_chroot(const char *dirname); 84*00b67f09SDavid van Moolenbroek 85*00b67f09SDavid van Moolenbroek isc_result_t 86*00b67f09SDavid van Moolenbroek isc_dir_createunique(char *templet); 87*00b67f09SDavid van Moolenbroek /*!< 88*00b67f09SDavid van Moolenbroek * Use a templet (such as from isc_file_mktemplate()) to create a uniquely 89*00b67f09SDavid van Moolenbroek * named, empty directory. The templet string is modified in place. 90*00b67f09SDavid van Moolenbroek * If result == ISC_R_SUCCESS, it is the name of the directory that was 91*00b67f09SDavid van Moolenbroek * created. 92*00b67f09SDavid van Moolenbroek */ 93*00b67f09SDavid van Moolenbroek 94*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS 95*00b67f09SDavid van Moolenbroek 96*00b67f09SDavid van Moolenbroek #endif /* ISC_DIR_H */ 97