From a01e72b3aab192e7f8a4e2f26e9cde6ecc9a94ec Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 20 May 2008 13:05:11 +0000 Subject: [PATCH 1/1] cleanup around the free-like functions used as dealloc callbacks in dynar and dicts. One function was publicj with its code in xbt_os_time, and the other one was private to xbt_str.c. Now, they are both public and have their code in xbt_main (don't want to do a new .c file for them) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5448 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/xbt/sysdep.h | 5 +++-- src/xbt/xbt_main.c | 12 ++++++++++++ src/xbt/xbt_os_time.c | 7 ------- src/xbt/xbt_str.c | 12 ++++-------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/xbt/sysdep.h b/include/xbt/sysdep.h index fd1ecf0726..a0421e4688 100644 --- a/include/xbt/sysdep.h +++ b/include/xbt/sysdep.h @@ -105,9 +105,10 @@ static XBT_INLINE void *xbt_realloc(void*p,unsigned int s){ #define xbt_free free /*nothing specific to do here. A poor valgrind replacement?*/ /*#define xbt_free_fct free * replacement with the guareenty of being a function FIXME:KILLME*/ -/** @brief like free - @hideinitializer */ +/** @brief like free, but you can be sure that it is a function */ XBT_PUBLIC(void) xbt_free_f(void* p); +/** @brief should be given a pointer to pointer, and frees the second one */ +XBT_PUBLIC(void) xbt_free_ref(void *d); /** @brief like calloc, but xbt_die() on error and don't memset to 0 @hideinitializer */ diff --git a/src/xbt/xbt_main.c b/src/xbt/xbt_main.c index 4d3c1d6604..1238139e06 100644 --- a/src/xbt/xbt_main.c +++ b/src/xbt/xbt_main.c @@ -105,3 +105,15 @@ xbt_exit(){ free(xbt_binary_name); } + +/* these two functions belong to xbt/sysdep.h, which have no corresponding .c file */ +/** @brief like free, but you can be sure that it is a function */ +XBT_PUBLIC(void) xbt_free_f(void* p) { + free(p); +} + +/** @brief should be given a pointer to pointer, and frees the second one */ +XBT_PUBLIC(void) xbt_free_ref(void *d){ + free(*(void**)d); +} + diff --git a/src/xbt/xbt_os_time.c b/src/xbt/xbt_os_time.c index de79d93f50..6e63660a63 100644 --- a/src/xbt/xbt_os_time.c +++ b/src/xbt/xbt_os_time.c @@ -72,13 +72,6 @@ void xbt_os_sleep(double sec) { #endif } -/** @brief like free - @hideinitializer */ -XBT_PUBLIC(void) xbt_free_f(void* p) { - free(p); -} - - /* TSC (tick-level) timers are said to be unreliable on SMP hosts and thus disabled in SDL source code */ diff --git a/src/xbt/xbt_str.c b/src/xbt/xbt_str.c index 7d5cf08e8f..221f7f4b16 100644 --- a/src/xbt/xbt_str.c +++ b/src/xbt/xbt_str.c @@ -14,10 +14,6 @@ #include "portable.h" #include "xbt/matrix.h" /* for the diff */ -static void free_string(void *d){ - free(*(void**)d); -} - /** @brief Strip whitespace (or other characters) from the end of a string. * * Strips the whitespaces from the end of s. @@ -191,7 +187,7 @@ xbt_str_strip_spaces(char *s) { */ xbt_dynar_t xbt_str_split(const char *s, const char *sep) { - xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string); + xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref); const char *p, *q; int done; const char* sep_dflt = " \t\n\r\x0B"; @@ -239,7 +235,7 @@ xbt_dynar_t xbt_str_split(const char *s, const char *sep) { * \return An array of dynars containing the string tokens */ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) { - xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string); + xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref); int done; const char *p, *q; @@ -291,7 +287,7 @@ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep) { */ xbt_dynar_t xbt_str_split_quoted(const char *s) { - xbt_dynar_t res = xbt_dynar_new(sizeof(char*), free_string); + xbt_dynar_t res = xbt_dynar_new(sizeof(char*), xbt_free_ref); char *str; /* we have to copy the string before, to handle backslashes */ char *beg, *end; /* pointers around the parsed chunk */ int in_simple_quote=0, in_double_quote=0; @@ -612,7 +608,7 @@ char *xbt_str_diff(char *a, char *b) { xbt_dynar_t db = xbt_str_split(b, "\n"); xbt_matrix_t C = diff_build_LCS(da,db); - xbt_dynar_t diff = xbt_dynar_new(sizeof(char*),free_string); + xbt_dynar_t diff = xbt_dynar_new(sizeof(char*),xbt_free_ref); char *res=NULL; diff_build_diff(diff, C, da,db, xbt_dynar_length(da)-1, xbt_dynar_length(db)-1); -- 2.20.1