49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 1999-2001, 2004, 2005, 2007, 2016 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence */
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
70e5a7403f0e0a3bd292b8287c5fed5772c15270Automatic Updater/* $Id: dir.h,v 1.21 2007/06/19 23:47:19 tbox Exp $ */
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence/* Principal Authors: DCL */
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley#ifndef ISC_DIR_H
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley#define ISC_DIR_H 1
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/*! \file */
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein
544f8fd0beff5f34dcd567b8f83ff18bce07f56eDavid Lawrence#include <sys/types.h> /* Required on some systems. */
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence#include <dirent.h>
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence#include <isc/lang.h>
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence#include <isc/result.h>
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
a91a5c2322146f1dfa94c2ff7c559f10217a611aDavid Lawrence#define ISC_DIR_NAMEMAX 256
a91a5c2322146f1dfa94c2ff7c559f10217a611aDavid Lawrence#define ISC_DIR_PATHMAX 1024
a91a5c2322146f1dfa94c2ff7c559f10217a611aDavid Lawrence
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/*% Directory Entry */
544f8fd0beff5f34dcd567b8f83ff18bce07f56eDavid Lawrencetypedef struct isc_direntry {
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein /*!
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * Ideally, this should be NAME_MAX, but AIX does not define it by
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * default and dynamically allocating the space based on pathconf()
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * complicates things undesirably, as does adding special conditionals
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * just for AIX. So a comfortably sized buffer is chosen instead.
0307846c714477583e4e377a915829e5afe2ef38David Lawrence */
a91a5c2322146f1dfa94c2ff7c559f10217a611aDavid Lawrence char name[ISC_DIR_NAMEMAX];
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence unsigned int length;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence} isc_direntry_t;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/*% Directory */
544f8fd0beff5f34dcd567b8f83ff18bce07f56eDavid Lawrencetypedef struct isc_dir {
28fc90e6c81338c5f34e065fdda49d320e362583Mark Andrews unsigned int magic;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein /*!
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * As with isc_direntry_t->name, making this "right" for all systems
0307846c714477583e4e377a915829e5afe2ef38David Lawrence * is slightly problematic because AIX does not define PATH_MAX.
0307846c714477583e4e377a915829e5afe2ef38David Lawrence */
a91a5c2322146f1dfa94c2ff7c559f10217a611aDavid Lawrence char dirname[ISC_DIR_PATHMAX];
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence isc_direntry_t entry;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence DIR * handle;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence} isc_dir_t;
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
dc91d010dbd848ab3a11815e5a3d109662a38b0cDavid LawrenceISC_LANG_BEGINDECLS
dc91d010dbd848ab3a11815e5a3d109662a38b0cDavid Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrencevoid
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_dir_init(isc_dir_t *dir);
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_result_t
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halleyisc_dir_open(isc_dir_t *dir, const char *dirname);
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_result_t
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_dir_read(isc_dir_t *dir);
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_result_t
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_dir_reset(isc_dir_t *dir);
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrencevoid
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrenceisc_dir_close(isc_dir_t *dir);
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halleyisc_result_t
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halleyisc_dir_chdir(const char *dirname);
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrewsisc_result_t
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrewsisc_dir_chroot(const char *dirname);
fd50497bbea156911c10ab2cc5a932c30eb709a5Mark Andrews
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrenceisc_result_t
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrenceisc_dir_createunique(char *templet);
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein/*!<
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence * Use a templet (such as from isc_file_mktemplate()) to create a uniquely
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence * named, empty directory. The templet string is modified in place.
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence * If result == ISC_R_SUCCESS, it is the name of the directory that was
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence * created.
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence */
febf5f8b55abb2e6e840488a29a5ef4e20654f67David Lawrence
dc91d010dbd848ab3a11815e5a3d109662a38b0cDavid LawrenceISC_LANG_ENDDECLS
49e558760e9c21a6b7c726ccf999a2711fd8eef9David Lawrence
0e1bef59f060f6442a93cb662b0313e8908500e1Bob Halley#endif /* ISC_DIR_H */