mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
xutil.c: remove duplicate copies, create new library libutil.a to contain xutil.
We keep the lib/xutil.c version. As a consequence, also factor out _internal_error and associated macros. It might be overkill to make a new file error_util.c for this, but _internal_error does not really belong in database.cc.
This commit is contained in:
parent
a1ca7e8ebb
commit
1dedfc90f6
12 changed files with 113 additions and 182 deletions
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@
|
||||||
all:
|
all:
|
||||||
|
|
||||||
# List all subdirectories here. Each contains its own Makefile.local
|
# List all subdirectories here. Each contains its own Makefile.local
|
||||||
subdirs = compat completion emacs lib test
|
subdirs = compat completion emacs lib util test
|
||||||
|
|
||||||
# We make all targets depend on the Makefiles themselves.
|
# We make all targets depend on the Makefiles themselves.
|
||||||
global_deps = Makefile Makefile.config Makefile.local \
|
global_deps = Makefile Makefile.config Makefile.local \
|
||||||
|
|
|
@ -39,7 +39,7 @@ PV_FILE=bindings/python/notmuch/version.py
|
||||||
# Smash together user's values with our extra values
|
# Smash together user's values with our extra values
|
||||||
FINAL_CFLAGS = -DNOTMUCH_VERSION=$(VERSION) $(CFLAGS) $(WARN_CFLAGS) $(CONFIGURE_CFLAGS) $(extra_cflags)
|
FINAL_CFLAGS = -DNOTMUCH_VERSION=$(VERSION) $(CFLAGS) $(WARN_CFLAGS) $(CONFIGURE_CFLAGS) $(extra_cflags)
|
||||||
FINAL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(CONFIGURE_CXXFLAGS) $(extra_cflags) $(extra_cxxflags)
|
FINAL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(CONFIGURE_CXXFLAGS) $(extra_cflags) $(extra_cxxflags)
|
||||||
FINAL_NOTMUCH_LDFLAGS = $(LDFLAGS) -Llib -lnotmuch $(AS_NEEDED_LDFLAGS) $(GMIME_LDFLAGS) $(TALLOC_LDFLAGS)
|
FINAL_NOTMUCH_LDFLAGS = $(LDFLAGS) -Lutil -lutil -Llib -lnotmuch $(AS_NEEDED_LDFLAGS) $(GMIME_LDFLAGS) $(TALLOC_LDFLAGS)
|
||||||
FINAL_NOTMUCH_LINKER = CC
|
FINAL_NOTMUCH_LINKER = CC
|
||||||
ifneq ($(LINKER_RESOLVES_LIBRARY_DEPENDENCIES),1)
|
ifneq ($(LINKER_RESOLVES_LIBRARY_DEPENDENCIES),1)
|
||||||
FINAL_NOTMUCH_LDFLAGS += $(CONFIGURE_LDFLAGS)
|
FINAL_NOTMUCH_LDFLAGS += $(CONFIGURE_LDFLAGS)
|
||||||
|
@ -299,12 +299,11 @@ notmuch_client_srcs = \
|
||||||
notmuch-time.c \
|
notmuch-time.c \
|
||||||
query-string.c \
|
query-string.c \
|
||||||
show-message.c \
|
show-message.c \
|
||||||
json.c \
|
json.c
|
||||||
xutil.c
|
|
||||||
|
|
||||||
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
|
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
|
||||||
|
|
||||||
notmuch: $(notmuch_client_modules) lib/libnotmuch.a
|
notmuch: $(notmuch_client_modules) lib/libnotmuch.a util/libutil.a
|
||||||
$(call quiet,CXX $(CFLAGS)) $^ $(FINAL_LIBNOTMUCH_LDFLAGS) -o $@
|
$(call quiet,CXX $(CFLAGS)) $^ $(FINAL_LIBNOTMUCH_LDFLAGS) -o $@
|
||||||
|
|
||||||
notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME)
|
notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME)
|
||||||
|
|
|
@ -54,8 +54,7 @@ libnotmuch_c_srcs = \
|
||||||
$(dir)/message-file.c \
|
$(dir)/message-file.c \
|
||||||
$(dir)/messages.c \
|
$(dir)/messages.c \
|
||||||
$(dir)/sha1.c \
|
$(dir)/sha1.c \
|
||||||
$(dir)/tags.c \
|
$(dir)/tags.c
|
||||||
$(dir)/xutil.c
|
|
||||||
|
|
||||||
libnotmuch_cxx_srcs = \
|
libnotmuch_cxx_srcs = \
|
||||||
$(dir)/database.cc \
|
$(dir)/database.cc \
|
||||||
|
@ -71,7 +70,7 @@ $(dir)/libnotmuch.a: $(libnotmuch_modules)
|
||||||
$(call quiet,AR) rcs $@ $^
|
$(call quiet,AR) rcs $@ $^
|
||||||
|
|
||||||
$(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym
|
$(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym
|
||||||
$(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@
|
$(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@ -L$(srcdir)/util -lutil
|
||||||
|
|
||||||
notmuch.sym: $(srcdir)/$(dir)/notmuch.h $(libnotmuch_modules)
|
notmuch.sym: $(srcdir)/$(dir)/notmuch.h $(libnotmuch_modules)
|
||||||
sh $(srcdir)/$(lib)/gen-version-script.sh $< $(libnotmuch_modules) > $@
|
sh $(srcdir)/$(lib)/gen-version-script.sh $< $(libnotmuch_modules) > $@
|
||||||
|
|
|
@ -209,21 +209,6 @@ static prefix_t PROBABILISTIC_PREFIX[]= {
|
||||||
{ "folder", "XFOLDER"}
|
{ "folder", "XFOLDER"}
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
|
||||||
_internal_error (const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list va_args;
|
|
||||||
|
|
||||||
va_start (va_args, format);
|
|
||||||
|
|
||||||
fprintf (stderr, "Internal error: ");
|
|
||||||
vfprintf (stderr, format, va_args);
|
|
||||||
|
|
||||||
exit (1);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_find_prefix (const char *name)
|
_find_prefix (const char *name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ NOTMUCH_BEGIN_DECLS
|
||||||
#include <talloc.h>
|
#include <talloc.h>
|
||||||
|
|
||||||
#include "xutil.h"
|
#include "xutil.h"
|
||||||
|
#include "error_util.h"
|
||||||
|
|
||||||
#pragma GCC visibility push(hidden)
|
#pragma GCC visibility push(hidden)
|
||||||
|
|
||||||
|
@ -60,25 +61,6 @@ NOTMUCH_BEGIN_DECLS
|
||||||
#define STRNCMP_LITERAL(var, literal) \
|
#define STRNCMP_LITERAL(var, literal) \
|
||||||
strncmp ((var), (literal), sizeof (literal) - 1)
|
strncmp ((var), (literal), sizeof (literal) - 1)
|
||||||
|
|
||||||
/* There's no point in continuing when we've detected that we've done
|
|
||||||
* something wrong internally (as opposed to the user passing in a
|
|
||||||
* bogus value).
|
|
||||||
*
|
|
||||||
* Note that PRINTF_ATTRIBUTE comes from talloc.h
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
_internal_error (const char *format, ...) PRINTF_ATTRIBUTE (1, 2);
|
|
||||||
|
|
||||||
/* There's no point in continuing when we've detected that we've done
|
|
||||||
* something wrong internally (as opposed to the user passing in a
|
|
||||||
* bogus value).
|
|
||||||
*
|
|
||||||
* Note that __location__ comes from talloc.h.
|
|
||||||
*/
|
|
||||||
#define INTERNAL_ERROR(format, ...) \
|
|
||||||
_internal_error (format " (%s).\n", \
|
|
||||||
##__VA_ARGS__, __location__)
|
|
||||||
|
|
||||||
#define unused(x) x __attribute__ ((unused))
|
#define unused(x) x __attribute__ ((unused))
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
5
util/Makefile
Normal file
5
util/Makefile
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
all:
|
||||||
|
$(MAKE) -C .. all
|
||||||
|
|
||||||
|
.DEFAULT:
|
||||||
|
$(MAKE) -C .. $@
|
11
util/Makefile.local
Normal file
11
util/Makefile.local
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
|
||||||
|
dir := util
|
||||||
|
extra_cflags += -I$(srcdir)/$(dir)
|
||||||
|
|
||||||
|
libutil_c_srcs := $(dir)/xutil.c $(dir)/error_util.c
|
||||||
|
|
||||||
|
libutil_modules := $(libutil_c_srcs:.c=.o)
|
||||||
|
|
||||||
|
$(dir)/libutil.a: $(libutil_modules)
|
||||||
|
$(call quiet,AR) rcs $@ $^
|
41
util/error_util.c
Normal file
41
util/error_util.c
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/* error_util.c - internal error utilities for notmuch.
|
||||||
|
*
|
||||||
|
* Copyright © 2009 Carl Worth
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* (at your option) 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 http://www.gnu.org/licenses/ .
|
||||||
|
*
|
||||||
|
* Author: Carl Worth <cworth@cworth.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "error_util.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
_internal_error (const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list va_args;
|
||||||
|
|
||||||
|
va_start (va_args, format);
|
||||||
|
|
||||||
|
fprintf (stderr, "Internal error: ");
|
||||||
|
vfprintf (stderr, format, va_args);
|
||||||
|
|
||||||
|
exit (1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
45
util/error_util.h
Normal file
45
util/error_util.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/* error_util.h - Provide the INTERNAL_ERROR macro
|
||||||
|
*
|
||||||
|
* Copyright © 2009 Carl Worth
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* (at your option) 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 http://www.gnu.org/licenses/ .
|
||||||
|
*
|
||||||
|
* Author: Carl Worth <cworth@cworth.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ERROR_UTIL_H
|
||||||
|
#define ERROR_UTIL_H
|
||||||
|
|
||||||
|
#include <talloc.h>
|
||||||
|
|
||||||
|
/* There's no point in continuing when we've detected that we've done
|
||||||
|
* something wrong internally (as opposed to the user passing in a
|
||||||
|
* bogus value).
|
||||||
|
*
|
||||||
|
* Note that PRINTF_ATTRIBUTE comes from talloc.h
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
_internal_error (const char *format, ...) PRINTF_ATTRIBUTE (1, 2);
|
||||||
|
|
||||||
|
/* There's no point in continuing when we've detected that we've done
|
||||||
|
* something wrong internally (as opposed to the user passing in a
|
||||||
|
* bogus value).
|
||||||
|
*
|
||||||
|
* Note that __location__ comes from talloc.h.
|
||||||
|
*/
|
||||||
|
#define INTERNAL_ERROR(format, ...) \
|
||||||
|
_internal_error (format " (%s).\n", \
|
||||||
|
##__VA_ARGS__, __location__)
|
||||||
|
|
||||||
|
#endif
|
|
@ -18,9 +18,11 @@
|
||||||
* Author: Carl Worth <cworth@cworth.org>
|
* Author: Carl Worth <cworth@cworth.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "notmuch-private.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "xutil.h"
|
||||||
|
#include "error_util.h"
|
||||||
|
|
||||||
void *
|
void *
|
||||||
xcalloc (size_t nmemb, size_t size)
|
xcalloc (size_t nmemb, size_t size)
|
138
xutil.c
138
xutil.c
|
@ -1,138 +0,0 @@
|
||||||
/* xutil.c - Various wrapper functions to abort on error.
|
|
||||||
*
|
|
||||||
* Copyright © 2009 Carl Worth
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* (at your option) 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 http://www.gnu.org/licenses/ .
|
|
||||||
*
|
|
||||||
* Author: Carl Worth <cworth@cworth.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "notmuch-private.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
void *
|
|
||||||
xcalloc (size_t nmemb, size_t size)
|
|
||||||
{
|
|
||||||
void *ret;
|
|
||||||
|
|
||||||
ret = calloc (nmemb, size);
|
|
||||||
if (ret == NULL) {
|
|
||||||
fprintf (stderr, "Out of memory.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
xmalloc (size_t size)
|
|
||||||
{
|
|
||||||
void *ret;
|
|
||||||
|
|
||||||
ret = malloc (size);
|
|
||||||
if (ret == NULL) {
|
|
||||||
fprintf (stderr, "Out of memory.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
xrealloc (void *ptr, size_t size)
|
|
||||||
{
|
|
||||||
void *ret;
|
|
||||||
|
|
||||||
ret = realloc (ptr, size);
|
|
||||||
if (ret == NULL) {
|
|
||||||
fprintf (stderr, "Out of memory.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
xstrdup (const char *s)
|
|
||||||
{
|
|
||||||
char *ret;
|
|
||||||
|
|
||||||
ret = strdup (s);
|
|
||||||
if (ret == NULL) {
|
|
||||||
fprintf (stderr, "Out of memory.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
xstrndup (const char *s, size_t n)
|
|
||||||
{
|
|
||||||
char *ret;
|
|
||||||
|
|
||||||
if (strlen (s) <= n)
|
|
||||||
n = strlen (s);
|
|
||||||
|
|
||||||
ret = malloc (n + 1);
|
|
||||||
if (ret == NULL) {
|
|
||||||
fprintf (stderr, "Out of memory.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
memcpy (ret, s, n);
|
|
||||||
ret[n] = '\0';
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
xregcomp (regex_t *preg, const char *regex, int cflags)
|
|
||||||
{
|
|
||||||
int rerr;
|
|
||||||
|
|
||||||
rerr = regcomp (preg, regex, cflags);
|
|
||||||
if (rerr) {
|
|
||||||
size_t error_size = regerror (rerr, preg, NULL, 0);
|
|
||||||
char *error = xmalloc (error_size);
|
|
||||||
|
|
||||||
regerror (rerr, preg, error, error_size);
|
|
||||||
fprintf (stderr, "Internal error: compiling regex %s: %s\n",
|
|
||||||
regex, error);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
xregexec (const regex_t *preg, const char *string,
|
|
||||||
size_t nmatch, regmatch_t pmatch[], int eflags)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
int rerr;
|
|
||||||
|
|
||||||
rerr = regexec (preg, string, nmatch, pmatch, eflags);
|
|
||||||
if (rerr)
|
|
||||||
return rerr;
|
|
||||||
|
|
||||||
for (i = 0; i < nmatch; i++) {
|
|
||||||
if (pmatch[i].rm_so == -1) {
|
|
||||||
fprintf (stderr, "Internal error: matching regex against %s:"
|
|
||||||
"Sub-match %d not found\n",
|
|
||||||
string, i);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Loading…
Reference in a new issue