2 * Copyright (c) 2000-2001 Silicon Graphics, Inc.
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it would be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 #include <sys/types.h>
29 /*---------------------------------------------------------------------------
31 Test program used to test all the DMAPI functions in dm_handle.c. The
36 where pathname is the name of a file. If any function fails, an error message
37 containing the work ERROR will be written to stderr.
39 Tested DMAPI functions are:
54 ----------------------------------------------------------------------------*/
68 void *hanp1, *hanp2, *hanp3, *fshanp1, *fshanp2, *fshanp3;
69 size_t hlen1, hlen2, hlen3, fshlen1, fshlen2, fshlen3;
70 u_int hash1, hash2, hash3, fshash1, fshash2, fshash3;
83 Progname = strrchr(argv[0], '/');
91 fprintf(stderr, "usage: %s path\n", argv[0]);
96 (void)dm_init_service(&name);
98 if (dm_path_to_handle(pathname, &hanp1, &hlen1) != 0) {
99 fprintf(stderr, "dm_path_to_handle failed, %s\n",
103 hash1 = dm_handle_hash(hanp1, hlen1);
104 hantoa(hanp1, hlen1, buffer1);
105 fprintf(stdout, " han1: hash %u value %s (dm_path_to_handle)\n",
107 if (dm_handle_is_valid(hanp1, hlen1) == DM_FALSE) {
108 fprintf(stderr, "ERROR: han1 is not valid\n");
111 if (dm_path_to_fshandle(pathname, &fshanp1, &fshlen1) != 0) {
112 fprintf(stderr, "dm_path_to_fshandle failed, %s\n",
116 fshash1 = dm_handle_hash(fshanp1, fshlen1);
117 hantoa(fshanp1, fshlen1, fsbuffer1);
118 fprintf(stdout, "fshan1: hash %u value %s (dm_path_to_fshandle\n",
120 if (dm_handle_is_valid(fshanp1, fshlen1) == DM_FALSE) {
121 fprintf(stderr, "ERROR: fshan1 is not valid\n");
124 if ((fd = open(pathname, O_RDONLY)) < 0) {
125 fprintf(stderr, "open of %s failed, %s\n", pathname,
129 if (dm_fd_to_handle(fd, &hanp2, &hlen2) != 0) {
130 fprintf(stderr, "dm_fd_to_handle failed, %s\n",
135 hash2 = dm_handle_hash(hanp2, hlen2);
136 hantoa(hanp2, hlen2, buffer2);
137 fprintf(stdout, " han2: hash %u value %s (dm_fd_to_handle)\n",
139 if (dm_handle_is_valid(hanp2, hlen2) == DM_FALSE) {
140 fprintf(stderr, "ERROR: han2 is not valid\n");
143 if (dm_handle_to_fshandle(hanp2, hlen2, &fshanp2, &fshlen2) != 0) {
144 fprintf(stderr, "dm_handle_to_fshandle failed, %s\n",
148 fshash2 = dm_handle_hash(fshanp2, fshlen2);
149 hantoa(fshanp2, fshlen2, fsbuffer2);
150 fprintf(stdout, "fshan2: hash %u value %s (dm_handle_to_fshandle)\n",
152 if (dm_handle_is_valid(fshanp2, fshlen2) == DM_FALSE) {
153 fprintf(stderr, "ERROR: fshan2 is not valid\n");
156 if (dm_handle_cmp(hanp1, hlen1, hanp2, hlen2)) {
157 fprintf(stderr, "ERROR: han1 and han2 differ in dm_handle_cmp\n");
159 if (strcmp(buffer1, buffer2)) {
160 fprintf(stderr, "ERROR: han1 and han2 differ in strcmp\n");
162 if (hash1 != hash2) {
163 fprintf(stderr, "ERROR: hash1 and hash2 differ\n");
166 if (dm_handle_cmp(fshanp1, fshlen1, fshanp2, fshlen2)) {
167 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in dm_handle_cmp\n");
169 if (strcmp(fsbuffer1, fsbuffer2)) {
170 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in strcmp\n");
172 if (fshash1 != fshash2) {
173 fprintf(stderr, "ERROR: fshash1 and fshash2 differ\n");
176 /* Break the handle into its component parts and display them. Use
177 hantoa() instead of printing the parts directly because some are
178 32 bits on Veritas and 64 bits on SGI.
181 if (dm_handle_to_fsid(hanp1, hlen1, &fsid) != 0) {
182 fprintf(stderr, "dm_handle_to_fsid failed, %s\n",
186 hantoa(&fsid, sizeof(fsid), buffer);
187 fprintf(stdout, "fsid %s (dm_handle_to_fsid)\n", buffer);
189 if (dm_handle_to_ino(hanp1, hlen1, &ino) != 0) {
190 fprintf(stderr, "dm_handle_to_ino failed, %s\n",
194 hantoa(&ino, sizeof(ino), buffer);
195 fprintf(stdout, "ino %s (dm_handle_to_ino)\n", buffer);
197 if (dm_handle_to_igen(hanp1, hlen1, &igen) != 0) {
198 fprintf(stderr, "dm_handle_to_igen failed, %s\n",
202 hantoa(&igen, sizeof(igen), buffer);
203 fprintf(stdout, "igen %s (dm_handle_to_igen)\n", buffer);
205 /* Now use the parts to remake the handle and verify we get the same
209 if (dm_make_handle(&fsid, &ino, &igen, &hanp3, &hlen3) != 0) {
210 fprintf(stderr, "dm_make_handle failed, %s\n",
214 hash3 = dm_handle_hash(hanp3, hlen3);
215 hantoa(hanp3, hlen3, buffer3);
216 fprintf(stdout, " han3: hash %u value %s (dm_make_handle)\n",
218 if (dm_handle_is_valid(hanp3, hlen3) == DM_FALSE) {
219 fprintf(stderr, "ERROR: han3 is not valid\n");
222 if (dm_handle_cmp(hanp1, hlen1, hanp3, hlen3)) {
223 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in dm_handle_cmp\n");
225 if (strcmp(buffer1, buffer3)) {
226 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in strcmp\n");
228 if (hash1 != hash3) {
229 fprintf(stderr, "ERROR: hash1 and hash3 differ\n");
232 if (dm_make_fshandle(&fsid, &fshanp3, &fshlen3) != 0) {
233 fprintf(stderr, "dm_make_fshandle failed, %s\n",
237 fshash3 = dm_handle_hash(fshanp3, fshlen3);
238 hantoa(fshanp3, fshlen3, fsbuffer3);
239 fprintf(stdout, "fshan3: hash %u value %s (dm_make_fshandle)\n",
241 if (dm_handle_is_valid(fshanp3, fshlen3) == DM_FALSE) {
242 fprintf(stderr, "ERROR: fshan3 is not valid\n");
245 if (dm_handle_cmp(fshanp1, fshlen1, fshanp3, fshlen3)) {
246 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in dm_handle_cmp\n");
248 if (strcmp(fsbuffer1, fsbuffer3)) {
249 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in strcmp\n");
251 if (fshash1 != fshash3) {
252 fprintf(stderr, "ERROR: fshash1 and fshash3 differ\n");
255 dm_handle_free(hanp1, hlen1);
256 dm_handle_free(hanp2, hlen2);
257 dm_handle_free(hanp3, hlen3);
258 dm_handle_free(fshanp1, fshlen1);
259 dm_handle_free(fshanp2, fshlen2);
260 dm_handle_free(fshanp3, fshlen3);