xref: /csrg-svn/usr.bin/f77/libU77/chmod_.c (revision 11928)
1*11928Sdlw /*
2*11928Sdlw char	id_chmod[]	= "@(#)chmod_.c	1.1";
3*11928Sdlw  *
4*11928Sdlw  * chmod - change file mode bits
5*11928Sdlw  *
6*11928Sdlw  * synopsis:
7*11928Sdlw  *	integer function chmod (fname, mode)
8*11928Sdlw  *	character*(*) fname, mode
9*11928Sdlw  */
10*11928Sdlw 
11*11928Sdlw #include "../libI77/f_errno.h"
12*11928Sdlw 
13*11928Sdlw long chmod_(name, mode, namlen, modlen)
14*11928Sdlw char	*name, *mode;
15*11928Sdlw long	namlen, modlen;
16*11928Sdlw {
17*11928Sdlw 	char	nambuf[256];
18*11928Sdlw 	char	modbuf[32];
19*11928Sdlw 	int	retcode;
20*11928Sdlw 
21*11928Sdlw 	if (namlen >= sizeof nambuf || modlen >= sizeof modbuf)
22*11928Sdlw 		return((long)(errno=F_ERARG));
23*11928Sdlw 	g_char(name, namlen, nambuf);
24*11928Sdlw 	g_char(mode, modlen, modbuf);
25*11928Sdlw 	if (nambuf[0] == '\0')
26*11928Sdlw 		return((long)(errno=ENOENT));
27*11928Sdlw 	if (modbuf[0] == '\0')
28*11928Sdlw 		return((long)(errno=F_ERARG));
29*11928Sdlw 	if (fork())
30*11928Sdlw 	{
31*11928Sdlw 		if (wait(&retcode) == -1)
32*11928Sdlw 			return((long)errno);
33*11928Sdlw 		return((long)retcode);
34*11928Sdlw 	}
35*11928Sdlw 	else
36*11928Sdlw 		execl("/bin/chmod", "chmod", modbuf, nambuf, (char *)0);
37*11928Sdlw }
38