summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-03-27 15:05:35 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2009-03-27 15:05:35 +0000
commit56160b783dd49b768f34136fa564be9fefef73b2 (patch)
treee6e0961731e2ef944305e26c113d07523e6927c5
parent7696062fbdb84fe281fcce5d1298ee592e70e113 (diff)
downloadlasso-56160b783dd49b768f34136fa564be9fefef73b2.tar.gz
lasso-56160b783dd49b768f34136fa564be9fefef73b2.tar.xz
lasso-56160b783dd49b768f34136fa564be9fefef73b2.zip
Core: Fix double instantiation of macro parameters
* lasso/utils.h: - (lasso_assign_new_string,lasso_assign_gobject) if source parameter is a function call it could be called two times and have unexpected side effects. Copy the returned value to a temp variable and use it instead.
-rw-r--r--lasso/utils.h25
1 files changed, 14 insertions, 11 deletions
diff --git a/lasso/utils.h b/lasso/utils.h
index 011d4d1e..735d319a 100644
--- a/lasso/utils.h
+++ b/lasso/utils.h
@@ -153,35 +153,38 @@
#define lasso_assign_new_string(dest,src) \
{ \
- if (dest != src) \
+ char *__tmp = src; \
+ if (dest != __tmp) \
lasso_release_string(dest); \
- dest = src; \
+ dest = __tmp; \
}
#define lasso_assign_gobject(dest,src) \
{ \
+ GObject *__tmp = G_OBJECT(src); \
lasso_check_type_equality(dest, src); \
- if (src) \
- g_object_ref(src); \
- if (dest) \
- g_object_unref(dest); \
- dest = (void*)(src); \
+ if (__tmp) \
+ g_object_ref(__tmp); \
+ lasso_release_gobject(dest); \
+ dest = (void*)(__tmp); \
}
#define lasso_assign_new_gobject(dest,src) \
{ \
+ GObject *__tmp = G_OBJECT(src); \
lasso_check_type_equality(dest, src); \
- if (dest != (void*)src) \
- g_object_unref(dest); \
- dest = (void*)(src); \
+ if (dest != (void*)__tmp) \
+ lasso_release_gobject(dest); \
+ dest = (void*)(__tmp); \
}
#define lasso_assign_xml_node(dest,src) \
{ \
+ xmlNode *__tmp = (src); \
lasso_check_type_equality(dest, src); \
if (dest) \
xmlFreeNode(dest); \
- dest = xmlCopyNode(src, 1); \
+ dest = xmlCopyNode(__tmp, 1); \
}
#define lasso_assign_new_list_of_gobjects(dest, src) \