aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/bootlib/osfpathname.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/boot/bootlib/osfpathname.c')
-rw-r--r--unix/boot/bootlib/osfpathname.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/unix/boot/bootlib/osfpathname.c b/unix/boot/bootlib/osfpathname.c
new file mode 100644
index 00000000..17fdba61
--- /dev/null
+++ b/unix/boot/bootlib/osfpathname.c
@@ -0,0 +1,41 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "bootlib.h"
+
+
+/* OS_FPATHNAME -- Map a VFN (virtual filename) into a pathname (filename
+ * specification which is independent of the current directory).
+ */
+int
+os_fpathname (
+ char *vfn, /* virtual filename */
+ char *osfn, /* OS filename */
+ int maxch
+)
+{
+ XCHAR x_vfn[SZ_PATHNAME+1];
+ XCHAR x_osfn[SZ_PATHNAME+1];
+ XINT x_maxch = SZ_PATHNAME, x_nchars;
+
+ extern int ZFGCWD(), ZFSUBD(), ZFPATH();
+
+
+ if (vfn[0])
+ os_strupk (vfn2osfn(vfn,0), x_vfn, x_maxch);
+ else
+ x_vfn[0] = 0;
+
+ if (vfn[0] == '.' && (vfn[1] == EOS || vfn[2] == EOS)) {
+ ZFGCWD (x_osfn, &x_maxch, &x_nchars);
+ os_strupk ((char *)x_osfn, x_osfn, x_maxch);
+ if (vfn[1] == '.') {
+ os_strupk (vfn, x_vfn, x_maxch);
+ ZFSUBD (x_osfn, &x_maxch, x_vfn, &x_nchars);
+ }
+ } else
+ ZFPATH (x_vfn, x_osfn, &x_maxch, &x_nchars);
+
+ os_strpak (x_osfn, osfn, maxch);
+ return (x_nchars);
+}