123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* Emulate getcwd using getwd.
- This function is in the public domain. */
- /*
- @deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
- Copy the absolute pathname for the current working directory into
- @var{pathname}, which is assumed to point to a buffer of at least
- @var{len} bytes, and return a pointer to the buffer. If the current
- directory's path doesn't fit in @var{len} characters, the result is
- @code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer,
- @code{getcwd} will obtain @var{len} bytes of space using
- @code{malloc}.
- @end deftypefn
- */
- #include "config.h"
- #ifdef HAVE_SYS_PARAM_H
- #include <sys/param.h>
- #endif
- #include <errno.h>
- #ifdef HAVE_STRING_H
- #include <string.h>
- #endif
- #ifdef HAVE_STDLIB_H
- #include <stdlib.h>
- #endif
- extern char *getwd ();
- extern int errno;
- #ifndef MAXPATHLEN
- #define MAXPATHLEN 1024
- #endif
- char *
- getcwd (char *buf, size_t len)
- {
- char ourbuf[MAXPATHLEN];
- char *result;
- result = getwd (ourbuf);
- if (result) {
- if (strlen (ourbuf) >= len) {
- errno = ERANGE;
- return 0;
- }
- if (!buf) {
- buf = (char*)malloc(len);
- if (!buf) {
- errno = ENOMEM;
- return 0;
- }
- }
- strcpy (buf, ourbuf);
- }
- return buf;
- }
|