3 * dumpscan - routines for scanning and manipulating AFS volume dumps
5 * Copyright (c) 1998 Carnegie Mellon University
8 * Permission to use, copy, modify and distribute this software and its
9 * documentation is hereby granted, provided that both the copyright
10 * notice and this permission notice appear in all copies of the
11 * software, derivative works or modified versions, and any portions
12 * thereof, and that both notices appear in supporting documentation.
14 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
15 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
16 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
18 * Carnegie Mellon requests users of this software to return to
20 * Software Distribution Coordinator or Software_Distribution@CS.CMU.EDU
21 * School of Computer Science
22 * Carnegie Mellon University
23 * Pittsburgh PA 15213-3890
25 * any improvements or extensions that they make and grant Carnegie Mellon
26 * the rights to redistribute these changes.
29 /* afsdump_dirlist.c - List an AFS directory file */
31 #include <afsconfig.h>
32 #include <afs/param.h>
37 #include <afs/com_err.h>
38 #include <afs/cellconfig.h>
39 #include <afs/vlserver.h>
40 #include <afs/afsint.h>
41 #include <afs/volser.h>
45 #include "dumpscan_errs.h"
52 static char *input_path
;
53 static int quiet
, verbose
, error_count
;
55 static dump_parser dp
;
58 /* Print a usage message and exit */
60 usage(int status
, char *msg
)
63 fprintf(stderr
, "%s: %s\n", argv0
, msg
);
64 fprintf(stderr
, "Usage: %s [options] [file]\n", argv0
);
65 fprintf(stderr
, " -h Print this help message\n");
66 fprintf(stderr
, " -q Quiet mode (don't print errors)\n");
67 fprintf(stderr
, " -v Verbose mode\n");
72 /* Parse the command-line options */
74 parse_options(int argc
, char **argv
)
78 /* Set the program name */
79 if ((argv0
= strrchr(argv
[0], '/')) != NULL
)
84 /* Initialize options */
88 /* Initialize other stuff */
91 /* Parse the options */
92 while ((c
= getopt(argc
, argv
, "hqv")) != EOF
) {
103 usage(1, "Invalid option!");
107 if (quiet
&& verbose
)
108 usage(1, "Can't specify both -q and -v");
110 /* Parse non-option arguments */
111 if (argc
- optind
> 1)
112 usage(1, "Too many arguments!");
113 input_path
= (argc
== optind
) ? "-" : argv
[optind
];
117 /* A callback to count and print errors */
119 my_error_cb(afs_uint32 code
, int fatal
, void *ref
, char *msg
, ...)
125 va_start(alist
, msg
);
126 afs_com_err_va(argv0
, code
, msg
, alist
);
135 main(int argc
, char **argv
)
140 parse_options(argc
, argv
);
141 initialize_acfg_error_table();
142 initialize_AVds_error_table();
143 initialize_rxk_error_table();
144 initialize_u_error_table();
145 initialize_vl_error_table();
146 initialize_vols_error_table();
147 initialize_xFil_error_table();
148 r
= xfopen(&input_file
, O_RDONLY
, input_path
);
150 afs_com_err(argv0
, r
, "opening %s", input_path
);
154 memset(&dp
, 0, sizeof(dp
));
155 dp
.cb_error
= my_error_cb
;
156 dp
.print_flags
= DSPRINT_DIR
;
157 if (input_file
.is_seekable
)
158 dp
.flags
|= DSFLAG_SEEK
;
160 r
= ParseDirectory(&input_file
, &dp
, 0, 1);
161 xfclose(&input_file
);
163 if (verbose
&& error_count
)
164 fprintf(stderr
, "*** %d errors\n", error_count
);
166 fprintf(stderr
, "*** FAILED: %s\n", afs_error_message(r
));