xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/getcwd.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
13e12c5d1SDavid du Colombier #include "lib.h"
23e12c5d1SDavid du Colombier #include <stddef.h>
37dd7cddfSDavid du Colombier #include <stdlib.h>
43e12c5d1SDavid du Colombier #include <unistd.h>
53e12c5d1SDavid du Colombier #include <errno.h>
63e12c5d1SDavid du Colombier #include <string.h>
73e12c5d1SDavid du Colombier #include <stdio.h>
83e12c5d1SDavid du Colombier #include "sys9.h"
93e12c5d1SDavid du Colombier #include "dir.h"
103e12c5d1SDavid du Colombier 
117dd7cddfSDavid du Colombier char*
getcwd(char * buf,size_t len)127dd7cddfSDavid du Colombier getcwd(char *buf, size_t len)
137dd7cddfSDavid du Colombier {
147dd7cddfSDavid du Colombier 	int fd;
157dd7cddfSDavid du Colombier 
167dd7cddfSDavid du Colombier 	fd = _OPEN(".", OREAD);
177dd7cddfSDavid du Colombier 	if(fd < 0) {
187dd7cddfSDavid du Colombier 		errno = EACCES;
197dd7cddfSDavid du Colombier 		return 0;
207dd7cddfSDavid du Colombier 	}
217dd7cddfSDavid du Colombier 	if(_FD2PATH(fd, buf, len) < 0) {
227dd7cddfSDavid du Colombier 		errno = EIO;
237dd7cddfSDavid du Colombier 		_CLOSE(fd);
247dd7cddfSDavid du Colombier 		return 0;
257dd7cddfSDavid du Colombier 	}
267dd7cddfSDavid du Colombier 	_CLOSE(fd);
27*9a747e4fSDavid du Colombier 
28*9a747e4fSDavid du Colombier /* RSC: is this necessary? */
297dd7cddfSDavid du Colombier 	if(buf[0] == '\0')
307dd7cddfSDavid du Colombier 		strcpy(buf, "/");
317dd7cddfSDavid du Colombier 	return buf;
327dd7cddfSDavid du Colombier }
33