[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
lib: introduce xpath_join
From: |
Akim Demaille |
Subject: |
lib: introduce xpath_join |
Date: |
Sat, 6 Oct 2018 15:45:54 +0200 |
This will be helpful in a forthcoming commit about api.location.file.
commit d13a7fdb0aea17ba9bb83f889a7adfb6c174277a
Author: Akim Demaille <address@hidden>
Date: Sat Oct 6 12:18:52 2018 +0200
lib: introduce xpath_join
* lib/path-join.h, lib/path-join.c: New.
* lib/local.mk: Adjust.
* src/output.c: Use it.
diff --git a/lib/local.mk b/lib/local.mk
index c2c16238..9682d9ae 100644
--- a/lib/local.mk
+++ b/lib/local.mk
@@ -48,7 +48,9 @@ lib_libbison_a_SOURCES += \
# Non-gnulib sources in Bison's internal library.
lib_libbison_a_SOURCES += \
lib/get-errno.h \
- lib/get-errno.c
+ lib/get-errno.c \
+ lib/path-join.h \
+ lib/path-join.c
# The Yacc compatibility library.
if ENABLE_YACC
diff --git a/lib/path-join.c b/lib/path-join.c
new file mode 100644
index 00000000..73560b44
--- /dev/null
+++ b/lib/path-join.c
@@ -0,0 +1,37 @@
+/* Concatenate path components.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3 of the License, or any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Akim Demaille <address@hidden>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "path-join.h"
+
+#include <concat-filename.h> /* xconcatenated_filename */
+#include <filename.h> /* IS_ABSOLUTE_PATH */
+#include <xalloc.h> /* xstrdup */
+
+char *
+xpath_join (const char *path1, const char *path2)
+{
+ if (!path2 || !*path2)
+ return xstrdup (path1);
+ else if (IS_ABSOLUTE_PATH (path2))
+ return xstrdup (path2);
+ else
+ return xconcatenated_filename (path1, path2, NULL);
+}
diff --git a/lib/path-join.h b/lib/path-join.h
new file mode 100644
index 00000000..baa472a9
--- /dev/null
+++ b/lib/path-join.h
@@ -0,0 +1,38 @@
+/* Concatenate path components.
+ Copyright (C) 2018 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3 of the License, or any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Akim Demaille <address@hidden>. */
+
+#ifndef _PATH_JOIN_H
+# define _PATH_JOIN_H
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+/* Concatenate two paths together. PATH2 may be null, or empty, or
+ absolute: do what is right. Return a freshly allocated
+ filename. */
+char *
+xpath_join (const char *path1, const char *path2);
+
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* _PATH_JOIN_H */
diff --git a/src/output.c b/src/output.c
index 57d4334e..ae5f2d6d 100644
--- a/src/output.c
+++ b/src/output.c
@@ -21,10 +21,10 @@
#include <config.h>
#include "system.h"
-#include <concat-filename.h>
#include <configmake.h>
-#include <filename.h>
+#include <filename.h> /* IS_PATH_WITH_DIR */
#include <get-errno.h>
+#include <path-join.h>
#include <quotearg.h>
#include <spawn-pipe.h>
#include <timevar.h>
@@ -531,11 +531,11 @@ output_skeleton (void)
/* Compute the names of the package data dir and skeleton files. */
char const *m4 = (m4 = getenv ("M4")) ? m4 : M4;
char const *datadir = pkgdatadir ();
- char *m4sugar = xconcatenated_filename (datadir, "m4sugar/m4sugar.m4", NULL);
- char *m4bison = xconcatenated_filename (datadir, "bison.m4", NULL);
+ char *m4sugar = xpath_join (datadir, "m4sugar/m4sugar.m4");
+ char *m4bison = xpath_join (datadir, "bison.m4");
char *skel = (IS_PATH_WITH_DIR (skeleton)
? xstrdup (skeleton)
- : xconcatenated_filename (datadir, skeleton, NULL));
+ : xpath_join (datadir, skeleton));
/* Test whether m4sugar.m4 is readable, to check for proper
installation. A faulty installation can cause deadlock, so a
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- lib: introduce xpath_join,
Akim Demaille <=