On Sun, 23 Oct 2011 12:18:53 -0300, David Bremner <da...@tethera.net> wrote:
> From: David Bremner <brem...@debian.org>
> 
> 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.

It seems this patch was sent out base64 encoded, which confuses git-am.
I attach the patch here. You won't be able to git am this message, but
you can at least save the attachment and apply it. Sorry for the
inconvenience.

Attachment: pgpOYzTX22cXT.pgp
Description: PGP signature

>From 5c678c9bc96890ce9a5965d6654851ebbe2b4767 Mon Sep 17 00:00:00 2001
From: David Bremner <brem...@debian.org>
Date: Sun, 23 Oct 2011 12:05:13 -0300
Subject: [PATCH] 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.
---
 Makefile              |    2 +-
 Makefile.local        |    7 +--
 lib/Makefile.local    |    5 +-
 lib/database.cc       |   15 -----
 lib/notmuch-private.h |   20 +-------
 lib/xutil.c           |  134 -----------------------------------------------
 lib/xutil.h           |   55 -------------------
 util/Makefile         |    5 ++
 util/Makefile.local   |   11 ++++
 util/error_util.c     |   41 +++++++++++++++
 util/error_util.h     |   45 ++++++++++++++++
 util/xutil.c          |  136 ++++++++++++++++++++++++++++++++++++++++++++++++
 util/xutil.h          |   55 +++++++++++++++++++
 xutil.c               |  138 -------------------------------------------------
 14 files changed, 300 insertions(+), 369 deletions(-)
 delete mode 100644 lib/xutil.c
 delete mode 100644 lib/xutil.h
 create mode 100644 util/Makefile
 create mode 100644 util/Makefile.local
 create mode 100644 util/error_util.c
 create mode 100644 util/error_util.h
 create mode 100644 util/xutil.c
 create mode 100644 util/xutil.h
 delete mode 100644 xutil.c

diff --git a/Makefile b/Makefile
index 11e3a3d..2fb2a61 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 all:
 
 # 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.
 global_deps = Makefile Makefile.config Makefile.local \
diff --git a/Makefile.local b/Makefile.local
index ec09f95..6ddef5c 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -39,7 +39,7 @@ PV_FILE=bindings/python/notmuch/version.py
 # Smash together user's values with our extra values
 FINAL_CFLAGS = -DNOTMUCH_VERSION=$(VERSION) $(CFLAGS) $(WARN_CFLAGS) $(CONFIGURE_CFLAGS) $(extra_cflags)
 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
 ifneq ($(LINKER_RESOLVES_LIBRARY_DEPENDENCIES),1)
 FINAL_NOTMUCH_LDFLAGS += $(CONFIGURE_LDFLAGS)
@@ -299,12 +299,11 @@ notmuch_client_srcs =		\
 	notmuch-time.c		\
 	query-string.c		\
 	show-message.c		\
-	json.c			\
-	xutil.c
+	json.c
 
 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 $@
 
 notmuch-shared: $(notmuch_client_modules) lib/$(LINKER_NAME)
diff --git a/lib/Makefile.local b/lib/Makefile.local
index be51eaa..d58552c 100644
--- a/lib/Makefile.local
+++ b/lib/Makefile.local
@@ -54,8 +54,7 @@ libnotmuch_c_srcs =		\
 	$(dir)/message-file.c	\
 	$(dir)/messages.c	\
 	$(dir)/sha1.c		\
-	$(dir)/tags.c		\
-	$(dir)/xutil.c
+	$(dir)/tags.c
 
 libnotmuch_cxx_srcs =		\
 	$(dir)/database.cc	\
@@ -71,7 +70,7 @@ $(dir)/libnotmuch.a: $(libnotmuch_modules)
 	$(call quiet,AR) rcs $@ $^
 
 $(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)
 	sh $(srcdir)/$(lib)/gen-version-script.sh $< $(libnotmuch_modules) > $@
diff --git a/lib/database.cc b/lib/database.cc
index e77fd53..88be939 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -209,21 +209,6 @@ static prefix_t PROBABILISTIC_PREFIX[]= {
     { "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 *
 _find_prefix (const char *name)
 {
diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h
index d319530..0d3cc27 100644
--- a/lib/notmuch-private.h
+++ b/lib/notmuch-private.h
@@ -47,6 +47,7 @@ NOTMUCH_BEGIN_DECLS
 #include <talloc.h>
 
 #include "xutil.h"
+#include "error_util.h"
 
 #pragma GCC visibility push(hidden)
 
@@ -60,25 +61,6 @@ NOTMUCH_BEGIN_DECLS
 #define STRNCMP_LITERAL(var, literal) \
     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))
 
 #ifdef __cplusplus
diff --git a/lib/xutil.c b/lib/xutil.c
deleted file mode 100644
index 268225b..0000000
--- a/lib/xutil.c
+++ /dev/null
@@ -1,134 +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 <cwo...@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);
-	INTERNAL_ERROR ("compiling regex %s: %s\n",
-			regex, error);
-    }
-}
-
-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)
-	    INTERNAL_ERROR ("matching regex against %s: Sub-match %d not found\n",
-			    string, i);
-    }
-
-    return 0;
-}
diff --git a/lib/xutil.h b/lib/xutil.h
deleted file mode 100644
index fd77f73..0000000
--- a/lib/xutil.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* xutil.h - 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 <cwo...@cworth.org>
- */
-
-#ifndef NOTMUCH_XUTIL_H
-#define NOTMUCH_XUTIL_H
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <regex.h>
-
-#pragma GCC visibility push(hidden)
-
-/* xutil.c */
-void *
-xcalloc (size_t nmemb, size_t size);
-
-void *
-xmalloc (size_t size);
-
-void *
-xrealloc (void *ptrr, size_t size);
-
-char *
-xstrdup (const char *s);
-
-char *
-xstrndup (const char *s, size_t n);
-
-void
-xregcomp (regex_t *preg, const char *regex, int cflags);
-
-int
-xregexec (const regex_t *preg, const char *string,
-	  size_t nmatch, regmatch_t pmatch[], int eflags);
-
-#pragma GCC visibility pop
-
-#endif
diff --git a/util/Makefile b/util/Makefile
new file mode 100644
index 0000000..fa25832
--- /dev/null
+++ b/util/Makefile
@@ -0,0 +1,5 @@
+all:
+	$(MAKE) -C .. all
+
+.DEFAULT:
+	$(MAKE) -C .. $@
diff --git a/util/Makefile.local b/util/Makefile.local
new file mode 100644
index 0000000..2ff42b3
--- /dev/null
+++ b/util/Makefile.local
@@ -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 $@ $^
diff --git a/util/error_util.c b/util/error_util.c
new file mode 100644
index 0000000..630d228
--- /dev/null
+++ b/util/error_util.c
@@ -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 <cwo...@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;
+}
+
diff --git a/util/error_util.h b/util/error_util.h
new file mode 100644
index 0000000..0f1e5ef
--- /dev/null
+++ b/util/error_util.h
@@ -0,0 +1,45 @@
+/* error_util.h - Internal interfaces 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 <cwo...@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
diff --git a/util/xutil.c b/util/xutil.c
new file mode 100644
index 0000000..15ff765
--- /dev/null
+++ b/util/xutil.c
@@ -0,0 +1,136 @@
+/* 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 <cwo...@cworth.org>
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "xutil.h"
+#include "error_util.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);
+	INTERNAL_ERROR ("compiling regex %s: %s\n",
+			regex, error);
+    }
+}
+
+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)
+	    INTERNAL_ERROR ("matching regex against %s: Sub-match %d not found\n",
+			    string, i);
+    }
+
+    return 0;
+}
diff --git a/util/xutil.h b/util/xutil.h
new file mode 100644
index 0000000..fd77f73
--- /dev/null
+++ b/util/xutil.h
@@ -0,0 +1,55 @@
+/* xutil.h - 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 <cwo...@cworth.org>
+ */
+
+#ifndef NOTMUCH_XUTIL_H
+#define NOTMUCH_XUTIL_H
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <regex.h>
+
+#pragma GCC visibility push(hidden)
+
+/* xutil.c */
+void *
+xcalloc (size_t nmemb, size_t size);
+
+void *
+xmalloc (size_t size);
+
+void *
+xrealloc (void *ptrr, size_t size);
+
+char *
+xstrdup (const char *s);
+
+char *
+xstrndup (const char *s, size_t n);
+
+void
+xregcomp (regex_t *preg, const char *regex, int cflags);
+
+int
+xregexec (const regex_t *preg, const char *string,
+	  size_t nmatch, regmatch_t pmatch[], int eflags);
+
+#pragma GCC visibility pop
+
+#endif
diff --git a/xutil.c b/xutil.c
deleted file mode 100644
index 5f98f3f..0000000
--- a/xutil.c
+++ /dev/null
@@ -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 <cwo...@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;
-}
-- 
1.7.6.3

_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to