1 /*
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2005, 2013 Oracle and/or its affiliates. All rights reserved.
5 *
6 * $Id$
7 */
8
9 #include "bench.h"
10
11 static int b_util_testdir_remove __P((char *));
12
13 int
b_util_have_hash()14 b_util_have_hash()
15 {
16 #if defined(HAVE_HASH) ||\
17 DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 2
18 return (0);
19 #else
20 fprintf(stderr,
21 "library build did not include support for the Hash access method\n");
22 return (1);
23 #endif
24 }
25
26 int
b_util_have_heap()27 b_util_have_heap()
28 {
29 #if defined(HAVE_HEAP) ||\
30 DB_VERSION_MAJOR < 5 || DB_VERSION_MAJOR == 5 && DB_VERSION_MINOR < 2
31 return (0);
32 #else
33 fprintf(stderr,
34 "library build did not include support for the Heap access method\n");
35 return (1);
36 #endif
37 }
38
39 int
b_util_have_queue()40 b_util_have_queue()
41 {
42 #if defined(HAVE_QUEUE) ||\
43 DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 2
44 return (0);
45 #else
46 fprintf(stderr,
47 "library build did not include support for the Queue access method\n");
48 return (1);
49 #endif
50 }
51
52 /*
53 * b_util_dir_setup --
54 * Create the test directory.
55 */
56 int
b_util_dir_setup()57 b_util_dir_setup()
58 {
59 int ret;
60
61 #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 3
62 if ((ret = __os_mkdir(NULL, TESTDIR, 0755)) != 0) {
63 #else
64 if ((ret = mkdir(TESTDIR, 0755)) != 0) {
65 #endif
66 fprintf(stderr,
67 "%s: %s: %s\n", progname, TESTDIR, db_strerror(ret));
68 return (1);
69 }
70 return (0);
71 }
72
73 #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 4
74 #define OS_EXISTS(a, b, c) __os_exists(a, b, c)
75 #else
76 #define OS_EXISTS(a, b, c) __os_exists(b, c)
77 #endif
78
79 /*
80 * b_util_dir_teardown
81 * Clean up the test directory.
82 */
83 int
84 b_util_dir_teardown()
85 {
86 int ret;
87
88 if (OS_EXISTS(NULL, TESTFILE, NULL) == 0 &&
89 (ret = b_util_unlink(TESTFILE)) != 0) {
90 fprintf(stderr,
91 "%s: %s: %s\n", progname, TESTFILE, db_strerror(ret));
92 return (1);
93 }
94 return (b_util_testdir_remove(TESTDIR) ? 1 : 0);
95 }
96
97 /*
98 * testdir_remove --
99 * Remove a directory and all its contents, the "dir" must contain no
100 * subdirectories, because testdir_remove will not recursively delete
101 * all subdirectories.
102 */
103 static int
104 b_util_testdir_remove(dir)
105 char *dir;
106 {
107 int cnt, i, isdir, ret;
108 char buf[1024], **names;
109
110 ret = 0;
111
112 /* If the directory doesn't exist, we're done. */
113 if (OS_EXISTS(NULL, dir, &isdir) != 0)
114 return (0);
115
116 /* Get a list of the directory contents. */
117 #if DB_VERSION_MAJOR > 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 6
118 if ((ret = __os_dirlist(NULL, dir, 0, &names, &cnt)) != 0)
119 return (ret);
120 #else
121 if ((ret = __os_dirlist(NULL, dir, &names, &cnt)) != 0)
122 return (ret);
123 #endif
124 /* Go through the file name list, remove each file in the list */
125 for (i = 0; i < cnt; ++i) {
126 (void)snprintf(buf, sizeof(buf),
127 "%s%c%s", dir, PATH_SEPARATOR[0], names[i]);
128 if ((ret = OS_EXISTS(NULL, buf, &isdir)) != 0)
129 goto file_err;
130 if (!isdir && (ret = b_util_unlink(buf)) != 0) {
131 file_err: fprintf(stderr, "%s: %s: %s\n",
132 progname, buf, db_strerror(ret));
133 break;
134 }
135 }
136
137 __os_dirfree(NULL, names, cnt);
138
139 /*
140 * If we removed the contents of the directory, remove the directory
141 * itself.
142 */
143 if (i == cnt && (ret = rmdir(dir)) != 0)
144 fprintf(stderr,
145 "%s: %s: %s\n", progname, dir, db_strerror(errno));
146 return (ret);
147 }
148
149 void
150 b_util_abort()
151 {
152 #if DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 6
153 abort();
154 #elif DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 6
155 __os_abort();
156 #else
157 __os_abort(NULL);
158 #endif
159 }
160
161 int
162 b_util_unlink(path)
163 char *path;
164 {
165 #if DB_VERSION_MAJOR < 4 || DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR < 7
166 return (__os_unlink(NULL, path));
167 #else
168 return (__os_unlink(NULL, path, 0));
169 #endif
170 }
171