summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common.h1
-rw-r--r--src/errors.c28
-rw-r--r--src/errors.h24
-rw-r--r--src/fileops.c20
-rw-r--r--src/git2/common.h2
-rw-r--r--src/git2/errors.h10
-rw-r--r--src/unix/map.c2
-rw-r--r--src/util.c24
-rw-r--r--src/util.h32
-rw-r--r--tests/t0001-errno.c12
-rw-r--r--wscript50
11 files changed, 47 insertions, 158 deletions
diff --git a/src/common.h b/src/common.h
index 821ee8844..287df60e2 100644
--- a/src/common.h
+++ b/src/common.h
@@ -49,7 +49,6 @@ typedef SSIZE_T ssize_t;
#include "git2/common.h"
#include "util.h"
#include "thread-utils.h"
-#include "errors.h"
#include "bswap.h"
#define GIT_PATH_MAX 4096
diff --git a/src/errors.c b/src/errors.c
index ac73402ee..df8b82200 100644
--- a/src/errors.c
+++ b/src/errors.c
@@ -1,34 +1,6 @@
#include "common.h"
#include "thread-utils.h" /* for GIT_TLS */
-#if defined(GIT_TLS)
-/* compile-time constant initialization required */
-GIT_TLS int git_errno = 0;
-
-#elif defined(GIT_HAS_PTHREAD)
-
-static pthread_key_t errno_key;
-
-static void init_errno(void) __attribute__((constructor));
-static void init_errno(void)
-{
- pthread_key_create(&errno_key, free);
-}
-
-int *git__errno_storage(void)
-{
- int *e = pthread_getspecific(errno_key);
- if (!e) {
-#undef calloc
- e = calloc(1, sizeof(*e));
-#define calloc(a,b) GIT__FORBID_MALLOC
- pthread_setspecific(errno_key, e);
- }
- return e;
-}
-
-#endif
-
static struct {
int num;
const char *str;
diff --git a/src/errors.h b/src/errors.h
deleted file mode 100644
index d22a03b33..000000000
--- a/src/errors.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef INCLUDE_errors_h__
-#define INCLUDE_errors_h__
-
-#include "git2/errors.h"
-
-/* convenience functions */
-GIT_INLINE(int) git_int_error(int code)
-{
- git_errno = code;
- return code;
-}
-
-GIT_INLINE(int) git_os_error(void)
-{
- return git_int_error(GIT_EOSERR);
-}
-
-GIT_INLINE(void) *git_ptr_error(int code)
-{
- git_errno = code;
- return NULL;
-}
-
-#endif
diff --git a/src/fileops.c b/src/fileops.c
index 5f5944c62..7b11c9c3a 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -5,13 +5,13 @@
int gitfo_open(const char *path, int flags)
{
int fd = open(path, flags | O_BINARY);
- return fd >= 0 ? fd : git_os_error();
+ return fd >= 0 ? fd : GIT_EOSERR;
}
int gitfo_creat(const char *path, int mode)
{
int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, mode);
- return fd >= 0 ? fd : git_os_error();
+ return fd >= 0 ? fd : GIT_EOSERR;
}
int gitfo_read(git_file fd, void *buf, size_t cnt)
@@ -22,11 +22,11 @@ int gitfo_read(git_file fd, void *buf, size_t cnt)
if (r < 0) {
if (errno == EINTR || errno == EAGAIN)
continue;
- return git_os_error();
+ return GIT_EOSERR;
}
if (!r) {
errno = EPIPE;
- return git_os_error();
+ return GIT_EOSERR;
}
cnt -= r;
b += r;
@@ -42,11 +42,11 @@ int gitfo_write(git_file fd, void *buf, size_t cnt)
if (r < 0) {
if (errno == EINTR || errno == EAGAIN)
continue;
- return git_os_error();
+ return GIT_EOSERR;
}
if (!r) {
errno = EPIPE;
- return git_os_error();
+ return GIT_EOSERR;
}
cnt -= r;
b += r;
@@ -93,7 +93,7 @@ off_t gitfo_size(git_file fd)
{
struct stat sb;
if (gitfo_fstat(fd, &sb))
- return git_os_error();
+ return GIT_EOSERR;
return sb.st_size;
}
@@ -152,13 +152,13 @@ int gitfo_move_file(char *from, char *to)
if (!rename(from, to))
return GIT_SUCCESS;
- return git_os_error();
+ return GIT_EOSERR;
}
int gitfo_map_ro(git_map *out, git_file fd, off_t begin, size_t len)
{
if (git__mmap(out, len, GIT_PROT_READ, GIT_MAP_SHARED, fd, begin) < GIT_SUCCESS)
- return git_os_error();
+ return GIT_EOSERR;
return GIT_SUCCESS;
}
@@ -276,7 +276,7 @@ int gitfo_dirent(
dir = opendir(path);
if (!dir)
- return git_os_error();
+ return GIT_EOSERR;
while ((de = readdir(dir)) != NULL) {
size_t de_len;
diff --git a/src/git2/common.h b/src/git2/common.h
index 9d014c038..bbeec4128 100644
--- a/src/git2/common.h
+++ b/src/git2/common.h
@@ -55,6 +55,8 @@
__attribute__((visibility("default"))) \
GIT_TLS \
type
+#elif defined(_MSC_VER)
+# define GIT_EXTERN_TLS(type) __declspec(dllexport) GIT_TLS type
#else
# define GIT_EXTERN_TLS(type) extern GIT_TLS type
#endif
diff --git a/src/git2/errors.h b/src/git2/errors.h
index 98bce4857..627e67c70 100644
--- a/src/git2/errors.h
+++ b/src/git2/errors.h
@@ -33,16 +33,6 @@
*/
GIT_BEGIN_DECL
-/** The git errno. */
-#if defined(GIT_TLS)
-GIT_EXTERN_TLS(int) git_errno;
-
-#elif defined(GIT_HAS_PTHREAD)
-# define git_errno (*git__errno_storage())
-GIT_EXTERN(int *) git__errno_storage(void);
-
-#endif
-
/**
* strerror() for the Git library
* @param num The error code to explain
diff --git a/src/unix/map.c b/src/unix/map.c
index a41bae0b8..3008008a6 100644
--- a/src/unix/map.c
+++ b/src/unix/map.c
@@ -40,7 +40,7 @@ int git__mmap(git_map *out, size_t len, int prot, int flags, int fd, off_t offse
out->data = mmap(NULL, len, mprot, mflag, fd, offset);
if (!out->data || out->data == MAP_FAILED)
- return git_os_error();
+ return GIT_EOSERR;
out->len = len;
return GIT_SUCCESS;
diff --git a/src/util.c b/src/util.c
index debf526d2..a3b62effa 100644
--- a/src/util.c
+++ b/src/util.c
@@ -3,30 +3,6 @@
#include <stdarg.h>
#include <stdio.h>
-void *git__malloc(size_t n)
-{
- void *r = malloc(n);
- if (!r)
- return git_ptr_error(GIT_ENOMEM);
- return r;
-}
-
-void *git__calloc(size_t a, size_t b)
-{
- void *r = calloc(a, b);
- if (!r)
- return git_ptr_error(GIT_ENOMEM);
- return r;
-}
-
-char *git__strdup(const char *s)
-{
- char *r = strdup(s);
- if (!r)
- return git_ptr_error(GIT_ENOMEM);
- return r;
-}
-
int git__fmt(char *buf, size_t buf_sz, const char *fmt, ...)
{
va_list va;
diff --git a/src/util.h b/src/util.h
index 5f647253c..808b20da4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -3,28 +3,16 @@
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
-extern void *git__malloc(size_t);
-extern void *git__calloc(size_t, size_t);
-extern char *git__strdup(const char *);
-
-#ifndef GIT__NO_HIDE_MALLOC
-# define GIT__FORBID_MALLOC do_not_use_malloc_directly
-
-# ifdef malloc
-# undef malloc
-# endif
-# define malloc(a) GIT__FORBID_MALLOC
-
-# ifdef calloc
-# undef calloc
-# endif
-# define calloc(a,b) GIT__FORBID_MALLOC
-
-# ifdef strdup
-# undef strdup
-# endif
-# define strdup(a) GIT__FORBID_MALLOC
-#endif
+/*
+ * Don't wrap malloc/calloc.
+ * Use the default versions in glibc, and make
+ * sure that any methods that allocate memory
+ * return a GIT_ENOMEM error when allocation
+ * fails.
+ */
+#define git__malloc malloc
+#define git__calloc calloc
+#define git__strdup strdup
extern int git__fmt(char *, size_t, const char *, ...)
GIT_FORMAT_PRINTF(3, 4);
diff --git a/tests/t0001-errno.c b/tests/t0001-errno.c
deleted file mode 100644
index acb12d3a5..000000000
--- a/tests/t0001-errno.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "test_lib.h"
-#include "errors.h"
-
-BEGIN_TEST(errno_zero_on_init)
- must_be_true(git_errno == 0);
-END_TEST
-
-BEGIN_TEST(set_ENOTOID)
- must_be_true(GIT_ENOTOID != 0);
- git_errno = GIT_ENOTOID;
- must_be_true(git_errno == GIT_ENOTOID);
-END_TEST
diff --git a/wscript b/wscript
index 104de86a5..85f7385b2 100644
--- a/wscript
+++ b/wscript
@@ -74,15 +74,15 @@ def build(bld):
# command '[build|clean|install|uninstall]-static'
if bld.variant == 'static':
- build_library(bld, 'cstlib')
+ build_library(bld, 'static')
# command '[build|clean|install|uninstall]-shared'
elif bld.variant == 'shared':
- build_library(bld, 'cshlib')
+ build_library(bld, 'shared')
# command '[build|clean]-tests'
elif bld.variant == 'tests':
- build_library(bld, 'cshlib')
+ build_library(bld, 'objects')
build_tests(bld)
# command 'build|clean|install|uninstall': by default, run
@@ -91,9 +91,15 @@ def build(bld):
from waflib import Options
Options.commands = [bld.cmd + '-shared', bld.cmd + '-static'] + Options.commands
-def build_library(bld, lib_str):
- directory = bld.path
+def build_library(bld, build_type):
+
+ BUILD = {
+ 'shared' : bld.shlib,
+ 'static' : bld.stlib,
+ 'objects' : bld.objects
+ }
+ directory = bld.path
sources = directory.ant_glob('src/*.c')
# Compile platform-dependant code
@@ -106,15 +112,12 @@ def build_library(bld, lib_str):
sources.append('src/ppc/sha1.c')
else:
sources.append('src/block-sha1/sha1.c')
-
- features = ['c', lib_str]
-
#------------------------------
# Build the main library
#------------------------------
# either as static or shared;
- bld(features=features,
+ BUILD[build_type](
source=sources,
target='git2',
includes='src',
@@ -123,8 +126,8 @@ def build_library(bld, lib_str):
)
# On Unix systems, build the Pkg-config entry file
- if bld.env.PLATFORM == 'unix':
- bld(rule="""sed -e 's#@prefix@#$(prefix)#' -e 's#@libdir@#$(libdir)#' < ${SRC} > ${TGT}""",
+ if bld.env.PLATFORM == 'unix' and bld.is_install:
+ bld(rule="""sed -e 's#@prefix@#${PREFIX}#' -e 's#@libdir@#${LIBDIR}#' < ${SRC} > ${TGT}""",
source='libgit2.pc.in',
target='libgit2.pc',
install_path='${LIBDIR}/pkgconfig',
@@ -134,6 +137,13 @@ def build_library(bld, lib_str):
bld.install_files('${PREFIX}/include', directory.find_node('src/git2.h'))
bld.install_files('${PREFIX}/include/git2', directory.ant_glob('src/git2/*.h'))
+ # On Unix systems, let them know about installation
+ if bld.env.PLATFORM == 'unix' and bld.cmd in ['install-static', 'install-shared']:
+ bld.add_post_fun(call_ldconfig)
+
+def call_ldconfig(bld):
+ bld.exec_command('/sbin/ldconfig')
+
def grep_test_header(text, test_file):
return '\n'.join(l for l in test_file.read().splitlines() if text in l)
@@ -144,7 +154,7 @@ def build_tests(bld):
return
directory = bld.path
- resources_path = directory.find_node('tests/resources/').abspath()
+ resources_path = directory.find_node('tests/resources/').abspath().replace('\\', '/')
# Common object with the Test library methods
bld.objects(source=['tests/test_helpers.c', 'tests/test_lib.c'], includes=['src', 'tests'], target='test_helper')
@@ -167,7 +177,6 @@ def build_tests(bld):
includes=['src', 'tests'],
defines=['TEST_TOC="%s.toc"' % test_name, 'TEST_RESOURCES="%s"' % resources_path],
install_path=None,
- shlibpath=[directory.find_node('build/tests/').abspath()],
use=['test_helper', 'git2'] + ALL_LIBS # link with all the libs we know
# libraries which are not enabled won't link
)
@@ -200,28 +209,17 @@ class _run_tests(Context):
fun = 'run_tests'
def run_tests(ctx):
- import shutil, tempfile, sys, os
+ import shutil, tempfile, sys
failed = False
test_folder = tempfile.mkdtemp()
- build_folder = ctx.path.find_node('build/tests/')
test_glob = 'build/tests/t????-*'
- environ = os.environ.copy()
- environ_tail = ""
if sys.platform == 'win32':
test_glob += '.exe'
- environ_var, environ_separator = 'PATH', ';'
- else:
- environ_var, environ_separator = 'LD_LIBRARY_PATH', ':'
-
- if environ_var in environ:
- environ_tail = environ_separator + environ[environ_var]
-
- environ[environ_var] = build_folder.abspath() + environ_tail
for test in ctx.path.ant_glob(test_glob):
- if ctx.exec_command(test.abspath(), cwd=test_folder, env=environ) != 0:
+ if ctx.exec_command(test.abspath(), cwd=test_folder) != 0:
failed = True
break