xref: /csrg-svn/usr.bin/f77/libU77/chmod_.c (revision 12142)
111928Sdlw /*
2*12142Sdlw char	id_chmod[]	= "@(#)chmod_.c	1.2";
311928Sdlw  *
411928Sdlw  * chmod - change file mode bits
511928Sdlw  *
611928Sdlw  * synopsis:
711928Sdlw  *	integer function chmod (fname, mode)
811928Sdlw  *	character*(*) fname, mode
911928Sdlw  */
1011928Sdlw 
1111928Sdlw #include "../libI77/f_errno.h"
12*12142Sdlw #include <sys/param.h>
13*12142Sdlw #ifndef	MAXPATHLEN
14*12142Sdlw #define MAXPATHLEN	128
15*12142Sdlw #endif
1611928Sdlw 
1711928Sdlw long chmod_(name, mode, namlen, modlen)
1811928Sdlw char	*name, *mode;
1911928Sdlw long	namlen, modlen;
2011928Sdlw {
21*12142Sdlw 	char	nambuf[MAXPATHLEN];
2211928Sdlw 	char	modbuf[32];
2311928Sdlw 	int	retcode;
2411928Sdlw 
2511928Sdlw 	if (namlen >= sizeof nambuf || modlen >= sizeof modbuf)
2611928Sdlw 		return((long)(errno=F_ERARG));
2711928Sdlw 	g_char(name, namlen, nambuf);
2811928Sdlw 	g_char(mode, modlen, modbuf);
2911928Sdlw 	if (nambuf[0] == '\0')
3011928Sdlw 		return((long)(errno=ENOENT));
3111928Sdlw 	if (modbuf[0] == '\0')
3211928Sdlw 		return((long)(errno=F_ERARG));
3311928Sdlw 	if (fork())
3411928Sdlw 	{
3511928Sdlw 		if (wait(&retcode) == -1)
3611928Sdlw 			return((long)errno);
3711928Sdlw 		return((long)retcode);
3811928Sdlw 	}
3911928Sdlw 	else
4011928Sdlw 		execl("/bin/chmod", "chmod", modbuf, nambuf, (char *)0);
4111928Sdlw }
42