AUSAM/source/S/lcopy.c

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

/*
 *
 * lcopy.c:
 *	copies a locked file into
 *	into a another file of
 *	mode 0604
 *
 *	if argc == 2 then
 *	the locked file is written
 *	onto standard output
 *
 */
main(argc,argv)
int argc;
char ** argv;
{
	int buf[256];
	register a, b, c;
	if((argc > 3) || (argc < 2))
	{
		prints(2,"usage:\n	lcopy source [destination]\n");
		exit(-1);
	}
	b = open(argv[1],2);
	if( b == -1 )
	{
		perror(argv[1]);
		exit(-1);
	}
	fstat( b , buf );
	if( (buf[2]&02010) == 0 )
	{
		prints(2,"source not a locked file ??\n");
		exit(-1);
	}
	if( argc == 3 )
	{
		a = creat(argv[2],0600);
		if (a == -1) 
		{
			perror(argv[2]);
			exit(-1);
		}
	}
	else
	{
		a = 1;
	}
	writelock(b);
	while((c = read(b,buf,512)) > 0)
		write(a,buf,c);
	creat(argv[1],2610);	/* must exist, so mode has little relevance */
}