1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2001 Silicon Graphics, Inc.
17 /*---------------------------------------------------------------------------
19 Test program used to test all the DMAPI functions in dm_handle.c. The
24 where pathname is the name of a file. If any function fails, an error message
25 containing the work ERROR will be written to stderr.
27 Tested DMAPI functions are:
42 ----------------------------------------------------------------------------*/
56 void *hanp1, *hanp2, *hanp3, *fshanp1, *fshanp2, *fshanp3;
57 size_t hlen1, hlen2, hlen3, fshlen1, fshlen2, fshlen3;
58 u_int hash1, hash2, hash3, fshash1, fshash2, fshash3;
71 Progname = strrchr(argv[0], '/');
79 fprintf(stderr, "usage: %s path\n", argv[0]);
84 (void)dm_init_service(&name);
86 if (dm_path_to_handle(pathname, &hanp1, &hlen1) != 0) {
87 fprintf(stderr, "dm_path_to_handle failed, %s\n",
91 hash1 = dm_handle_hash(hanp1, hlen1);
92 hantoa(hanp1, hlen1, buffer1);
93 fprintf(stdout, " han1: hash %u value %s (dm_path_to_handle)\n",
95 if (dm_handle_is_valid(hanp1, hlen1) == DM_FALSE) {
96 fprintf(stderr, "ERROR: han1 is not valid\n");
99 if (dm_path_to_fshandle(pathname, &fshanp1, &fshlen1) != 0) {
100 fprintf(stderr, "dm_path_to_fshandle failed, %s\n",
104 fshash1 = dm_handle_hash(fshanp1, fshlen1);
105 hantoa(fshanp1, fshlen1, fsbuffer1);
106 fprintf(stdout, "fshan1: hash %u value %s (dm_path_to_fshandle\n",
108 if (dm_handle_is_valid(fshanp1, fshlen1) == DM_FALSE) {
109 fprintf(stderr, "ERROR: fshan1 is not valid\n");
112 if ((fd = open(pathname, O_RDONLY)) < 0) {
113 fprintf(stderr, "open of %s failed, %s\n", pathname,
117 if (dm_fd_to_handle(fd, &hanp2, &hlen2) != 0) {
118 fprintf(stderr, "dm_fd_to_handle failed, %s\n",
123 hash2 = dm_handle_hash(hanp2, hlen2);
124 hantoa(hanp2, hlen2, buffer2);
125 fprintf(stdout, " han2: hash %u value %s (dm_fd_to_handle)\n",
127 if (dm_handle_is_valid(hanp2, hlen2) == DM_FALSE) {
128 fprintf(stderr, "ERROR: han2 is not valid\n");
131 if (dm_handle_to_fshandle(hanp2, hlen2, &fshanp2, &fshlen2) != 0) {
132 fprintf(stderr, "dm_handle_to_fshandle failed, %s\n",
136 fshash2 = dm_handle_hash(fshanp2, fshlen2);
137 hantoa(fshanp2, fshlen2, fsbuffer2);
138 fprintf(stdout, "fshan2: hash %u value %s (dm_handle_to_fshandle)\n",
140 if (dm_handle_is_valid(fshanp2, fshlen2) == DM_FALSE) {
141 fprintf(stderr, "ERROR: fshan2 is not valid\n");
144 if (dm_handle_cmp(hanp1, hlen1, hanp2, hlen2)) {
145 fprintf(stderr, "ERROR: han1 and han2 differ in dm_handle_cmp\n");
147 if (strcmp(buffer1, buffer2)) {
148 fprintf(stderr, "ERROR: han1 and han2 differ in strcmp\n");
150 if (hash1 != hash2) {
151 fprintf(stderr, "ERROR: hash1 and hash2 differ\n");
154 if (dm_handle_cmp(fshanp1, fshlen1, fshanp2, fshlen2)) {
155 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in dm_handle_cmp\n");
157 if (strcmp(fsbuffer1, fsbuffer2)) {
158 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in strcmp\n");
160 if (fshash1 != fshash2) {
161 fprintf(stderr, "ERROR: fshash1 and fshash2 differ\n");
164 /* Break the handle into its component parts and display them. Use
165 hantoa() instead of printing the parts directly because some are
166 32 bits on Veritas and 64 bits on SGI.
169 if (dm_handle_to_fsid(hanp1, hlen1, &fsid) != 0) {
170 fprintf(stderr, "dm_handle_to_fsid failed, %s\n",
174 hantoa(&fsid, sizeof(fsid), buffer);
175 fprintf(stdout, "fsid %s (dm_handle_to_fsid)\n", buffer);
177 if (dm_handle_to_ino(hanp1, hlen1, &ino) != 0) {
178 fprintf(stderr, "dm_handle_to_ino failed, %s\n",
182 hantoa(&ino, sizeof(ino), buffer);
183 fprintf(stdout, "ino %s (dm_handle_to_ino)\n", buffer);
185 if (dm_handle_to_igen(hanp1, hlen1, &igen) != 0) {
186 fprintf(stderr, "dm_handle_to_igen failed, %s\n",
190 hantoa(&igen, sizeof(igen), buffer);
191 fprintf(stdout, "igen %s (dm_handle_to_igen)\n", buffer);
193 /* Now use the parts to remake the handle and verify we get the same
197 if (dm_make_handle(&fsid, &ino, &igen, &hanp3, &hlen3) != 0) {
198 fprintf(stderr, "dm_make_handle failed, %s\n",
202 hash3 = dm_handle_hash(hanp3, hlen3);
203 hantoa(hanp3, hlen3, buffer3);
204 fprintf(stdout, " han3: hash %u value %s (dm_make_handle)\n",
206 if (dm_handle_is_valid(hanp3, hlen3) == DM_FALSE) {
207 fprintf(stderr, "ERROR: han3 is not valid\n");
210 if (dm_handle_cmp(hanp1, hlen1, hanp3, hlen3)) {
211 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in dm_handle_cmp\n");
213 if (strcmp(buffer1, buffer3)) {
214 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in strcmp\n");
216 if (hash1 != hash3) {
217 fprintf(stderr, "ERROR: hash1 and hash3 differ\n");
220 if (dm_make_fshandle(&fsid, &fshanp3, &fshlen3) != 0) {
221 fprintf(stderr, "dm_make_fshandle failed, %s\n",
225 fshash3 = dm_handle_hash(fshanp3, fshlen3);
226 hantoa(fshanp3, fshlen3, fsbuffer3);
227 fprintf(stdout, "fshan3: hash %u value %s (dm_make_fshandle)\n",
229 if (dm_handle_is_valid(fshanp3, fshlen3) == DM_FALSE) {
230 fprintf(stderr, "ERROR: fshan3 is not valid\n");
233 if (dm_handle_cmp(fshanp1, fshlen1, fshanp3, fshlen3)) {
234 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in dm_handle_cmp\n");
236 if (strcmp(fsbuffer1, fsbuffer3)) {
237 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in strcmp\n");
239 if (fshash1 != fshash3) {
240 fprintf(stderr, "ERROR: fshash1 and fshash3 differ\n");
243 dm_handle_free(hanp1, hlen1);
244 dm_handle_free(hanp2, hlen2);
245 dm_handle_free(hanp3, hlen3);
246 dm_handle_free(fshanp1, fshlen1);
247 dm_handle_free(fshanp2, fshlen2);
248 dm_handle_free(fshanp3, fshlen3);