2
* See the file LICENSE for redistribution information.
4
* Copyright (c) 1997-2002
5
* Sleepycat Software. All rights reserved.
11
static const char revid[] = "$Id$";
14
#ifndef NO_SYSTEM_INCLUDES
15
#include <sys/types.h>
19
# define NAMLEN(dirent) strlen((dirent)->d_name)
21
# define dirent direct
22
# define NAMLEN(dirent) (dirent)->d_namlen
24
# include <sys/ndir.h>
40
* Return a list of the files in a directory.
42
* PUBLIC: int __os_dirlist __P((DB_ENV *, const char *, char ***, int *));
45
__os_dirlist(dbenv, dir, namesp, cntp)
53
int arraysz, cnt, ret;
56
if (DB_GLOBAL(j_dirlist) != NULL)
57
return (DB_GLOBAL(j_dirlist)(dir, namesp, cntp));
60
if ((dirp = opendir((char *)dir)) == NULL)
62
if ((dirp = opendir(dir)) == NULL)
64
return (__os_get_errno());
66
for (arraysz = cnt = 0; (dp = readdir(dirp)) != NULL; ++cnt) {
69
if ((ret = __os_realloc(dbenv,
70
arraysz * sizeof(names[0]), &names)) != 0)
73
if ((ret = __os_strdup(dbenv, dp->d_name, &names[cnt])) != 0)
82
nomem: if (names != NULL)
83
__os_dirfree(dbenv, names, cnt);
91
* Free the list of files.
93
* PUBLIC: void __os_dirfree __P((DB_ENV *, char **, int));
96
__os_dirfree(dbenv, names, cnt)
101
if (DB_GLOBAL(j_dirfree) != NULL)
102
DB_GLOBAL(j_dirfree)(names, cnt);
105
__os_free(dbenv, names[--cnt]);
106
__os_free(dbenv, names);