#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

#define BUFFERSIZE  4096
#define COPYMODE  0644

void err(char *, char *);

int main(int ac, char *av[])
{
	int in_fd, out_fd, n_chars;
	char buf[BUFFERSIZE];
	struct stat ss;
	char odpowiedz[2];

	if ( ac != 3 && ac != 4){
		fprintf( stderr, "usage: %s [-i] source destination\n", *av);
		exit(1);
	}

	if ( (in_fd=open(av[ac - 2], O_RDONLY)) == -1 )
		err("Cannot open ", av[ac - 2]);
	if (strcmp(av[1], "-i") == 0)
	{
		if (stat(av[ac - 1], &ss) == 0)
		{
			printf("Plik %s juz istnieje. Nadpisac? [tn]: ", av[ac -1]);
			fgets(odpowiedz, sizeof(odpowiedz), stdin);
			if (odpowiedz[0] == 't')
			{
				printf("Nadpisuje plik docelowy %s.\n", av[ac - 1]);
			} else {
				exit(1);
			}
		}
	}

	if ( (out_fd=creat( av[ac - 1], COPYMODE)) == -1 )
		err( "Cannot creat", av[ac -1]);

	while ( (n_chars = read(in_fd , buf, BUFFERSIZE)) > 0 )
	if ( write( out_fd, buf, n_chars ) != n_chars )
		err("Write error to ", av[ac - 1]);

	if ( n_chars == -1 )
		err("Read error from ", av[ac - 2]);

	if ( close(in_fd) == -1 || close(out_fd) == -1 )
		err("Error closing files","");

	exit(0);
}

void err(char *s1, char *s2)
{
	fprintf(stderr,"Error: %s ", s1);
	perror(s2);
	exit(1);
}
