diff options
Diffstat (limited to 'guts/getcwd.c')
-rw-r--r-- | guts/getcwd.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/guts/getcwd.c b/guts/getcwd.c new file mode 100644 index 0000000..d8f4d36 --- /dev/null +++ b/guts/getcwd.c @@ -0,0 +1,40 @@ +/* + * static char * + * wrap_getcwd(char *buf, size_t size) { + * char * rc = NULL; + */ + pseudo_debug(2, "wrap_getcwd: %p, %lu\n", + (void *) buf, (unsigned long) size); + if (!pseudo_cwd) { + pseudo_diag("Asked for CWD, but don't have it!\n"); + errno = EACCES; + return NULL; + } + /* emulate Linux semantics in case of non-Linux systems. */ + if (!buf) { + /* if we don't have one, something's very wrong... */ + if (!size) { + size = pseudo_cwd_len; + } + if (size) { + buf = malloc(size); + } else { + pseudo_diag("can't figure out CWD: length %ld\n", + (unsigned long) pseudo_cwd_len); + } + if (!buf) { + pseudo_diag("couldn't allocate requested CWD buffer - need %ld byes\n", + (unsigned long) size); + errno = ENOMEM; + return NULL; + } + } + rc = buf; + memcpy(buf, pseudo_cwd, pseudo_cwd_len + 1); + if (!*buf) { + strcpy(buf, "/"); + } + +/* return rc; + * } + */ |