#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void log_wrapper(FILE *f, const char *s, const char *buff)
{
	char dest[264];

	strcpy(dest, s);
	snprintf(&dest[strlen(dest)], 254 - strlen(dest), buff);
	dest[strcspn(dest, "\n")] = '\0';
	fprintf(f, "LOG: %s\n", dest);
}

int main(int argc, const char **argv, const char **envp)
{
	FILE *log;
	FILE *stream;
	int fd;
	char dest[104];

	if (argc != 2)
		printf("Usage: %s filename\n", *argv);
	log = fopen("./backups/.log", "w");
	if (!log) {
		printf("ERROR: Failed to open %s\n", "./backups/.log");
		exit(1);
	}
	log_wrapper(log, "Starting back up: ", argv[1]);
	stream = fopen(argv[1], "r");
	if (!stream) {
		printf("ERROR: Failed to open %s\n", argv[1]);
		exit(1);
	}
	strcpy(dest, "./backups/");
	strncat(dest, argv[1], 99 - strlen(dest));
	fd = open(dest, O_CREAT | O_WRONLY | O_EXCL, 0660);
	if (fd < 0) {
		printf("ERROR: Failed to open %s%s\n", "./backups/", argv[1]);
		exit(1);
	}
	for (size_t i = 0; i < sizeof(dest); i++) {
		char c = fgetc(stream);
		if (c == -1)
			break;
		dest[i] = c;
	}
	log_wrapper(log, "Finished back up ", argv[1]);
	fclose(stream);
	close(fd);
	return 0;
}
