#include #include /* For Lattice 3.10, must be before exec.h! */ #include #include #include #undef TRUE #undef FALSE #ifdef LATTICE /* Lattice 3.10 version is hosed, use our own */ #include int access (path, mode) char *path; int mode; { long lck; struct FileInfoBlock *fp; int rtnval = 0; register long prot; extern long Lock (); extern void *AllocMem (); if ((path == 0) || ((lck = Lock (path, (long) ACCESS_READ)) == 0)) { rtnval = -1; errno = ENOENT; } else { fp = (struct FileInfoBlock *) AllocMem ((long) sizeof (struct FileInfoBlock), (long) (MEMF_CLEAR | MEMF_CHIP)); if (Examine (lck, fp) == 0) { rtnval = -1; errno = EACCES; } else { prot = fp -> fib_Protection; if ( ((mode & 1) && (prot & FIBF_EXECUTE)) || ((mode & 2) && (prot & FIBF_WRITE)) || ((mode & 4) && (prot & FIBF_READ))) { rtnval = -1; errno = EACCES; } } FreeMem (fp, (long) sizeof (struct FileInfoBlock)); UnLock (lck); } return (rtnval); } #endif