USG_PG3/usr/source/sccsutil2/rename.c

# include "../sccshead/statbuf.h"

char rename_____[] "~|^`rename.c	1.3";
/*
	rename (unlink/link): write permission in directories is required
	(either implicity - owner == effuid, or explicitly)
	Calls xlink() and xunlink().
*/

rename(oldname,newname)
char *oldname, *newname;
{
	register int mo;
	int mn;
	struct Statbuf buf;
	char *dold, *dnew;

	dold = dname(oldname);
	dnew = dname(newname);
	if(stat(dold,&buf) == -1)
		fatal("directory `",dold,"' nonexistent (213)");
	mo = buf.flags;
	if(stat(dnew,&buf) == -1)
		fatal("directory `",dnew,"' nonexistent (213)");
	mn = buf.flags;
	chmod(dold,mo|(IWRITE|IEXEC));
	chmod(dnew,mn|(IWRITE|IEXEC));
/*
	Just in case the newname is already being used, remove it if
	it is there.
*/
	unlink(newname);

	xlink(oldname,newname);
	xunlink(oldname);
	chmod(dold,mo);
	chmod(dnew,mn);
}