mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +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 :=
|
notmuch_compat_srcs :=
|
||||||
|
|
||||||
ifneq ($(HAVE_CANONICALIZE_FILE_NAME),1)
|
|
||||||
notmuch_compat_srcs += $(dir)/canonicalize_file_name.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq ($(HAVE_GETLINE),1)
|
ifneq ($(HAVE_GETLINE),1)
|
||||||
notmuch_compat_srcs += $(dir)/getline.c $(dir)/getdelim.c
|
notmuch_compat_srcs += $(dir)/getline.c $(dir)/getdelim.c
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -37,14 +37,6 @@ extern "C" {
|
||||||
#define _POSIX_PTHREAD_SEMANTICS 1
|
#define _POSIX_PTHREAD_SEMANTICS 1
|
||||||
#endif
|
#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
|
#if ! HAVE_GETLINE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "database-private.h"
|
#include "database-private.h"
|
||||||
#include "parse-time-vrp.h"
|
#include "parse-time-vrp.h"
|
||||||
|
#include "path-util.h"
|
||||||
|
|
||||||
#if HAVE_XAPIAN_DB_RETRY_LOCK
|
#if HAVE_XAPIAN_DB_RETRY_LOCK
|
||||||
#define DB_ACTION (Xapian::DB_CREATE_OR_OPEN | 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);
|
_set_database_path (notmuch, database_path);
|
||||||
|
|
||||||
if (key_file && ! split) {
|
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));
|
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)));
|
split = (mail_root && (0 != strcmp (mail_root, db_path)));
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "path-util.h"
|
||||||
#include "unicode-util.h"
|
#include "unicode-util.h"
|
||||||
|
|
||||||
static const char toplevel_config_comment[] =
|
static const char toplevel_config_comment[] =
|
||||||
|
@ -327,7 +328,7 @@ notmuch_conffile_save (notmuch_conffile_t *config)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try not to overwrite symlinks. */
|
/* Try not to overwrite symlinks. */
|
||||||
filename = canonicalize_file_name (config->filename);
|
filename = notmuch_canonicalize_file_name (config->filename);
|
||||||
if (! filename) {
|
if (! filename) {
|
||||||
if (errno == ENOENT) {
|
if (errno == ENOENT) {
|
||||||
filename = strdup (config->filename);
|
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 \
|
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)/string-util.c $(dir)/talloc-extra.c $(dir)/zlib-extra.c \
|
||||||
$(dir)/util.c $(dir)/gmime-extra.c $(dir)/crypto.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
|
$(dir)/unicode-util.c
|
||||||
|
|
||||||
libnotmuch_util_modules := $(libnotmuch_util_c_srcs:.c=.o)
|
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>
|
#include <limits.h>
|
||||||
#undef _GNU_SOURCE
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
char *
|
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);
|
char *resolved_path = malloc (PATH_MAX + 1);
|
||||||
if (resolved_path == NULL)
|
if (resolved_path == NULL)
|
||||||
return 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