summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2014-01-12 21:00:46 +0000
committerJohan B. C. Engelen <j.b.c.engelen@alumnus.utwente.nl>2014-01-12 21:00:46 +0000
commit0c59dfecac91c2c606a8172a78bdcad71329e4f1 (patch)
tree2899112d6fa17733d2a2d45dd01528fd963b566a /src
parentpass class variables by reference for performance (diff)
downloadinkscape-0c59dfecac91c2c606a8172a78bdcad71329e4f1.tar.gz
inkscape-0c59dfecac91c2c606a8172a78bdcad71329e4f1.zip
fix build with boehm-gc 7.4.0+ (patch by Vladimir Smirnov, slightly modified by me)
Fixed bugs: - https://launchpad.net/bugs/1265072 (bzr r12918)
Diffstat (limited to 'src')
-rw-r--r--src/gc-core.h2
-rw-r--r--src/gc.cpp18
2 files changed, 14 insertions, 6 deletions
diff --git a/src/gc-core.h b/src/gc-core.h
index 85fbada60..3957bda1a 100644
--- a/src/gc-core.h
+++ b/src/gc-core.h
@@ -57,7 +57,7 @@ struct Ops {
CleanupFunc *old_func,
void **old_data);
int (*general_register_disappearing_link)(void **p_ptr,
- void *base);
+ void const *base);
int (*unregister_disappearing_link)(void **p_ptr);
std::size_t (*get_heap_size)();
std::size_t (*get_free_bytes)();
diff --git a/src/gc.cpp b/src/gc.cpp
index 9c59691cb..280a8b1dc 100644
--- a/src/gc.cpp
+++ b/src/gc.cpp
@@ -70,9 +70,13 @@ void *debug_base(void *ptr) {
return base + debug_base_fixup();
}
-int debug_general_register_disappearing_link(void **p_ptr, void *base) {
- char *real_base=reinterpret_cast<char *>(base) - debug_base_fixup();
+int debug_general_register_disappearing_link(void **p_ptr, void const *base) {
+ char const *real_base = reinterpret_cast<char const *>(base) - debug_base_fixup();
+#if (GC_MAJOR_VERSION >= 7 && GC_MINOR_VERSION >= 4)
return GC_general_register_disappearing_link(p_ptr, real_base);
+#else // compatibility with older Boehm GC versions
+ return GC_general_register_disappearing_link(p_ptr, const_cast<char *>(real_base));
+#endif
}
void dummy_do_init() {}
@@ -90,7 +94,7 @@ void dummy_register_finalizer(void *, CleanupFunc, void *,
}
}
-int dummy_general_register_disappearing_link(void **, void *) { return false; }
+int dummy_general_register_disappearing_link(void **, void const *) { return false; }
int dummy_unregister_disappearing_link(void **/*link*/) { return false; }
@@ -112,7 +116,11 @@ Ops enabled_ops = {
&GC_malloc_atomic_uncollectable,
&GC_base,
&GC_register_finalizer_ignore_self,
- &GC_general_register_disappearing_link,
+#if (GC_MAJOR_VERSION >= 7 && GC_MINOR_VERSION >= 4)
+ &GC_general_register_disappearing_link,
+#else // compatibility with older Boehm GC versions
+ (int (*)(void**, const void*))(&GC_general_register_disappearing_link),
+#endif
&GC_unregister_disappearing_link,
&GC_get_heap_size,
&GC_get_free_bytes,
@@ -202,7 +210,7 @@ void stub_register_finalizer_ignore_self(void *, CleanupFunc, void *,
die_because_not_initialized();
}
-int stub_general_register_disappearing_link(void **, void *) {
+int stub_general_register_disappearing_link(void **, void const *) {
die_because_not_initialized();
return 0;
}