gen-unix.h revision 9c3531d72aeaad6c5f01efe6a1c82023e1379e4d
4848fe4ad2c0ba6e2e69e4a2617727f8556d79a0Andreas Gustafsson/*
4848fe4ad2c0ba6e2e69e4a2617727f8556d79a0Andreas Gustafsson * Copyright (C) 1999, 2000 Internet Software Consortium.
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews *
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * Permission to use, copy, modify, and distribute this software for any
4848fe4ad2c0ba6e2e69e4a2617727f8556d79a0Andreas Gustafsson * purpose with or without fee is hereby granted, provided that the above
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews * copyright notice and this permission notice appear in all copies.
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews *
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
4848fe4ad2c0ba6e2e69e4a2617727f8556d79a0Andreas Gustafsson * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
4848fe4ad2c0ba6e2e69e4a2617727f8556d79a0Andreas Gustafsson * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * SOFTWARE.
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉 */
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews/* $Id: gen-unix.h,v 1.8 2000/06/22 21:54:25 tale Exp $ */
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉/*
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉 * This file is responsible for defining two operations that are not
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * directly portable between Unix-like systems and Windows NT, option
ab6e5af4cd644b174709f95c2702ec4c442aa755Mark Andrews * parsing and directory scanning. It is here because it was decided
ab6e5af4cd644b174709f95c2702ec4c442aa755Mark Andrews * that the "gen" build utility was not to depend on libisc.a, so
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews * the functions delcared in isc/commandline.h and isc/dir.h could not
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews * be used.
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews *
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * The commandline stuff is really just a wrapper around getopt().
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews * The dir stuff was shrunk to fit the needs of gen.c.
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews */
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews#ifndef DNS_GEN_UNIX_H
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews#define DNS_GEN_UNIX_H 1
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews#include <sys/types.h>
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#include <dirent.h>
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#include <unistd.h>
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#include <isc/boolean.h>
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#include <isc/lang.h>
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#define isc_commandline_parse getopt
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#define isc_commandline_argument optarg
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrewstypedef struct {
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews DIR *handle;
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews char *filename;
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews} isc_dir_t;
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark AndrewsISC_LANG_BEGINDECLS
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrewsstatic isc_boolean_t
66f51d8678c8fcc7256354b599317f67455120fdMark Andrewsstart_directory(const char *path, isc_dir_t *dir) {
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews dir->handle = opendir(path);
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews if (dir->handle != NULL)
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews return (ISC_TRUE);
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews else
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews return (ISC_FALSE);
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews}
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrewsstatic isc_boolean_t
66f51d8678c8fcc7256354b599317f67455120fdMark Andrewsnext_file(isc_dir_t *dir) {
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews struct dirent *dirent;
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews dir->filename = NULL;
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews if (dir->handle != NULL) {
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews dirent = readdir(dir->handle);
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉 if (dirent != NULL)
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉 dir->filename = dirent->d_name;
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews }
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews if (dir->filename != NULL)
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews return (ISC_TRUE);
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews else
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews return (ISC_FALSE);
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews}
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉
f620c5e527746a2ec3d90a11d21abd8a114746dfTatuya JINMEI 神明達哉static void
ab6e5af4cd644b174709f95c2702ec4c442aa755Mark Andrewsend_directory(isc_dir_t *dir) {
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews if (dir->handle != NULL)
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews closedir(dir->handle);
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews dir->handle = NULL;
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews}
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark AndrewsISC_LANG_ENDDECLS
30d6e6e907dfd7a254796c70f49ed11979c0cc3bMark Andrews
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews#endif /* DNS_GEN_UNIX_H */
66f51d8678c8fcc7256354b599317f67455120fdMark Andrews