xref: /csrg-svn/usr.bin/f77/libU77/rename_.c (revision 23045)
112026Sdlw /*
2*23045Skre  * Copyright (c) 1980 Regents of the University of California.
3*23045Skre  * All rights reserved.  The Berkeley software License Agreement
4*23045Skre  * specifies the terms and conditions for redistribution.
512026Sdlw  *
6*23045Skre  *	@(#)rename_.c	5.1	06/07/85
7*23045Skre  */
8*23045Skre 
9*23045Skre /*
1012026Sdlw  * rename a file atomically
1112026Sdlw  *
1212026Sdlw  * synopsis:
1312026Sdlw  *	integer function rename (from, to)
1412026Sdlw  *	character*(*) from, to
1512026Sdlw  *
1612026Sdlw  * where:
1712026Sdlw  *	return value will be zero normally, an error number otherwise.
1812026Sdlw  */
1912026Sdlw 
2012026Sdlw #include "../libI77/f_errno.h"
2112145Sdlw #include <sys/param.h>
2212145Sdlw #ifndef	MAXPATHLEN
2312145Sdlw #define MAXPATHLEN	128
2412145Sdlw #endif
2512026Sdlw 
2612026Sdlw long
2712026Sdlw rename_ (from, to, frlen, tolen)
2812026Sdlw char	*from, *to;
2912026Sdlw long	frlen, tolen;
3012026Sdlw {
3112145Sdlw 	char	frbuf[MAXPATHLEN];
3212145Sdlw 	char	tobuf[MAXPATHLEN];
3312026Sdlw 
3412026Sdlw 	if (frlen <= 0 || tolen <= 0 || *from == ' ' || *to == ' ')
3512026Sdlw 		return ((long)(errno = F_ERARG));
3612026Sdlw 	if (frlen >= sizeof frbuf || tolen >= sizeof tobuf)
3712026Sdlw 		return ((long)(errno = F_ERARG));
3812026Sdlw 	g_char (from, frlen, frbuf);
3912026Sdlw 	g_char (to, tolen, tobuf);
4012026Sdlw 	if (rename (from, to) != 0)
4112026Sdlw 		return ((long)errno);
4212026Sdlw 	return (0L);
4312026Sdlw }
44