V2/cmd/cp.c

Compare this file to the similar file:
Show the results in this format:

main(argc,argv)
char **argv;
{
char buf[512];
int fold, fnew, n;
char *p1, *p2, *bp;
int mode;
	if(argc != 3) {
		write(1,"Usage: cp oldfile newfile\n",26);
		exit();
	}
	if((fold = open(argv[1],0)) < 0){
		write(1,"Cannot open old file.\n",22);
		exit();
	}
	fstat(fold,buf);
	mode = buf[2] & 037;
	if((fnew = creat(argv[2],mode)) < 0){
		stat(argv[2], buf);
		if((buf[3] & 0100) != 0){
			p1 = argv[1] - 1;
			p2 = argv[2] - 1;
			bp = buf - 1;
			while(*++bp = *++p2);
			*bp = '/';
			p2 = bp;
			while(*++bp = *++p1)
				if(*bp == '/')
					bp = p2;
			if((fnew = creat(buf,mode)) < 0){
				write(1,"Cannot creat new file.\n",23);
				exit();
			}
		}else{
		write(1,"Cannot creat new file.\n",23);
		exit();
		}
	}
	while(n = read(fold, buf, 512))
	if(n < 0){
		write(1,"Read error\n",11);
		exit();
	}else
		if(write(fnew,buf,n) != n){
			write(1,"Write error.\n",13);
			exit();
		}
	fstat(fnew,buf);
	exit();
}