aboutsummaryrefslogtreecommitdiffstats
path: root/tests/gpgscm/ffi-private.h
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-06-28 16:13:40 +0000
committerJustus Winter <[email protected]>2016-06-28 16:21:50 +0000
commit9c67958c4737b34c60ef2076f57234eec155eb36 (patch)
tree680c742fe65d69877446beb06139bf79e613468d /tests/gpgscm/ffi-private.h
parentgpgscm: Free file names. (diff)
downloadgnupg-9c67958c4737b34c60ef2076f57234eec155eb36.tar.gz
gnupg-9c67958c4737b34c60ef2076f57234eec155eb36.zip
gpgscm: Fix memory leaks.
* tests/gpgscm/ffi-private.h (ffi_schemify_name): Fix prototype. (ffi_define_function_name): Free schemified name. (ffi_define_function): Likewise. (ffi_define_constant): Likewise. (ffi_define_variable_pointer): Likewise. * tests/gpgscm/ffi.c (do_wait_processes): Free arrays. (ffi_schemify_name): Fix type. * tests/gpgscm/main.c (main): Free 'sc'. Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'tests/gpgscm/ffi-private.h')
-rw-r--r--tests/gpgscm/ffi-private.h40
1 files changed, 27 insertions, 13 deletions
diff --git a/tests/gpgscm/ffi-private.h b/tests/gpgscm/ffi-private.h
index 849d1b7e9..87f491f9f 100644
--- a/tests/gpgscm/ffi-private.h
+++ b/tests/gpgscm/ffi-private.h
@@ -84,7 +84,7 @@ int ffi_bool_value (scheme *sc, pointer p);
#define FFI_RETURN_STRING(SC, X) \
FFI_RETURN_POINTER ((SC), mk_string ((SC), (X)))
-const char *ffi_schemify_name (const char *s, int macro);
+char *ffi_schemify_name (const char *s, int macro);
void ffi_scheme_eval (scheme *sc, const char *format, ...)
GPGRT_ATTR_PRINTF (2, 3);
@@ -93,32 +93,46 @@ pointer ffi_sprintf (scheme *sc, const char *format, ...)
#define ffi_define_function_name(SC, NAME, F) \
do { \
+ char *_fname = ffi_schemify_name ("_" #F, 0); \
scheme_define ((SC), \
(SC)->global_env, \
- mk_symbol ((SC), ffi_schemify_name ("_" #F, 0)), \
+ mk_symbol ((SC), _fname), \
mk_foreign_func ((SC), (do_##F))); \
ffi_scheme_eval ((SC), \
"(define (%s . a) (ffi-apply \"%s\" %s a))", \
- (NAME), (NAME), ffi_schemify_name ("_" #F, 0)); \
+ (NAME), (NAME), _fname); \
+ free (_fname); \
} while (0)
-#define ffi_define_function(SC, F) \
- ffi_define_function_name ((SC), ffi_schemify_name (#F, 0), F)
+#define ffi_define_function(SC, F) \
+ do { \
+ char *_name = ffi_schemify_name (#F, 0); \
+ ffi_define_function_name ((SC), _name, F); \
+ free (_name); \
+ } while (0)
#define ffi_define_constant(SC, C) \
- scheme_define ((SC), \
- (SC)->global_env, \
- mk_symbol ((SC), ffi_schemify_name (#C, 1)), \
- mk_integer ((SC), (C)))
+ do { \
+ char *_name = ffi_schemify_name (#C, 1); \
+ scheme_define ((SC), \
+ (SC)->global_env, \
+ mk_symbol ((SC), _name), \
+ mk_integer ((SC), (C))); \
+ free (_name); \
+ } while (0)
#define ffi_define(SC, SYM, EXP) \
scheme_define ((SC), (SC)->global_env, mk_symbol ((SC), (SYM)), EXP)
#define ffi_define_variable_pointer(SC, C, P) \
- scheme_define ((SC), \
- (SC)->global_env, \
- mk_symbol ((SC), ffi_schemify_name (#C, 0)), \
- (P))
+ do { \
+ char *_name = ffi_schemify_name (#C, 0); \
+ scheme_define ((SC), \
+ (SC)->global_env, \
+ mk_symbol ((SC), _name), \
+ (P)); \
+ free (_name); \
+ } while (0)
#define ffi_define_variable_integer(SC, C) \
ffi_define_variable_pointer ((SC), C, (SC)->vptr->mk_integer ((SC), C))