xref: /original-bsd/usr.bin/f77/libU77/access_.c (revision 40192f2d)
1 /*
2 char id_access[] = "@(#)access_.c	1.3";
3  *
4  * determine accessability of a file
5  *
6  * calling format:
7  *	integer access
8  *	ierror = access(filename, mode)
9  * where:
10  *	ierror will be 0 for successful access; an error number otherwise.
11  *	filename is a character string
12  *	mode is a character string which may include any combination of
13  *	'r', 'w', 'x', ' '. (' ' => test for existence)
14  */
15 
16 #include "../libI77/f_errno.h"
17 #include <sys/param.h>
18 #ifndef	MAXPATHLEN
19 #define MAXPATHLEN	128
20 #endif
21 
22 long access_(name, mode, namlen, modlen)
23 char *name, *mode;
24 long namlen, modlen;
25 {
26 	char buf[MAXPATHLEN];
27 	int m = 0;
28 
29 	if (namlen >= sizeof buf)
30 		return((long)(errno=F_ERARG));
31 	g_char(name, namlen, buf);
32 	if (buf[0] == '\0')
33 		return((long)(errno=ENOENT));
34 	if (access(buf, 0) < 0)
35 		return((long)errno);
36 	while (modlen--) switch(*mode++)
37 	{
38 		case 'x':
39 			m |= 1;
40 			break;
41 
42 		case 'w':
43 			m |= 2;
44 			break;
45 
46 		case 'r':
47 			m |= 4;
48 			break;
49 	}
50 	if (m > 0 && access(buf, m) < 0)
51 		return((long)errno);
52 	return(0L);
53 }
54