diff options
| author | Đoàn Trần Công Danh <congdanhqx@gmail.com> | 2021-04-24 08:05:37 +0700 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2021-04-24 08:07:00 -0300 |
| commit | 441a327051f5357175029709030a0ee51131379d (patch) | |
| tree | fcb47d140f922b4036f0f763e25ede21b0783c3c | |
| parent | 62f03b6ab86bdc378198f9c1a86cb51ead289961 (diff) | |
compat: rename {,notmuch_}canonicalize_file_name
When compat canonicalize_file_name was introduced, it was limited to
C code only because it was used by C code only during that time.
>From 5ec6fd4d, (lib/open: check for split configuration when creating
database., 2021-02-16), lib/open.cc, which is C++, relies on the
existent of canonicalize_file_name.
However, we can't blindly enable canonicalize_file_name for C++ code,
because different implementation has different additional signature for
C++ and users can arbitrarily add -DHAVE_CANONICALIZE_FILE_NAME=0 to
{C,CXX}FLAGS.
Let's move our implementation into a util library.
Helped-by: Tomi Ollila <tomi.ollila@iki.fi>
Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
| -rw-r--r-- | compat/Makefile.local | 4 | ||||
| -rw-r--r-- | compat/compat.h | 8 | ||||
| -rw-r--r-- | lib/open.cc | 5 | ||||
| -rw-r--r-- | notmuch-config.c | 3 | ||||
| -rw-r--r-- | util/Makefile.local | 2 | ||||
| -rw-r--r-- | util/path-util.c (renamed from compat/canonicalize_file_name.c) | 17 | ||||
| -rw-r--r-- | util/path-util.h | 19 |
7 files changed, 38 insertions, 20 deletions
diff --git a/compat/Makefile.local b/compat/Makefile.local index 2ee1b399..c58ca746 100644 --- a/compat/Makefile.local +++ b/compat/Makefile.local @@ -5,10 +5,6 @@ extra_cflags += -I$(srcdir)/$(dir) notmuch_compat_srcs := -ifneq ($(HAVE_CANONICALIZE_FILE_NAME),1) -notmuch_compat_srcs += $(dir)/canonicalize_file_name.c -endif - ifneq ($(HAVE_GETLINE),1) notmuch_compat_srcs += $(dir)/getline.c $(dir)/getdelim.c endif diff --git a/compat/compat.h b/compat/compat.h index 8f15e585..59e91618 100644 --- a/compat/compat.h +++ b/compat/compat.h @@ -37,14 +37,6 @@ extern "C" { #define _POSIX_PTHREAD_SEMANTICS 1 #endif -#if ! HAVE_CANONICALIZE_FILE_NAME -/* we only call this function from C, and this makes testing easier */ -#ifndef __cplusplus -char * -canonicalize_file_name (const char *path); -#endif -#endif - #if ! HAVE_GETLINE #include <stdio.h> #include <unistd.h> diff --git a/lib/open.cc b/lib/open.cc index 5d80a884..bdb695fe 100644 --- a/lib/open.cc +++ b/lib/open.cc @@ -3,6 +3,7 @@ #include "database-private.h" #include "parse-time-vrp.h" +#include "path-util.h" #if HAVE_XAPIAN_DB_RETRY_LOCK #define DB_ACTION (Xapian::DB_CREATE_OR_OPEN | Xapian::DB_RETRY_LOCK) @@ -612,9 +613,9 @@ notmuch_database_create_with_config (const char *database_path, _set_database_path (notmuch, database_path); if (key_file && ! split) { - char *mail_root = canonicalize_file_name ( + char *mail_root = notmuch_canonicalize_file_name ( g_key_file_get_value (key_file, "database", "mail_root", NULL)); - char *db_path = canonicalize_file_name (database_path); + char *db_path = notmuch_canonicalize_file_name (database_path); split = (mail_root && (0 != strcmp (mail_root, db_path))); diff --git a/notmuch-config.c b/notmuch-config.c index 16e86916..d9390c4d 100644 --- a/notmuch-config.c +++ b/notmuch-config.c @@ -24,6 +24,7 @@ #include <netdb.h> #include <assert.h> +#include "path-util.h" #include "unicode-util.h" static const char toplevel_config_comment[] = @@ -327,7 +328,7 @@ notmuch_conffile_save (notmuch_conffile_t *config) } /* Try not to overwrite symlinks. */ - filename = canonicalize_file_name (config->filename); + filename = notmuch_canonicalize_file_name (config->filename); if (! filename) { if (errno == ENOENT) { filename = strdup (config->filename); diff --git a/util/Makefile.local b/util/Makefile.local index 7ef029a5..8a0b9bc3 100644 --- a/util/Makefile.local +++ b/util/Makefile.local @@ -6,7 +6,7 @@ extra_cflags += -I$(srcdir)/$(dir) libnotmuch_util_c_srcs := $(dir)/xutil.c $(dir)/error_util.c $(dir)/hex-escape.c \ $(dir)/string-util.c $(dir)/talloc-extra.c $(dir)/zlib-extra.c \ $(dir)/util.c $(dir)/gmime-extra.c $(dir)/crypto.c \ - $(dir)/repair.c \ + $(dir)/repair.c $(dir)/path-util.c \ $(dir)/unicode-util.c libnotmuch_util_modules := $(libnotmuch_util_c_srcs:.c=.o) diff --git a/compat/canonicalize_file_name.c b/util/path-util.c index 000f9e78..3267a967 100644 --- a/compat/canonicalize_file_name.c +++ b/util/path-util.c @@ -1,12 +1,21 @@ -#include "compat.h" +/* + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#define _GNU_SOURCE + +#include "path-util.h" + #include <limits.h> -#undef _GNU_SOURCE #include <stdlib.h> + char * -canonicalize_file_name (const char *path) +notmuch_canonicalize_file_name (const char *path) { -#ifdef PATH_MAX +#if HAVE_CANONICALIZE_FILE_NAME + return canonicalize_file_name (path); +#elif defined(PATH_MAX) char *resolved_path = malloc (PATH_MAX + 1); if (resolved_path == NULL) return NULL; diff --git a/util/path-util.h b/util/path-util.h new file mode 100644 index 00000000..ac85f696 --- /dev/null +++ b/util/path-util.h @@ -0,0 +1,19 @@ +/* + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#ifndef NOTMUCH_UTIL_PATH_UTIL_H_ +#define NOTMUCH_UTIL_PATH_UTIL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +char * +notmuch_canonicalize_file_name (const char *path); + +#ifdef __cplusplus +} +#endif + +#endif /* NOTMUCH_UTIL_PATH_UTIL_H_ */ |
