#include <initrd/initrd.h>
#include <stdio.h>
#include <string.h>

int file_size(FILE *file)
{
	fseek(file, 0, SEEK_END);
	int size = ftell(file);
	fseek(file, 0, SEEK_SET);
	return size;
}

int main(int argc, char **argv)
{
	if (argc == 1 || (argc > 1 && !strcmp(argv[1], "-h")))
	{
		fprintf(stderr, "%s <output> [input...]\n", argv[0]);
		return argc == 1;
	}

	FILE *out; /* output file */

	if (!strcmp(argv[1], "-"))
		out = stdin;
	else
		out = fopen(argv[1], "w");

	if (!out)
	{
		fprintf(stderr, "Failed to open %s\n", argv[1]);
		return 1;
	}

	/* Header */
	int num_files = argc - 2;
	struct initrd_global_header header = {
		.magic = INITRD_MAGIC,
		.num_files = num_files,
	};

	fwrite(&header, sizeof(header), 1, out);

	for (int i = 0; i < num_files; i++)
	{
		FILE *in = fopen(argv[i + 2], "rb");
		if (!in)
		{
			fprintf(stderr, "Failed to open %s\n", argv[i + 2]);
			return 2;
		}

		struct initrd_file_header file = {
			.size = file_size(in),
		};

		strcpy(file.name, argv[i + 2]);

		char c;
		while ((c = getc(in)) != EOF)
		{
			putc(c, out);
		}
		fclose(in);
	}
	fclose(out);
}
