dir.c revision 499b34cea04a46823d003d4c0520c8b03e8513cb
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 1999-2001 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * copyright notice and this permission notice appear in all copies.
2eeb74d1cf5355dd98f6d507a10086e16bb08c4bTinderbox User * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
83a28ca274521e15086fc39febde507bcc4e145eMark Andrews * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont/* $Id: dir.c,v 1.15 2001/01/09 21:58:12 bwelling Exp $ */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont/* Principal Authors: DCL */
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont#define VALID_DIR(dir) ISC_MAGIC_VALID(dir, ISC_DIR_MAGIC)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * Allocate workspace and open directory stream. If either one fails,
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews * NULL will be returned.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupontisc_dir_open(isc_dir_t *dir, const char *dirname) {
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Open stream.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Return previously retrieved file or get next one. Unix's dirent has
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * separate open and read functions, but the Win32 and DOS interfaces open
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * the dir stream and reads the first file in one operation.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont REQUIRE(VALID_DIR(dir) && dir->handle != NULL);
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Fetch next file in directory.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Make sure that the space for the name is long enough.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont if (sizeof(dir->entry.name) <= strlen(entry->d_name))
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Some dirents have d_namlen, but it is not portable.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Close directory stream.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont REQUIRE(VALID_DIR(dir) && dir->handle != NULL);
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt * Reposition directory stream at start.
a631b30b1ddd8b2ea780371d0d99ba1c05bc7e42Francis Dupont * Change the current directory to 'dirname'.
int pid;
return (result);