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 if (Progname = strrchr(argv[0], '/')) {
90 fprintf(stderr, "usage: %s path\n", argv[0]);
95 (void)dm_init_service(&name);
97 if (dm_path_to_handle(pathname, &hanp1, &hlen1) != 0) {
98 fprintf(stderr, "dm_path_to_handle failed, %s\n",
102 hash1 = dm_handle_hash(hanp1, hlen1);
103 hantoa(hanp1, hlen1, buffer1);
104 fprintf(stdout, " han1: hash %u value %s (dm_path_to_handle)\n",
106 if (dm_handle_is_valid(hanp1, hlen1) == DM_FALSE) {
107 fprintf(stderr, "ERROR: han1 is not valid\n");
110 if (dm_path_to_fshandle(pathname, &fshanp1, &fshlen1) != 0) {
111 fprintf(stderr, "dm_path_to_fshandle failed, %s\n",
115 fshash1 = dm_handle_hash(fshanp1, fshlen1);
116 hantoa(fshanp1, fshlen1, fsbuffer1);
117 fprintf(stdout, "fshan1: hash %u value %s (dm_path_to_fshandle\n",
119 if (dm_handle_is_valid(fshanp1, fshlen1) == DM_FALSE) {
120 fprintf(stderr, "ERROR: fshan1 is not valid\n");
123 if ((fd = open(pathname, O_RDONLY)) < 0) {
124 fprintf(stderr, "open of %s failed, %s\n", pathname,
128 if (dm_fd_to_handle(fd, &hanp2, &hlen2) != 0) {
129 fprintf(stderr, "dm_fd_to_handle failed, %s\n",
134 hash2 = dm_handle_hash(hanp2, hlen2);
135 hantoa(hanp2, hlen2, buffer2);
136 fprintf(stdout, " han2: hash %u value %s (dm_fd_to_handle)\n",
138 if (dm_handle_is_valid(hanp2, hlen2) == DM_FALSE) {
139 fprintf(stderr, "ERROR: han2 is not valid\n");
142 if (dm_handle_to_fshandle(hanp2, hlen2, &fshanp2, &fshlen2) != 0) {
143 fprintf(stderr, "dm_handle_to_fshandle failed, %s\n",
147 fshash2 = dm_handle_hash(fshanp2, fshlen2);
148 hantoa(fshanp2, fshlen2, fsbuffer2);
149 fprintf(stdout, "fshan2: hash %u value %s (dm_handle_to_fshandle)\n",
151 if (dm_handle_is_valid(fshanp2, fshlen2) == DM_FALSE) {
152 fprintf(stderr, "ERROR: fshan2 is not valid\n");
155 if (dm_handle_cmp(hanp1, hlen1, hanp2, hlen2)) {
156 fprintf(stderr, "ERROR: han1 and han2 differ in dm_handle_cmp\n");
158 if (strcmp(buffer1, buffer2)) {
159 fprintf(stderr, "ERROR: han1 and han2 differ in strcmp\n");
161 if (hash1 != hash2) {
162 fprintf(stderr, "ERROR: hash1 and hash2 differ\n");
165 if (dm_handle_cmp(fshanp1, fshlen1, fshanp2, fshlen2)) {
166 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in dm_handle_cmp\n");
168 if (strcmp(fsbuffer1, fsbuffer2)) {
169 fprintf(stderr, "ERROR: fshan1 and fshan2 differ in strcmp\n");
171 if (fshash1 != fshash2) {
172 fprintf(stderr, "ERROR: fshash1 and fshash2 differ\n");
175 /* Break the handle into its component parts and display them. Use
176 hantoa() instead of printing the parts directly because some are
177 32 bits on Veritas and 64 bits on SGI.
180 if (dm_handle_to_fsid(hanp1, hlen1, &fsid) != 0) {
181 fprintf(stderr, "dm_handle_to_fsid failed, %s\n",
185 hantoa(&fsid, sizeof(fsid), buffer);
186 fprintf(stdout, "fsid %s (dm_handle_to_fsid)\n", buffer);
188 if (dm_handle_to_ino(hanp1, hlen1, &ino) != 0) {
189 fprintf(stderr, "dm_handle_to_ino failed, %s\n",
193 hantoa(&ino, sizeof(ino), buffer);
194 fprintf(stdout, "ino %s (dm_handle_to_ino)\n", buffer);
196 if (dm_handle_to_igen(hanp1, hlen1, &igen) != 0) {
197 fprintf(stderr, "dm_handle_to_igen failed, %s\n",
201 hantoa(&igen, sizeof(igen), buffer);
202 fprintf(stdout, "igen %s (dm_handle_to_igen)\n", buffer);
204 /* Now use the parts to remake the handle and verify we get the same
208 if (dm_make_handle(&fsid, &ino, &igen, &hanp3, &hlen3) != 0) {
209 fprintf(stderr, "dm_make_handle failed, %s\n",
213 hash3 = dm_handle_hash(hanp3, hlen3);
214 hantoa(hanp3, hlen3, buffer3);
215 fprintf(stdout, " han3: hash %u value %s (dm_make_handle)\n",
217 if (dm_handle_is_valid(hanp3, hlen3) == DM_FALSE) {
218 fprintf(stderr, "ERROR: han3 is not valid\n");
221 if (dm_handle_cmp(hanp1, hlen1, hanp3, hlen3)) {
222 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in dm_handle_cmp\n");
224 if (strcmp(buffer1, buffer3)) {
225 fprintf(stderr, "ERROR: hanp1 and hanp3 differ in strcmp\n");
227 if (hash1 != hash3) {
228 fprintf(stderr, "ERROR: hash1 and hash3 differ\n");
231 if (dm_make_fshandle(&fsid, &fshanp3, &fshlen3) != 0) {
232 fprintf(stderr, "dm_make_fshandle failed, %s\n",
236 fshash3 = dm_handle_hash(fshanp3, fshlen3);
237 hantoa(fshanp3, fshlen3, fsbuffer3);
238 fprintf(stdout, "fshan3: hash %u value %s (dm_make_fshandle)\n",
240 if (dm_handle_is_valid(fshanp3, fshlen3) == DM_FALSE) {
241 fprintf(stderr, "ERROR: fshan3 is not valid\n");
244 if (dm_handle_cmp(fshanp1, fshlen1, fshanp3, fshlen3)) {
245 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in dm_handle_cmp\n");
247 if (strcmp(fsbuffer1, fsbuffer3)) {
248 fprintf(stderr, "ERROR: fshan1 and fshan3 differ in strcmp\n");
250 if (fshash1 != fshash3) {
251 fprintf(stderr, "ERROR: fshash1 and fshash3 differ\n");
254 dm_handle_free(hanp1, hlen1);
255 dm_handle_free(hanp2, hlen2);
256 dm_handle_free(hanp3, hlen3);
257 dm_handle_free(fshanp1, fshlen1);
258 dm_handle_free(fshanp2, fshlen2);
259 dm_handle_free(fshanp3, fshlen3);