/*- * Copyright (c) 1980 The Regents of the University of California. * All rights reserved. * * %sccs.include.proprietary.c% */ #ifndef lint static char sccsid[] = "@(#)access_.c 5.2 (Berkeley) 04/12/91"; #endif /* not lint */ /* * determine accessability of a file * * calling format: * integer access * ierror = access(filename, mode) * where: * ierror will be 0 for successful access; an error number otherwise. * filename is a character string * mode is a character string which may include any combination of * 'r', 'w', 'x', ' '. (' ' => test for existence) */ #include "../libI77/f_errno.h" #include #ifndef MAXPATHLEN #define MAXPATHLEN 128 #endif long access_(name, mode, namlen, modlen) char *name, *mode; long namlen, modlen; { char buf[MAXPATHLEN]; int m = 0; if (namlen >= sizeof buf) return((long)(errno=F_ERARG)); g_char(name, namlen, buf); if (buf[0] == '\0') return((long)(errno=ENOENT)); if (access(buf, 0) < 0) return((long)errno); while (modlen--) switch(*mode++) { case 'x': m |= 1; break; case 'w': m |= 2; break; case 'r': m |= 4; break; } if (m > 0 && access(buf, m) < 0) return((long)errno); return(0L); }