about summary refs log tree commit diff
path: root/db2/os/os_dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'db2/os/os_dir.c')
-rw-r--r--db2/os/os_dir.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/db2/os/os_dir.c b/db2/os/os_dir.c
index 14a10ad23f..f2ee128c1e 100644
--- a/db2/os/os_dir.c
+++ b/db2/os/os_dir.c
@@ -8,7 +8,7 @@
 #include "config.h"
 
 #ifndef lint
-static const char sccsid[] = "@(#)os_dir.c	10.15 (Sleepycat) 4/26/98";
+static const char sccsid[] = "@(#)os_dir.c	10.19 (Sleepycat) 10/12/98";
 #endif /* not lint */
 
 #ifndef NO_SYSTEM_INCLUDES
@@ -35,6 +35,7 @@ static const char sccsid[] = "@(#)os_dir.c	10.15 (Sleepycat) 4/26/98";
 #endif
 
 #include "db_int.h"
+#include "os_jump.h"
 
 /*
  * __os_dirlist --
@@ -50,22 +51,23 @@ __os_dirlist(dir, namesp, cntp)
 {
 	struct dirent *dp;
 	DIR *dirp;
-	int arraysz, cnt;
+	int arraysz, cnt, ret;
 	char **names;
 
+	if (__db_jump.j_dirlist != NULL)
+		return (__db_jump.j_dirlist(dir, namesp, cntp));
+
 	if ((dirp = opendir(dir)) == NULL)
 		return (errno);
 	names = NULL;
 	for (arraysz = cnt = 0; (dp = readdir(dirp)) != NULL; ++cnt) {
 		if (cnt >= arraysz) {
 			arraysz += 100;
-			names = (char **)(names == NULL ?
-			    __db_malloc(arraysz * sizeof(names[0])) :
-			    __db_realloc(names, arraysz * sizeof(names[0])));
-			if (names == NULL)
+			if ((ret = __os_realloc(&names,
+			    arraysz * sizeof(names[0]))) != 0)
 				goto nomem;
 		}
-		if ((names[cnt] = (char *)__db_strdup(dp->d_name)) == NULL)
+		if ((ret = __os_strdup(dp->d_name, &names[cnt])) != 0)
 			goto nomem;
 	}
 	(void)closedir(dirp);
@@ -76,7 +78,7 @@ __os_dirlist(dir, namesp, cntp)
 
 nomem:	if (names != NULL)
 		__os_dirfree(names, cnt);
-	return (ENOMEM);
+	return (ret);
 }
 
 /*
@@ -90,7 +92,10 @@ __os_dirfree(names, cnt)
 	char **names;
 	int cnt;
 {
+	if (__db_jump.j_dirfree != NULL)
+		__db_jump.j_dirfree(names, cnt);
+
 	while (cnt > 0)
-		__db_free(names[--cnt]);
-	__db_free(names);
+		__os_free(names[--cnt], 0);
+	__os_free(names, 0);
 }