aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.in26
-rw-r--r--Mkfiles/msvc.mak20
-rw-r--r--Mkfiles/openwcom.mak20
-rw-r--r--nasmlib/path.c131
4 files changed, 172 insertions, 25 deletions
diff --git a/Makefile.in b/Makefile.in
index aadd5678..71783af4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -100,7 +100,8 @@ LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) \
nasmlib/crc64.$(O) nasmlib/malloc.$(O) \
nasmlib/md5c.$(O) nasmlib/string.$(O) \
nasmlib/file.$(O) nasmlib/mmap.$(O) nasmlib/ilog2.$(O) \
- nasmlib/realpath.$(O) nasmlib/filename.$(O) nasmlib/srcfile.$(O) \
+ nasmlib/realpath.$(O) nasmlib/path.$(O) \
+ nasmlib/filename.$(O) nasmlib/srcfile.$(O) \
nasmlib/zerobuf.$(O) nasmlib/readnum.$(O) nasmlib/bsi.$(O) \
nasmlib/rbtree.$(O) nasmlib/hashtbl.$(O) \
nasmlib/raa.$(O) nasmlib/saa.$(O) \
@@ -628,6 +629,9 @@ nasmlib/md5c.$(O): nasmlib/md5c.c config/config.h config/msvc.h \
nasmlib/mmap.$(O): nasmlib/mmap.c config/config.h config/msvc.h \
config/unknown.h config/watcom.h include/compiler.h include/error.h \
include/nasmint.h include/nasmlib.h nasmlib/file.h
+nasmlib/path.$(O): nasmlib/path.c config/config.h config/msvc.h \
+ config/unknown.h config/watcom.h include/compiler.h include/error.h \
+ include/nasmint.h include/nasmlib.h
nasmlib/perfhash.$(O): nasmlib/perfhash.c config/config.h config/msvc.h \
config/unknown.h config/watcom.h include/compiler.h include/hashtbl.h \
include/nasmint.h include/nasmlib.h include/perfhash.h
@@ -741,8 +745,8 @@ output/outmacho.$(O): output/outmacho.c asm/directiv.h asm/pptok.h \
config/watcom.h include/compiler.h include/error.h include/labels.h \
include/nasm.h include/nasmint.h include/nasmlib.h include/opflags.h \
include/perfhash.h include/raa.h include/rbtree.h include/saa.h \
- include/strlist.h include/tables.h output/outform.h output/outlib.h \
- x86/insnsi.h x86/regs.h
+ include/strlist.h include/tables.h include/ver.h output/dwarf.h \
+ output/outform.h output/outlib.h x86/insnsi.h x86/regs.h
output/outobj.$(O): output/outobj.c asm/directiv.h asm/eval.h asm/pptok.h \
asm/preproc.h asm/stdscan.h config/config.h config/msvc.h config/unknown.h \
config/watcom.h include/compiler.h include/error.h include/nasm.h \
@@ -756,13 +760,11 @@ output/outrdf2.$(O): output/outrdf2.c asm/directiv.h asm/pptok.h \
include/rdoff.h include/saa.h include/strlist.h include/tables.h \
output/outform.h output/outlib.h x86/insnsi.h x86/regs.h
rdoff/collectn.$(O): rdoff/collectn.c config/config.h config/msvc.h \
- config/unknown.h config/watcom.h include/compiler.h include/nasmint.h \
- rdoff/collectn.h
+ config/unknown.h config/watcom.h include/compiler.h include/error.h \
+ include/nasmint.h include/nasmlib.h include/rdoff.h rdoff/collectn.h \
+ rdoff/rdfutils.h
rdoff/hash.$(O): rdoff/hash.c config/config.h config/msvc.h config/unknown.h \
config/watcom.h include/compiler.h include/nasmint.h rdoff/hash.h
-rdoff/iochk.$(O): rdoff/iochk.c config/config.h config/msvc.h \
- config/unknown.h config/watcom.h include/compiler.h include/nasmint.h \
- include/nasmlib.h
rdoff/ldrdf.$(O): rdoff/ldrdf.c config/config.h config/msvc.h \
config/unknown.h config/watcom.h include/compiler.h include/error.h \
include/nasmint.h include/nasmlib.h include/rdoff.h rdoff/collectn.h \
@@ -796,11 +798,13 @@ rdoff/rdx.$(O): rdoff/rdx.c config/config.h config/msvc.h config/unknown.h \
include/nasmlib.h include/rdoff.h rdoff/rdfload.h rdoff/rdfutils.h \
rdoff/symtab.h
rdoff/segtab.$(O): rdoff/segtab.c config/config.h config/msvc.h \
- config/unknown.h config/watcom.h include/compiler.h include/nasmint.h \
+ config/unknown.h config/watcom.h include/compiler.h include/error.h \
+ include/nasmint.h include/nasmlib.h include/rdoff.h rdoff/rdfutils.h \
rdoff/segtab.h
rdoff/symtab.$(O): rdoff/symtab.c config/config.h config/msvc.h \
- config/unknown.h config/watcom.h include/compiler.h include/nasmint.h \
- rdoff/hash.h rdoff/symtab.h
+ config/unknown.h config/watcom.h include/compiler.h include/error.h \
+ include/nasmint.h include/nasmlib.h include/rdoff.h rdoff/hash.h \
+ rdoff/rdfutils.h rdoff/symtab.h
stdlib/snprintf.$(O): stdlib/snprintf.c config/config.h config/msvc.h \
config/unknown.h config/watcom.h include/compiler.h include/nasmint.h \
include/nasmlib.h
diff --git a/Mkfiles/msvc.mak b/Mkfiles/msvc.mak
index d43e76e1..b8b6d3ad 100644
--- a/Mkfiles/msvc.mak
+++ b/Mkfiles/msvc.mak
@@ -73,7 +73,8 @@ LIBOBJ = stdlib\snprintf.$(O) stdlib\vsnprintf.$(O) stdlib\strlcpy.$(O) \
nasmlib\crc64.$(O) nasmlib\malloc.$(O) \
nasmlib\md5c.$(O) nasmlib\string.$(O) \
nasmlib\file.$(O) nasmlib\mmap.$(O) nasmlib\ilog2.$(O) \
- nasmlib\realpath.$(O) nasmlib\filename.$(O) nasmlib\srcfile.$(O) \
+ nasmlib\realpath.$(O) nasmlib\path.$(O) \
+ nasmlib\filename.$(O) nasmlib\srcfile.$(O) \
nasmlib\zerobuf.$(O) nasmlib\readnum.$(O) nasmlib\bsi.$(O) \
nasmlib\rbtree.$(O) nasmlib\hashtbl.$(O) \
nasmlib\raa.$(O) nasmlib\saa.$(O) \
@@ -519,6 +520,9 @@ nasmlib\md5c.$(O): nasmlib\md5c.c config\msvc.h config\unknown.h \
nasmlib\mmap.$(O): nasmlib\mmap.c config\msvc.h config\unknown.h \
config\watcom.h include\compiler.h include\error.h include\nasmint.h \
include\nasmlib.h nasmlib\file.h
+nasmlib\path.$(O): nasmlib\path.c config\msvc.h config\unknown.h \
+ config\watcom.h include\compiler.h include\error.h include\nasmint.h \
+ include\nasmlib.h
nasmlib\perfhash.$(O): nasmlib\perfhash.c config\msvc.h config\unknown.h \
config\watcom.h include\compiler.h include\hashtbl.h include\nasmint.h \
include\nasmlib.h include\perfhash.h
@@ -627,7 +631,8 @@ output\outmacho.$(O): output\outmacho.c asm\directiv.h asm\pptok.h \
include\compiler.h include\error.h include\labels.h include\nasm.h \
include\nasmint.h include\nasmlib.h include\opflags.h include\perfhash.h \
include\raa.h include\rbtree.h include\saa.h include\strlist.h \
- include\tables.h output\outform.h output\outlib.h x86\insnsi.h x86\regs.h
+ include\tables.h include\ver.h output\dwarf.h output\outform.h \
+ output\outlib.h x86\insnsi.h x86\regs.h
output\outobj.$(O): output\outobj.c asm\directiv.h asm\eval.h asm\pptok.h \
asm\preproc.h asm\stdscan.h config\msvc.h config\unknown.h config\watcom.h \
include\compiler.h include\error.h include\nasm.h include\nasmint.h \
@@ -641,11 +646,10 @@ output\outrdf2.$(O): output\outrdf2.c asm\directiv.h asm\pptok.h \
include\saa.h include\strlist.h include\tables.h output\outform.h \
output\outlib.h x86\insnsi.h x86\regs.h
rdoff\collectn.$(O): rdoff\collectn.c config\msvc.h config\unknown.h \
- config\watcom.h include\compiler.h include\nasmint.h rdoff\collectn.h
+ config\watcom.h include\compiler.h include\error.h include\nasmint.h \
+ include\nasmlib.h include\rdoff.h rdoff\collectn.h rdoff\rdfutils.h
rdoff\hash.$(O): rdoff\hash.c config\msvc.h config\unknown.h config\watcom.h \
include\compiler.h include\nasmint.h rdoff\hash.h
-rdoff\iochk.$(O): rdoff\iochk.c config\msvc.h config\unknown.h \
- config\watcom.h include\compiler.h include\nasmint.h include\nasmlib.h
rdoff\ldrdf.$(O): rdoff\ldrdf.c config\msvc.h config\unknown.h \
config\watcom.h include\compiler.h include\error.h include\nasmint.h \
include\nasmlib.h include\rdoff.h rdoff\collectn.h rdoff\ldsegs.h \
@@ -676,9 +680,11 @@ rdoff\rdx.$(O): rdoff\rdx.c config\msvc.h config\unknown.h config\watcom.h \
include\compiler.h include\error.h include\nasmint.h include\nasmlib.h \
include\rdoff.h rdoff\rdfload.h rdoff\rdfutils.h rdoff\symtab.h
rdoff\segtab.$(O): rdoff\segtab.c config\msvc.h config\unknown.h \
- config\watcom.h include\compiler.h include\nasmint.h rdoff\segtab.h
+ config\watcom.h include\compiler.h include\error.h include\nasmint.h \
+ include\nasmlib.h include\rdoff.h rdoff\rdfutils.h rdoff\segtab.h
rdoff\symtab.$(O): rdoff\symtab.c config\msvc.h config\unknown.h \
- config\watcom.h include\compiler.h include\nasmint.h rdoff\hash.h \
+ config\watcom.h include\compiler.h include\error.h include\nasmint.h \
+ include\nasmlib.h include\rdoff.h rdoff\hash.h rdoff\rdfutils.h \
rdoff\symtab.h
stdlib\snprintf.$(O): stdlib\snprintf.c config\msvc.h config\unknown.h \
config\watcom.h include\compiler.h include\nasmint.h include\nasmlib.h
diff --git a/Mkfiles/openwcom.mak b/Mkfiles/openwcom.mak
index b6468dd6..516c3f03 100644
--- a/Mkfiles/openwcom.mak
+++ b/Mkfiles/openwcom.mak
@@ -59,7 +59,8 @@ LIBOBJ = stdlib/snprintf.$(O) stdlib/vsnprintf.$(O) stdlib/strlcpy.$(O) &
nasmlib/crc64.$(O) nasmlib/malloc.$(O) &
nasmlib/md5c.$(O) nasmlib/string.$(O) &
nasmlib/file.$(O) nasmlib/mmap.$(O) nasmlib/ilog2.$(O) &
- nasmlib/realpath.$(O) nasmlib/filename.$(O) nasmlib/srcfile.$(O) &
+ nasmlib/realpath.$(O) nasmlib/path.$(O) &
+ nasmlib/filename.$(O) nasmlib/srcfile.$(O) &
nasmlib/zerobuf.$(O) nasmlib/readnum.$(O) nasmlib/bsi.$(O) &
nasmlib/rbtree.$(O) nasmlib/hashtbl.$(O) &
nasmlib/raa.$(O) nasmlib/saa.$(O) &
@@ -493,6 +494,9 @@ nasmlib/md5c.$(O): nasmlib/md5c.c config/msvc.h config/unknown.h &
nasmlib/mmap.$(O): nasmlib/mmap.c config/msvc.h config/unknown.h &
config/watcom.h include/compiler.h include/error.h include/nasmint.h &
include/nasmlib.h nasmlib/file.h
+nasmlib/path.$(O): nasmlib/path.c config/msvc.h config/unknown.h &
+ config/watcom.h include/compiler.h include/error.h include/nasmint.h &
+ include/nasmlib.h
nasmlib/perfhash.$(O): nasmlib/perfhash.c config/msvc.h config/unknown.h &
config/watcom.h include/compiler.h include/hashtbl.h include/nasmint.h &
include/nasmlib.h include/perfhash.h
@@ -601,7 +605,8 @@ output/outmacho.$(O): output/outmacho.c asm/directiv.h asm/pptok.h &
include/compiler.h include/error.h include/labels.h include/nasm.h &
include/nasmint.h include/nasmlib.h include/opflags.h include/perfhash.h &
include/raa.h include/rbtree.h include/saa.h include/strlist.h &
- include/tables.h output/outform.h output/outlib.h x86/insnsi.h x86/regs.h
+ include/tables.h include/ver.h output/dwarf.h output/outform.h &
+ output/outlib.h x86/insnsi.h x86/regs.h
output/outobj.$(O): output/outobj.c asm/directiv.h asm/eval.h asm/pptok.h &
asm/preproc.h asm/stdscan.h config/msvc.h config/unknown.h config/watcom.h &
include/compiler.h include/error.h include/nasm.h include/nasmint.h &
@@ -615,11 +620,10 @@ output/outrdf2.$(O): output/outrdf2.c asm/directiv.h asm/pptok.h &
include/saa.h include/strlist.h include/tables.h output/outform.h &
output/outlib.h x86/insnsi.h x86/regs.h
rdoff/collectn.$(O): rdoff/collectn.c config/msvc.h config/unknown.h &
- config/watcom.h include/compiler.h include/nasmint.h rdoff/collectn.h
+ config/watcom.h include/compiler.h include/error.h include/nasmint.h &
+ include/nasmlib.h include/rdoff.h rdoff/collectn.h rdoff/rdfutils.h
rdoff/hash.$(O): rdoff/hash.c config/msvc.h config/unknown.h config/watcom.h &
include/compiler.h include/nasmint.h rdoff/hash.h
-rdoff/iochk.$(O): rdoff/iochk.c config/msvc.h config/unknown.h &
- config/watcom.h include/compiler.h include/nasmint.h include/nasmlib.h
rdoff/ldrdf.$(O): rdoff/ldrdf.c config/msvc.h config/unknown.h &
config/watcom.h include/compiler.h include/error.h include/nasmint.h &
include/nasmlib.h include/rdoff.h rdoff/collectn.h rdoff/ldsegs.h &
@@ -650,9 +654,11 @@ rdoff/rdx.$(O): rdoff/rdx.c config/msvc.h config/unknown.h config/watcom.h &
include/compiler.h include/error.h include/nasmint.h include/nasmlib.h &
include/rdoff.h rdoff/rdfload.h rdoff/rdfutils.h rdoff/symtab.h
rdoff/segtab.$(O): rdoff/segtab.c config/msvc.h config/unknown.h &
- config/watcom.h include/compiler.h include/nasmint.h rdoff/segtab.h
+ config/watcom.h include/compiler.h include/error.h include/nasmint.h &
+ include/nasmlib.h include/rdoff.h rdoff/rdfutils.h rdoff/segtab.h
rdoff/symtab.$(O): rdoff/symtab.c config/msvc.h config/unknown.h &
- config/watcom.h include/compiler.h include/nasmint.h rdoff/hash.h &
+ config/watcom.h include/compiler.h include/error.h include/nasmint.h &
+ include/nasmlib.h include/rdoff.h rdoff/hash.h rdoff/rdfutils.h &
rdoff/symtab.h
stdlib/snprintf.$(O): stdlib/snprintf.c config/msvc.h config/unknown.h &
config/watcom.h include/compiler.h include/nasmint.h include/nasmlib.h
diff --git a/nasmlib/path.c b/nasmlib/path.c
new file mode 100644
index 00000000..855440ea
--- /dev/null
+++ b/nasmlib/path.c
@@ -0,0 +1,131 @@
+/* ----------------------------------------------------------------------- *
+ *
+ * Copyright 2017 The NASM Authors - All Rights Reserved
+ * See the file AUTHORS included with the NASM distribution for
+ * the specific copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * path.c - host operating system specific pathname manipulation functions
+ */
+
+#include "compiler.h"
+#include "nasmlib.h"
+#include "error.h"
+
+#if defined(unix) || defined(__unix) || defined(__unix__)
+# define separators "/"
+# define cleandirend "/"
+# define leaveonclean 1
+# define curdir "."
+#elif defined(__MSDOS__) || defined(__WINDOWS__) || \
+ defined(__OS2__) || defined(_WIN16) || defined(_WIN32)
+# define separators "/\\:"
+# define cleandirend "/\\"
+# define leaveonclean 2 /* Leave \\ at the start alone */
+# define curdir "."
+#elif defined(Macintosh) /* MacOS classic? */
+# define separators ":"
+# define curdir ":"
+# define cleandirend ":"
+# define leaveonclean 0
+# define leave_leading 1
+#elif defined(__VMS)
+/*
+ * VMS filenames may have ;version at the end. Assume we should count that
+ * as part of the filename anyway.
+ */
+# define separators ":]"
+# define curdir "[]"
+#else
+/* No idea what to do here, do nothing. Feel free to add new ones. */
+# define curdir ""
+#endif
+
+static inline bool ismatch(const char *charset, char ch)
+{
+ const char *p;
+
+ for (p = charset; *p; p++) {
+ if (ch == *p)
+ return true;
+ }
+
+ return false;
+}
+
+static const char *first_filename_char(const char *path)
+{
+#ifdef separators
+ const char *p = path + strlen(path);
+
+ while (p > path) {
+ if (!ismatch(separators, p[-1]))
+ return p;
+ p--;
+ }
+
+ return p;
+#else
+ return path;
+#endif
+}
+
+/* Return the filename portion of a PATH as a new string */
+char *nasm_basename(const char *path)
+{
+ return nasm_strdup(first_filename_char(path));
+}
+
+/* Return the directory name portion of a PATH as a new string */
+char *nasm_dirname(const char *path)
+{
+ const char *p = first_filename_char(path);
+ const char *p0 = p;
+ (void)p0; /* Don't warn if unused */
+
+ if (p == path)
+ return nasm_strdup(curdir);
+
+#ifdef cleandirend
+ while (p > path+leaveonclean) {
+ if (ismatch(cleandirend, p[-1]))
+ break;
+ p--;
+ }
+#endif
+
+#ifdef leave_leading
+ /* If the directory contained ONLY separators, leave as-is */
+ if (p == path+leaveonclean)
+ p = p0;
+#endif
+
+ return nasm_strndup(path, p-path);
+}