1251875Speter/* Emulate getcwd using getwd.
2251875Speter   This function is in the public domain. */
3251875Speter
4251875Speter/*
5251875Speter
6251875Speter@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
7251875Speter
8251875SpeterCopy the absolute pathname for the current working directory into
9251875Speter@var{pathname}, which is assumed to point to a buffer of at least
10251875Speter@var{len} bytes, and return a pointer to the buffer.  If the current
11251875Speterdirectory's path doesn't fit in @var{len} characters, the result is
12251875Speter@code{NULL} and @code{errno} is set.  If @var{pathname} is a null pointer,
13251875Speter@code{getcwd} will obtain @var{len} bytes of space using
14251875Speter@code{malloc}.
15251875Speter
16251875Speter@end deftypefn
17251875Speter
18251875Speter*/
19251875Speter
20251875Speter#include "config.h"
21251875Speter
22251875Speter#ifdef HAVE_SYS_PARAM_H
23251875Speter#include <sys/param.h>
24251875Speter#endif
25251875Speter#include <errno.h>
26251875Speter#ifdef HAVE_STRING_H
27251875Speter#include <string.h>
28251875Speter#endif
29251875Speter#ifdef HAVE_STDLIB_H
30251875Speter#include <stdlib.h>
31251875Speter#endif
32251875Speter
33251875Speterextern char *getwd ();
34251875Speterextern int errno;
35251875Speter
36251875Speter#ifndef MAXPATHLEN
37251875Speter#define MAXPATHLEN 1024
38251875Speter#endif
39251875Speter
40251875Speterchar *
41251875Spetergetcwd (char *buf, size_t len)
42251875Speter{
43251875Speter  char ourbuf[MAXPATHLEN];
44251875Speter  char *result;
45251875Speter
46251875Speter  result = getwd (ourbuf);
47251875Speter  if (result) {
48251875Speter    if (strlen (ourbuf) >= len) {
49251875Speter      errno = ERANGE;
50251875Speter      return 0;
51251875Speter    }
52251875Speter    if (!buf) {
53251875Speter       buf = (char*)malloc(len);
54251875Speter       if (!buf) {
55251875Speter           errno = ENOMEM;
56251875Speter	   return 0;
57251875Speter       }
58251875Speter    }
59251875Speter    strcpy (buf, ourbuf);
60251875Speter  }
61251875Speter  return buf;
62251875Speter}
63251875Speter