mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 10:28:09 +01:00
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>
This commit is contained in:
parent
62f03b6ab8
commit
441a327051
7 changed files with 38 additions and 20 deletions
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)));
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
19
util/path-util.h
Normal file
19
util/path-util.h
Normal file
|
@ -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_ */
|
Loading…
Reference in a new issue