aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Makefile.local3
-rw-r--r--lib/database-private.h4
-rw-r--r--lib/libsha1.h4
-rw-r--r--lib/notmuch-private.h4
-rw-r--r--lib/xutil.h4
-rw-r--r--xutil.c138
6 files changed, 156 insertions, 1 deletions
diff --git a/Makefile.local b/Makefile.local
index a602ed08..66ccd6d1 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -249,7 +249,8 @@ notmuch_client_srcs = \
notmuch-time.c \
query-string.c \
show-message.c \
- json.c
+ json.c \
+ xutil.c
notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
diff --git a/lib/database-private.h b/lib/database-private.h
index bd72f670..e42b8bb8 100644
--- a/lib/database-private.h
+++ b/lib/database-private.h
@@ -34,6 +34,8 @@
#include <xapian.h>
+#pragma GCC visibility push(hidden)
+
struct _notmuch_database {
notmuch_bool_t exception_reported;
@@ -65,4 +67,6 @@ notmuch_tags_t *
_notmuch_convert_tags (void *ctx, Xapian::TermIterator &i,
Xapian::TermIterator &end);
+#pragma GCC visibility pop
+
#endif
diff --git a/lib/libsha1.h b/lib/libsha1.h
index b4dca93b..c1c848fc 100644
--- a/lib/libsha1.h
+++ b/lib/libsha1.h
@@ -43,6 +43,8 @@ extern "C"
#include <stdint.h>
+#pragma GCC visibility push(hidden)
+
/* Size of SHA1 digest */
#define SHA1_DIGEST_SIZE 20
@@ -60,6 +62,8 @@ void sha1_hash(const unsigned char data[], unsigned long len, sha1_ctx ctx[1]);
void sha1_end(unsigned char hval[], sha1_ctx ctx[1]);
void sha1(unsigned char hval[], const unsigned char data[], unsigned long len);
+#pragma GCC visibility pop
+
#if defined(__cplusplus)
}
#endif
diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h
index 5a0cf925..5b32f84a 100644
--- a/lib/notmuch-private.h
+++ b/lib/notmuch-private.h
@@ -48,6 +48,8 @@ NOTMUCH_BEGIN_DECLS
#include "xutil.h"
+#pragma GCC visibility push(hidden)
+
#ifdef DEBUG
# define DEBUG_DATABASE_SANITY 1
# define DEBUG_QUERY 1
@@ -442,6 +444,8 @@ _notmuch_tags_add_tag (notmuch_tags_t *tags, const char *tag);
void
_notmuch_tags_prepare_iterator (notmuch_tags_t *tags);
+#pragma GCC visibility pop
+
NOTMUCH_END_DECLS
#endif
diff --git a/lib/xutil.h b/lib/xutil.h
index b973f7dc..fd77f733 100644
--- a/lib/xutil.h
+++ b/lib/xutil.h
@@ -25,6 +25,8 @@
#include <sys/types.h>
#include <regex.h>
+#pragma GCC visibility push(hidden)
+
/* xutil.c */
void *
xcalloc (size_t nmemb, size_t size);
@@ -48,4 +50,6 @@ 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
new file mode 100644
index 00000000..5f98f3f7
--- /dev/null
+++ b/xutil.c
@@ -0,0 +1,138 @@
+/* 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;
+}