]> git.proxmox.com Git - wasi-libc.git/blame - libc-bottom-half/sources/getcwd.c
Don't use sbrk(0) to determine the initial heap size (#377)
[wasi-libc.git] / libc-bottom-half / sources / getcwd.c
CommitLineData
5b148b61
AC
1#include <unistd.h>
2#include <errno.h>
3#include <string.h>
dcd28cf8
AB
4#include "lock.h"
5
6char *__wasilibc_cwd = "/";
5b148b61 7
5b148b61 8#ifdef _REENTRANT
dcd28cf8
AB
9static volatile int lock[1];
10void __wasilibc_cwd_lock(void) { LOCK(lock); }
11void __wasilibc_cwd_unlock(void) { UNLOCK(lock); }
12#else
13#define __wasilibc_cwd_lock() (void)0
14#define __wasilibc_cwd_unlock() (void)0
5b148b61
AC
15#endif
16
5b148b61
AC
17char *getcwd(char *buf, size_t size)
18{
dcd28cf8 19 __wasilibc_cwd_lock();
5b148b61
AC
20 if (!buf) {
21 buf = strdup(__wasilibc_cwd);
22 if (!buf) {
23 errno = ENOMEM;
dcd28cf8 24 __wasilibc_cwd_unlock();
5b148b61
AC
25 return NULL;
26 }
27 } else {
28 size_t len = strlen(__wasilibc_cwd);
f4cc7a23 29 if (size < len + 1) {
5b148b61 30 errno = ERANGE;
dcd28cf8 31 __wasilibc_cwd_unlock();
5b148b61
AC
32 return NULL;
33 }
34 strcpy(buf, __wasilibc_cwd);
35 }
dcd28cf8 36 __wasilibc_cwd_unlock();
5b148b61
AC
37 return buf;
38}
39