13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier int
access(char * name,int mode)53e12c5d1SDavid du Colombier access(char *name, int mode)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier int fd;
8*9a747e4fSDavid du Colombier Dir *db;
93e12c5d1SDavid du Colombier static char omode[] = {
103e12c5d1SDavid du Colombier 0,
113e12c5d1SDavid du Colombier OEXEC,
123e12c5d1SDavid du Colombier OWRITE,
133e12c5d1SDavid du Colombier ORDWR,
143e12c5d1SDavid du Colombier OREAD,
15*9a747e4fSDavid du Colombier OEXEC, /* only approximate */
163e12c5d1SDavid du Colombier ORDWR,
17*9a747e4fSDavid du Colombier ORDWR /* only approximate */
183e12c5d1SDavid du Colombier };
193e12c5d1SDavid du Colombier
207dd7cddfSDavid du Colombier if(mode == AEXIST){
21*9a747e4fSDavid du Colombier db = dirstat(name);
22*9a747e4fSDavid du Colombier free(db);
23*9a747e4fSDavid du Colombier if(db != nil)
243e12c5d1SDavid du Colombier return 0;
253e12c5d1SDavid du Colombier return -1;
263e12c5d1SDavid du Colombier }
273e12c5d1SDavid du Colombier fd = open(name, omode[mode&7]);
283e12c5d1SDavid du Colombier if(fd >= 0){
293e12c5d1SDavid du Colombier close(fd);
303e12c5d1SDavid du Colombier return 0;
313e12c5d1SDavid du Colombier }
323e12c5d1SDavid du Colombier return -1;
333e12c5d1SDavid du Colombier }
34