aboutsummaryrefslogtreecommitdiff
path: root/unix/os/zfgcwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/os/zfgcwd.c')
-rw-r--r--unix/os/zfgcwd.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/unix/os/zfgcwd.c b/unix/os/zfgcwd.c
new file mode 100644
index 00000000..29b476c0
--- /dev/null
+++ b/unix/os/zfgcwd.c
@@ -0,0 +1,65 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include <stdio.h>
+
+#define import_spp
+#define import_kernel
+#define import_knames
+#include <iraf.h>
+
+extern char oscwd[];
+
+
+/* ZFGCWD -- Get working (current) UNIX directory. The current working
+ * directory, once set, is saved in oscwd.
+ */
+int
+ZFGCWD (
+ PKCHAR *outstr,
+ XINT *maxch,
+ XINT *status
+)
+{
+ register char *ip, *op;
+ register int n;
+ char dirname[1025];
+#ifdef POSIX
+ char *getcwd();
+#else
+ char *getwd();
+#endif
+
+ /* If cwd is already known, just return the name. Reconstructing
+ * the pathname of the cwd is expensive on some systems.
+ */
+ if (oscwd[0] != EOS)
+ ip = oscwd;
+ else {
+#ifdef POSIX
+ ip = getcwd (dirname, 1024);
+#else
+ ip = getwd (dirname);
+#endif
+ if (ip == NULL) {
+ *status = XERR;
+ return (XERR);
+ } else
+ strcpy (oscwd, dirname);
+ }
+
+ op = (char *)outstr;
+ for (n = *maxch; --n >= 0 && (*op = *ip++) != EOS; )
+ op++;
+
+ /* Make sure a concatenatable directory prefix is returned.
+ */
+ if (*(op-1) != '/') {
+ *op++ = '/';
+ *op = EOS;
+ }
+
+ *status = op - (char *)outstr;
+
+ return (*status);
+}