1/* $NetBSD$ */ 2 3/* 4 * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC") 5 * Copyright (C) 1999-2001 Internet Software Consortium. 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 13 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20/* Id: gen-unix.h,v 1.21 2009/01/17 23:47:42 tbox Exp */ 21 22/*! \file 23 * \brief 24 * This file is responsible for defining two operations that are not 25 * directly portable between Unix-like systems and Windows NT, option 26 * parsing and directory scanning. It is here because it was decided 27 * that the "gen" build utility was not to depend on libisc.a, so 28 * the functions declared in isc/commandline.h and isc/dir.h could not 29 * be used. 30 * 31 * The commandline stuff is really just a wrapper around getopt(). 32 * The dir stuff was shrunk to fit the needs of gen.c. 33 */ 34 35#ifndef DNS_GEN_UNIX_H 36#define DNS_GEN_UNIX_H 1 37 38#include <sys/types.h> /* Required on some systems for dirent.h. */ 39 40#include <dirent.h> 41#include <unistd.h> /* XXXDCL Required for ?. */ 42 43#include <isc/boolean.h> 44#include <isc/lang.h> 45 46#ifdef NEED_OPTARG 47extern char *optarg; 48#endif 49 50#define isc_commandline_parse getopt 51#define isc_commandline_argument optarg 52 53typedef struct { 54 DIR *handle; 55 char *filename; 56} isc_dir_t; 57 58ISC_LANG_BEGINDECLS 59 60static isc_boolean_t 61start_directory(const char *path, isc_dir_t *dir) { 62 dir->handle = opendir(path); 63 64 if (dir->handle != NULL) 65 return (ISC_TRUE); 66 else 67 return (ISC_FALSE); 68 69} 70 71static isc_boolean_t 72next_file(isc_dir_t *dir) { 73 struct dirent *dirent; 74 75 dir->filename = NULL; 76 77 if (dir->handle != NULL) { 78 dirent = readdir(dir->handle); 79 if (dirent != NULL) 80 dir->filename = dirent->d_name; 81 } 82 83 if (dir->filename != NULL) 84 return (ISC_TRUE); 85 else 86 return (ISC_FALSE); 87} 88 89static void 90end_directory(isc_dir_t *dir) { 91 if (dir->handle != NULL) 92 (void)closedir(dir->handle); 93 94 dir->handle = NULL; 95} 96 97ISC_LANG_ENDDECLS 98 99#endif /* DNS_GEN_UNIX_H */ 100