From c68f44aa5797f1e765e6119a5b895c1746e8c958 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 19 May 2016 10:05:51 +0000 Subject: starting libgnunetmy --- src/my/Makefile.am | 24 +++++++++++++ src/my/my.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ src/my/my_query_helper.c | 73 +++++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 src/my/Makefile.am create mode 100644 src/my/my.c create mode 100644 src/my/my_query_helper.c (limited to 'src/my') diff --git a/src/my/Makefile.am b/src/my/Makefile.am new file mode 100644 index 000000000..54e6d5563 --- /dev/null +++ b/src/my/Makefile.am @@ -0,0 +1,24 @@ +# This Makefile.am is in the public domain +AM_CPPFLAGS = -I$(top_srcdir)/src/include + +if MINGW + WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols +endif + +if USE_COVERAGE + AM_CFLAGS = --coverage +endif + +if HAVE_MYSQL +lib_LTLIBRARIES = libgnunetmy.la +endif + +libgnunetmy_la_SOURCES = \ + my.c \ + my_query_helper.c +libgnunetmy_la_LIBADD = $(MYSQL_LDFLAGS) -lmysqlclient \ + $(top_builddir)/src/mysql/libgnunetmysql.la \ + $(top_builddir)/src/util/libgnunetutil.la +libgnunetmy_la_LDFLAGS = \ + $(GN_LIB_LDFLAGS) \ + -version-info 0:0:0 diff --git a/src/my/my.c b/src/my/my.c new file mode 100644 index 000000000..62b1ede09 --- /dev/null +++ b/src/my/my.c @@ -0,0 +1,94 @@ +/* + This file is part of GNUnet + 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 + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +/** + * @file my/my.c + * @brief library to help with access to a MySQL database + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "gnunet_my_lib.h" + + + +/** + * Run a prepared SELECT statement. + * + * @param mc mysql context + * @param sh handle to SELECT statment + * @param params parameters to the statement + * @return + */ +int +GNUNET_MY_exec_prepared (struct GNUNET_MYSQL_Context *mc, + struct GNUNET_MYSQL_StatementHandle *sh, + const struct GNUNET_MY_QueryParam *params) +{ + const struct GNUNET_MY_QueryParam *p; + unsigned int num; + unsigned int i; + MYSQL_STMT *stmt; + + num = 0; + for (i=0;NULL != params[i].conv;i++) + num += params[i].num_params; + { + MYSQL_BIND qbind[num]; + unsigned int off; + + memset(qbind, 0, sizeof(qbind)); + off = 0; + for (i=0;NULL != (p = ¶ms[i])->conv;i++) + { + if (GNUNET_OK != + p->conv (p->conv_cls, + p, + &qbind[off])) + { + return GNUNET_SYSERR; + } + off += p->num_params; + } + stmt = GNUNET_MYSQL_statement_get_stmt (mc, sh); + if (mysql_stmt_bind_param (stmt, + qbind)) + { + GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql", + _("`%s' failed at %s:%d with error: %s\n"), + "mysql_stmt_bind_param", __FILE__, __LINE__, + mysql_stmt_error (stmt)); + GNUNET_MYSQL_statements_invalidate (mc); + return GNUNET_SYSERR; + } + } + if (mysql_stmt_execute (stmt)) + { + GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql", + _("`%s' failed at %s:%d with error: %s\n"), + "mysql_stmt_execute", __FILE__, __LINE__, + mysql_stmt_error (stmt)); + GNUNET_MYSQL_statements_invalidate (mc); + return GNUNET_SYSERR; + } + return GNUNET_OK; +} + + +/* end of my.c */ diff --git a/src/my/my_query_helper.c b/src/my/my_query_helper.c new file mode 100644 index 000000000..057c32d9f --- /dev/null +++ b/src/my/my_query_helper.c @@ -0,0 +1,73 @@ +/* + This file is part of GNUnet + 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 + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +/** + * @file my/my_query_helper.c + * @brief library to help with access to a MySQL database + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "gnunet_my_lib.h" + + +/** + * Function called to convert input argument into SQL parameters. + * + * @param cls closure + * @param pq data about the query + * @param qbind array of parameters to initialize + * @return -1 on error + */ +static int +pq_conv_fixed_size (void *cls, + const struct GNUNET_MY_QueryParam *qp, + MYSQL_BIND *qbind) +{ + GNUNET_assert (1 == qp->num_params); + qbind->buffer = (void *) qp->data; + qbind->buffer_length = qp->data_len; + qbind->length = (unsigned long *) &qp->data_len; + return 0; +} + + +/** + * Generate query parameter for a buffer @a ptr of + * @a ptr_size bytes. + * + * @param ptr pointer to the query parameter to pass + * @oaran ptr_size number of bytes in @a ptr + */ +struct GNUNET_MY_QueryParam +GNUNET_MY_query_param_fixed_size (const void *ptr, + size_t ptr_size) +{ + struct GNUNET_MY_QueryParam qp = { + &pq_conv_fixed_size, + NULL, + 1, + ptr, + (unsigned long) ptr_size + }; + return qp; +} + + +/* end of my_query_helper.c */ -- cgit v1.2.3