/* ** libtar_hash_free() - delete all of the nodes in the hash */ void libtar_hash_free(libtar_hash_t *h, libtar_freefunc_t freefunc) { int i; for (i = 0; i < h->numbuckets; i++) if (h->table[i] != NULL) libtar_list_free(h->table[i], freefunc); free(h->table); free(h); }
int main(int argc, char *argv[]) { char *tarfile = NULL; char *rootdir = NULL; int c; int mode = 0; libtar_list_t *l; int return_code = -2; while ((c = getopt(argc, argv, "clvVxh")) != -1) { switch (c) { case 'v': puts("libmavpar " PACKAGE_VERSION "\nCopyright 2015-2016 Mavicona, Quenza Inc.\n"); break; case 'c': if (mode) { usage(argv[0]); return 1; } mode = MODE_CREATE; break; case 'x': if (mode){ usage(argv[0]); return 1; } mode = MODE_EXTRACT; break; case 'l': if (mode) { usage(argv[0]); return 1; } mode = MODE_LIST; break; case 'h': default: usage(argv[0]); return 1; } } if (!mode || ((argc - optind) < (mode == MODE_CREATE ? 2 : 1))) { usage(argv[0]); return 2; } switch (mode) { case MODE_EXTRACT: return_code = par_extract(argv[optind], rootdir); break; case MODE_CREATE: tarfile = argv[optind]; l = libtar_list_new(LIST_QUEUE, NULL); for (c = optind + 1; c < argc; c++) libtar_list_add(l, argv[c]); return_code = par_create(tarfile, rootdir, l); libtar_list_free(l, NULL); break; case MODE_LIST: return_code = par_list(argv[optind]); break; default: break; } free(rootdir); return return_code; }