xref: /original-bsd/usr.bin/f77/libU77/chmod_.c (revision 2301fdfb)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)chmod_.c	5.1	06/07/85
7  */
8 
9 /*
10  * chmod - change file mode bits
11  *
12  * synopsis:
13  *	integer function chmod (fname, mode)
14  *	character*(*) fname, mode
15  */
16 
17 #include "../libI77/f_errno.h"
18 #include <sys/param.h>
19 #ifndef	MAXPATHLEN
20 #define MAXPATHLEN	128
21 #endif
22 
23 long chmod_(name, mode, namlen, modlen)
24 char	*name, *mode;
25 long	namlen, modlen;
26 {
27 	char	nambuf[MAXPATHLEN];
28 	char	modbuf[32];
29 	int	retcode;
30 
31 	if (namlen >= sizeof nambuf || modlen >= sizeof modbuf)
32 		return((long)(errno=F_ERARG));
33 	g_char(name, namlen, nambuf);
34 	g_char(mode, modlen, modbuf);
35 	if (nambuf[0] == '\0')
36 		return((long)(errno=ENOENT));
37 	if (modbuf[0] == '\0')
38 		return((long)(errno=F_ERARG));
39 	if (fork())
40 	{
41 		if (wait(&retcode) == -1)
42 			return((long)errno);
43 		return((long)retcode);
44 	}
45 	else
46 		execl("/bin/chmod", "chmod", modbuf, nambuf, (char *)0);
47 }
48