gen-unix.h 2.49 KB
Newer Older
Bob Halley's avatar
Bob Halley committed
1
/*
Automatic Updater's avatar
Automatic Updater committed
2
 * Copyright (C) 2004, 2005, 2007, 2009  Internet Systems Consortium, Inc. ("ISC")
Brian Wellington's avatar
Brian Wellington committed
3
 * Copyright (C) 1999-2001  Internet Software Consortium.
4
 *
Automatic Updater's avatar
Automatic Updater committed
5
 * Permission to use, copy, modify, and/or distribute this software for any
Bob Halley's avatar
Bob Halley committed
6 7
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
8
 *
Mark Andrews's avatar
Mark Andrews committed
9 10 11 12 13 14 15
 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
Bob Halley's avatar
Bob Halley committed
16
 */
David Lawrence's avatar
David Lawrence committed
17

Automatic Updater's avatar
Automatic Updater committed
18
/* $Id: gen-unix.h,v 1.21 2009/01/17 23:47:42 tbox Exp $ */
David Lawrence's avatar
David Lawrence committed
19

20 21
/*! \file
 * \brief
David Lawrence's avatar
David Lawrence committed
22 23 24 25
 * This file is responsible for defining two operations that are not
 * directly portable between Unix-like systems and Windows NT, option
 * parsing and directory scanning.  It is here because it was decided
 * that the "gen" build utility was not to depend on libisc.a, so
Francis Dupont's avatar
Francis Dupont committed
26
 * the functions declared in isc/commandline.h and isc/dir.h could not
David Lawrence's avatar
David Lawrence committed
27 28 29 30 31 32
 * be used.
 *
 * The commandline stuff is really just a wrapper around getopt().
 * The dir stuff was shrunk to fit the needs of gen.c.
 */

33 34 35
#ifndef DNS_GEN_UNIX_H
#define DNS_GEN_UNIX_H 1

36
#include <sys/types.h>          /* Required on some systems for dirent.h. */
37

David Lawrence's avatar
David Lawrence committed
38
#include <dirent.h>
39
#include <unistd.h>		/* XXXDCL Required for ?. */
David Lawrence's avatar
David Lawrence committed
40 41

#include <isc/boolean.h>
42
#include <isc/lang.h>
David Lawrence's avatar
David Lawrence committed
43

44 45 46 47
#ifdef NEED_OPTARG
extern char *optarg;
#endif

David Lawrence's avatar
David Lawrence committed
48 49 50 51 52 53 54 55
#define isc_commandline_parse		getopt
#define isc_commandline_argument 	optarg

typedef struct {
	DIR *handle;
	char *filename;
} isc_dir_t;

56 57
ISC_LANG_BEGINDECLS

David Lawrence's avatar
David Lawrence committed
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
static isc_boolean_t
start_directory(const char *path, isc_dir_t *dir) {
	dir->handle = opendir(path);

	if (dir->handle != NULL)
		return (ISC_TRUE);
	else
		return (ISC_FALSE);

}

static isc_boolean_t
next_file(isc_dir_t *dir) {
	struct dirent *dirent;

	dir->filename = NULL;

	if (dir->handle != NULL) {
		dirent = readdir(dir->handle);
		if (dirent != NULL)
			dir->filename = dirent->d_name;
	}

	if (dir->filename != NULL)
		return (ISC_TRUE);
	else
		return (ISC_FALSE);
}

static void
end_directory(isc_dir_t *dir) {
	if (dir->handle != NULL)
90
		(void)closedir(dir->handle);
David Lawrence's avatar
David Lawrence committed
91 92 93 94

	dir->handle = NULL;
}

95 96
ISC_LANG_ENDDECLS

97
#endif /* DNS_GEN_UNIX_H */