X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_my_lib.h;h=f8ea01490c3ba0f3033402e40cdfccfb954d2765;hb=3f52ce03cb13118bef9a6fbe380f229e2cbec45f;hp=f42276554ddb12d7c324a31f288fc34a0893313f;hpb=67dc0efd426a379b818155ed87f3c1a76d9e352f;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_my_lib.h b/src/include/gnunet_my_lib.h index f42276554..f8ea01490 100644 --- a/src/include/gnunet_my_lib.h +++ b/src/include/gnunet_my_lib.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet - Copyright (C) 2012 GNUnet e.V. + Copyright (C) 2016 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -19,6 +19,7 @@ */ /** * @author Christian Grothoff + * @author Christophe Genevey * * @file * Helper library to access a MySQL database @@ -65,10 +66,21 @@ typedef int MYSQL_BIND *qbind); +/** + * Function called to cleanup result data. + * + * @param cls closure + * @param rs spec to clean up + */ +typedef void +(*GNUNET_MY_QueryCleanup)(void *cls, + MYSQL_BIND *qbind); /** * Information we pass to #GNUNET_MY_exec_prepared() to * initialize the arguments of the prepared statement. */ + + struct GNUNET_MY_QueryParam { @@ -77,6 +89,11 @@ struct GNUNET_MY_QueryParam */ GNUNET_MY_QueryConverter conv; + /** + * Function to call for cleaning up the query. Can be NULL. + */ + GNUNET_MY_QueryCleanup cleaner; + /** * Closure for @e conv. */ @@ -104,8 +121,7 @@ struct GNUNET_MY_QueryParam * * @return array last entry for the result specification to use */ -#define GNUNET_MY_query_param_end { NULL, NULL, 0, NULL, 0 } - +#define GNUNET_MY_query_param_end { NULL, NULL, NULL, 0, NULL, 0 } /** @@ -119,6 +135,7 @@ struct GNUNET_MY_QueryParam GNUNET_MY_query_param_fixed_size (const void *ptr, size_t ptr_size); + /** * Run a prepared SELECT statement. * @@ -130,7 +147,7 @@ GNUNET_MY_query_param_fixed_size (const void *ptr, int GNUNET_MY_exec_prepared (struct GNUNET_MYSQL_Context *mc, struct GNUNET_MYSQL_StatementHandle *sh, - const struct GNUNET_MY_QueryParam *params); + struct GNUNET_MY_QueryParam *params); /** @@ -229,6 +246,11 @@ struct GNUNET_MY_ResultSpec */ unsigned long mysql_bind_output_length; + /** + * Memory for MySQL to notify us about NULL values. + */ + my_bool is_null; + }; @@ -237,7 +259,7 @@ struct GNUNET_MY_ResultSpec * * @return array last entry for the result specification to use */ -#define GNUNET_MY_result_spec_end { NULL, NULL, NULL, 0, NULL, 0 } +#define GNUNET_MY_result_spec_end { NULL, NULL, NULL, 0, NULL, 0, 0 } @@ -288,7 +310,7 @@ GNUNET_MY_query_param_rsa_public_key (const struct GNUNET_CRYPTO_RsaPublicKey *x struct GNUNET_MY_QueryParam GNUNET_MY_query_param_rsa_signature (const struct GNUNET_CRYPTO_RsaSignature *x); -/**q +/** * Generate query parameter for an absolute time value. * The database must store a 64-bit integer. * @@ -298,6 +320,7 @@ GNUNET_MY_query_param_rsa_signature (const struct GNUNET_CRYPTO_RsaSignature *x) struct GNUNET_MY_QueryParam GNUNET_MY_query_param_absolute_time (const struct GNUNET_TIME_Absolute *x); + /** * Generate query parameter for an absolute time value. * The database must store a 64-bit integer. @@ -342,36 +365,33 @@ GNUNET_MY_query_param_uint64 (const uint64_t *x); /** - * FIXME. + * Variable-size result expected * + * @param[out] dst where to store the result, allocated + * @param[out] sptr where to store the size of @a dst + * @return array entru for the result specification to use */ - - /** - * Variable-size result expected - * - * @param[out] dst where to store the result, allocated - * @param[out] sptr where to store the size of @a dst - * @return array entru for the result specification to use - */ struct GNUNET_MY_ResultSpec GNUNET_MY_result_spec_variable_size (void **dst, - size_t *ptr_size); + size_t *ptr_size); + /** - * RSA public key expected - * - * @param name name of the field in the table - * @param[out] rsa where to store the result - * @return array entry for the result specification to use - */ + * RSA public key expected + * + * @param name name of the field in the table + * @param[out] rsa where to store the result + * @return array entry for the result specification to use + */ struct GNUNET_MY_ResultSpec GNUNET_MY_result_spec_rsa_public_key (struct GNUNET_CRYPTO_RsaPublicKey **rsa); + /** - * RSA signature expected. - * - * @param[out] sig where to store the result; - * @return array entry for the result specification to use - */ + * RSA signature expected. + * + * @param[out] sig where to store the result; + * @return array entry for the result specification to use + */ struct GNUNET_MY_ResultSpec GNUNET_MY_result_spec_rsa_signature (struct GNUNET_CRYPTO_RsaSignature **sig); @@ -447,6 +467,17 @@ GNUNET_MY_extract_result (struct GNUNET_MYSQL_StatementHandle *sh, struct GNUNET_MY_ResultSpec *specs); +/** + * Free all memory that was allocated in @a qp during + * #GNUNET_MY_exect_prepared(). + * + * @param qp query specification to clean up + * @param qbind mysql query + */ +void +GNUNET_MY_cleanup_query (struct GNUNET_MY_QueryParam *qp, + MYSQL_BIND *qbind); + /** * Free all memory that was allocated in @a rs during