aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.2.1-5666.3/libiberty/getcwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.2.1-5666.3/libiberty/getcwd.c')
-rw-r--r--gcc-4.2.1-5666.3/libiberty/getcwd.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/gcc-4.2.1-5666.3/libiberty/getcwd.c b/gcc-4.2.1-5666.3/libiberty/getcwd.c
new file mode 100644
index 000000000..28f26eb17
--- /dev/null
+++ b/gcc-4.2.1-5666.3/libiberty/getcwd.c
@@ -0,0 +1,62 @@
+/* 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;
+}