From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org
Subject: Re: [PATCH] xutil.c: remove duplicate copies, create new library libutil.a to contain xutil.
Date: Sat, 29 Oct 2011 15:52:25 -0300 [thread overview]
Message-ID: <87aa8j7hqu.fsf@zancas.localnet> (raw)
In-Reply-To: <1319383133-11006-1-git-send-email-david@tethera.net>
[-- Attachment #1.1: Type: text/plain, Size: 598 bytes --]
On Sun, 23 Oct 2011 12:18:53 -0300, David Bremner <david@tethera.net> wrote:
> From: David Bremner <bremner@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 #1.2: Type: application/pgp-signature, Size: 315 bytes --]
[-- Attachment #2: xutil patch --]
[-- Type: text/x-diff, Size: 21830 bytes --]
From 5c678c9bc96890ce9a5965d6654851ebbe2b4767 Mon Sep 17 00:00:00 2001
From: David Bremner <bremner@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 <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);
- 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 <cworth@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 <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;
+}
+
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 <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
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 <cworth@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 <cworth@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 <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;
-}
--
1.7.6.3
next prev parent reply other threads:[~2011-10-29 18:52 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-23 15:18 [PATCH] xutil.c: remove duplicate copies, create new library libutil.a to contain xutil David Bremner
2011-10-23 21:51 ` [PATCH] xregcomp: don't consider every regex compilation failure an internal error David Bremner
2011-10-29 3:04 ` David Bremner
2011-10-29 3:04 ` [PATCH 1/4] notmuch-restore: add tests for new --match command line argument David Bremner
2011-10-29 3:04 ` [PATCH 2/4] notmuch-restore: implement argument parsing for --match David Bremner
2011-10-29 3:04 ` [PATCH 3/4] test/dump-restore: add tests for notmuch restore --match David Bremner
2011-10-29 3:04 ` [PATCH 4/4] notmuch-restore: implement --match functionality David Bremner
2011-10-29 16:45 ` Experimental Tag Sharing David Bremner
2011-10-29 16:45 ` [PATCH] contrib/nmbug: new script for sharing tags with prefix notmuch:: David Bremner
2011-10-29 21:11 ` Ali Polatel
2011-10-29 22:12 ` David Bremner
2011-10-30 0:21 ` Ali Polatel
2011-11-07 0:59 ` [PATCH] contrib/nmbug: new script for sharing tags with a given prefix David Bremner
2011-11-07 12:58 ` Tomi Ollila
2011-11-11 15:08 ` [PATCH v3] " David Bremner
2011-11-11 23:26 ` Jameson Graef Rollins
2011-11-11 23:55 ` David Bremner
2011-11-12 2:43 ` Jameson Graef Rollins
2011-11-12 5:52 ` David Bremner
2011-11-13 1:39 ` David Bremner
2011-10-29 17:27 ` [PATCH v2] contrib/nmbug: new script for sharing tags with prefix notmuch:: David Bremner
2011-10-30 0:44 ` Experimental Tag Sharing Jameson Graef Rollins
2011-10-30 2:18 ` David Bremner
2011-10-29 20:55 ` [PATCH] docs: man, online help, and NEWS updated for notmuch restore --match David Bremner
2011-10-31 19:01 ` [PATCH] Fix formatting for restore and dump help documentation Jameson Graef Rollins
2011-11-01 0:19 ` David Bremner
2011-10-29 18:52 ` David Bremner [this message]
2011-10-31 0:04 ` [PATCH] xutil.c: remove duplicate copies, create new library libutil.a to contain xutil Austin Clements
2011-10-31 0:09 ` Jameson Graef Rollins
2011-10-31 2:28 ` David Bremner
2011-10-31 9:20 ` Jani Nikula
2011-10-31 10:51 ` David Bremner
2011-10-31 18:50 ` Jameson Graef Rollins
2011-10-31 19:19 ` Jani Nikula
2011-10-31 19:20 ` Jameson Graef Rollins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87aa8j7hqu.fsf@zancas.localnet \
--to=david@tethera.net \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).