Exemplo n.º 1
0
/*
** 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);
}
Exemplo n.º 2
0
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;
}