view ffstools/tiffs-mkfs/main.c @ 717:178ed445021d

tiffs-mkfs: journal creation implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 23 Aug 2020 03:40:10 +0000
parents 12ae93940467
children
line wrap: on
line source

#include <sys/types.h>
#include <sys/param.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "struct.h"
#include "globals.h"

void
process_cmdline(argc, argv)
	char **argv;
{
	extern int optind;
	extern char *optarg;
	int c;

	while ((c = getopt(argc, argv, "c:f:j:Jm:")) != EOF)
		switch (c) {
		case 'c':
			chunk_size_max = strtoul(optarg, 0, 0);
			continue;
		case 'f':
			if (*optarg != '/') {
				fprintf(stderr,
				"error: format name must begin with \'/\'\n");
				exit(1);
			}
			format_name = optarg;
			continue;
		case 'j':
			journal_size = strtoul(optarg, 0, 0);
			continue;
		case 'J':
			no_journal = 1;
			continue;
		case 'm':
			block_files_max = strtoul(optarg, 0, 0);
			continue;
		default:
usage:			fprintf(stderr,
			"usage: %s [options] <org> <srcdir> <outfile>\n",
				argv[0]);
			exit(1);
		}
	if (argc - optind != 3)
		goto usage;
	parse_org_arg(argv[optind]);
	input_host_dir = argv[optind+1];
	output_filename = argv[optind+2];
}

main(argc, argv)
	char **argv;
{
	process_cmdline(argc, argv);
	if (!format_name)
		format_name = "/";
	preen_chunk_size_max();
	preen_journal_size();
	preen_block_files_max();
	/* input phase */
	read_dir_level(&root, input_host_dir, 0);
	sort_dir_level(&root);
	/* output phase */
	prepare_output_buffers();
	open_output_file();
	create_root_dir();
	process_dir_level(&root);
	if (!no_journal)
		create_journal();
	finish_output();
	close(output_fd);
	exit(0);
}