2
* See the file LICENSE for redistribution information.
4
* Copyright (c) 1997-2001
5
* Sleepycat Software. All rights reserved.
11
static const char revid[] = "$Id: os_dir.c,v 11.10 2001/04/03 15:14:26 krinsky Exp $";
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>
41
* Return a list of the files in a directory.
43
* PUBLIC: int __os_dirlist __P((DB_ENV *, const char *, char ***, int *));
46
__os_dirlist(dbenv, dir, namesp, cntp)
54
int arraysz, cnt, ret;
57
if (__db_jump.j_dirlist != NULL)
58
return (__db_jump.j_dirlist(dir, namesp, cntp));
61
if ((dirp = opendir((char *)dir)) == NULL)
63
if ((dirp = opendir(dir)) == NULL)
65
return (__os_get_errno());
67
for (arraysz = cnt = 0; (dp = readdir(dirp)) != NULL; ++cnt) {
70
if ((ret = __os_realloc(dbenv,
71
arraysz * sizeof(names[0]), &names)) != 0)
74
if ((ret = __os_strdup(dbenv, dp->d_name, &names[cnt])) != 0)
83
nomem: if (names != NULL)
84
__os_dirfree(dbenv, names, cnt);
92
* Free the list of files.
94
* PUBLIC: void __os_dirfree __P((DB_ENV *, char **, int));
97
__os_dirfree(dbenv, names, cnt)
102
if (__db_jump.j_dirfree != NULL)
103
__db_jump.j_dirfree(names, cnt);
106
__os_free(dbenv, names[--cnt], 0);
107
__os_free(dbenv, names, 0);