| #ident "$Id$" |
| /* ----------------------------------------------------------------------- * |
| * |
| * Copyright 2001 H. Peter Anvin - All Rights Reserved |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139, |
| * USA; either version 2 of the License, or (at your option) any later |
| * version; incorporated herein by reference. |
| * |
| * ----------------------------------------------------------------------- */ |
| |
| #include "config.h" |
| #include <stddef.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdio.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #ifdef HAVE_INTTYPES_H |
| #include <inttypes.h> |
| #endif |
| #ifdef HAVE_ENDIAN_H |
| #include <endian.h> |
| #endif |
| |
| #ifdef HAVE_SYSEXITS_H |
| #include <sysexits.h> |
| #else |
| #define EX_USAGE 64 /* command line usage error */ |
| #define EX_DATAERR 65 /* data format error */ |
| #define EX_NOINPUT 66 /* cannot open input */ |
| #define EX_NOUSER 67 /* addressee unknown */ |
| #define EX_NOHOST 68 /* host name unknown */ |
| #define EX_UNAVAILABLE 69 /* service unavailable */ |
| #define EX_SOFTWARE 70 /* internal software error */ |
| #define EX_OSERR 71 /* system error (e.g., can't fork) */ |
| #define EX_OSFILE 72 /* critical OS file missing */ |
| #define EX_CANTCREAT 73 /* can't create (user) output file */ |
| #define EX_IOERR 74 /* input/output error */ |
| #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ |
| #define EX_PROTOCOL 76 /* remote error in protocol */ |
| #define EX_NOPERM 77 /* permission denied */ |
| #define EX_CONFIG 78 /* configuration error */ |
| #endif |
| |
| /* File transformation functions */ |
| typedef int (*munger_func)(FILE *, FILE *, off_t); |
| int block_compress_file(FILE *, FILE *, off_t); |
| int block_uncompress_file(FILE *, FILE *, off_t); |
| |
| /* mkzftree.c */ |
| extern const char *program; /* Program name */ |
| enum verbosity { /* Message verbosity */ |
| vl_quiet, /* No messages */ |
| vl_error, /* Error messages only */ |
| vl_filename, /* Display filenames */ |
| vl_crib, /* Cribbing files */ |
| }; |
| #define default_verbosity vl_error |
| struct cmdline_options { |
| int force; /* Always compress */ |
| int level; /* Compression level */ |
| int parallel; /* Parallelism (0 = strictly serial) */ |
| int onefs; /* One filesystem only */ |
| int onedir; /* One directory only */ |
| int do_mkdir; /* Create stub directories */ |
| int file_root; /* The root may be a file */ |
| int sloppy; /* Don't make sure metadata is set correctly */ |
| enum verbosity verbosity; /* Message verbosity */ |
| munger_func munger; /* Default action */ |
| }; |
| extern struct cmdline_options opt; |
| |
| /* walk.c */ |
| int munge_tree(const char *, const char *, const char *); |
| int munge_entry(const char *, const char *, const char *, const struct stat *); |
| |
| /* workers.c */ |
| void wait_for_all_workers(void); |
| int spawn_worker(void); |
| void end_worker(int); |
| |
| /* util.c */ |
| void *xmalloc(size_t); |
| char *xstrdup(const char *); |
| void message(enum verbosity, const char *, ...); |
| |
| /* hash.c */ |
| const char *hash_find_file(struct stat *); |
| void hash_insert_file(struct stat *, const char *); |
| |