gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r37358 - in gnunet/src: include my


From: gnunet
Subject: [GNUnet-SVN] r37358 - in gnunet/src: include my
Date: Fri, 24 Jun 2016 22:12:53 +0200

Author: grothoff
Date: 2016-06-24 22:12:53 +0200 (Fri, 24 Jun 2016)
New Revision: 37358

Modified:
   gnunet/src/include/gnunet_my_lib.h
   gnunet/src/my/my.c
   gnunet/src/my/my_result_helper.c
Log:
-handle NULL results

Modified: gnunet/src/include/gnunet_my_lib.h
===================================================================
--- gnunet/src/include/gnunet_my_lib.h  2016-06-24 15:45:12 UTC (rev 37357)
+++ gnunet/src/include/gnunet_my_lib.h  2016-06-24 20:12:53 UTC (rev 37358)
@@ -246,6 +246,11 @@
    */
   unsigned long mysql_bind_output_length;
 
+  /**
+   * Memory for MySQL to notify us about NULL values.
+   */
+  my_bool is_null;
+
 };
 
 

Modified: gnunet/src/my/my.c
===================================================================
--- gnunet/src/my/my.c  2016-06-24 15:45:12 UTC (rev 37357)
+++ gnunet/src/my/my.c  2016-06-24 20:12:53 UTC (rev 37358)
@@ -75,9 +75,11 @@
     if (mysql_stmt_bind_param (stmt,
                                qbind))
     {
-      GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
+      GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+                       "my",
                        _("`%s' failed at %s:%d with error: %s\n"),
-                       "mysql_stmt_bind_param", __FILE__, __LINE__,
+                       "mysql_stmt_bind_param",
+                       __FILE__, __LINE__,
                        mysql_stmt_error (stmt));
       GNUNET_MYSQL_statements_invalidate (mc);
       return GNUNET_SYSERR;
@@ -85,7 +87,8 @@
 
     if (mysql_stmt_execute (stmt))
     {
-      GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
+      GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
+                       "my",
                        _("`%s' failed at %s:%d with error: %s\n"),
                        "mysql_stmt_execute", __FILE__, __LINE__,
                        mysql_stmt_error (stmt));
@@ -92,11 +95,9 @@
       GNUNET_MYSQL_statements_invalidate (mc);
       return GNUNET_SYSERR;
     }
-
     GNUNET_MY_cleanup_query (params,
                              qbind);
   }
-
   return GNUNET_OK;
 }
 
@@ -125,7 +126,6 @@
  * Extract results from a query result according to the given
  * specification.  Always fetches the next row.
  *
- *
  * @param sh statement that returned results
  * @param rs specification to extract for
  * @return
@@ -145,12 +145,14 @@
   stmt = GNUNET_MYSQL_statement_get_stmt (sh);
   if (NULL == stmt)
   {
-    GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "mysql",
-                    ("`%s' failed at %s:%d with error: %s\n"),
-                       "mysql_stmt_bind_result", __FILE__, __LINE__,
-                       mysql_stmt_error (stmt));
+    GNUNET_break (0);
     return GNUNET_SYSERR;
   }
+  if (NULL == rs)
+  {
+    mysql_stmt_free_result (stmt);
+    return GNUNET_NO;
+  }
 
   num_fields = 0;
   for (i=0;NULL != rs[i].pre_conv;i++)
@@ -187,25 +189,32 @@
       }
       field_off += rp->num_fields;
     }
+
     if (mysql_stmt_bind_result (stmt, result))
     {
       GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
                        "my",
-                       _("`%s' failed at %s:%d with error: %s\n"),
-                       "mysql_stmt_bind_result", __FILE__, __LINE__,
+                       _("%s failed at %s:%d with error: %s\n"),
+                       "mysql_stmt_bind_result",
+                       __FILE__, __LINE__,
                        mysql_stmt_error (stmt));
       return GNUNET_SYSERR;
     }
-
+#if TEST_OPTIMIZATION
+    (void) mysql_stmt_store_result (stmt);
+#endif
     ret = mysql_stmt_fetch (stmt);
-
     if (MYSQL_NO_DATA == ret)
+    {
+      mysql_stmt_free_result (stmt);
       return GNUNET_NO;
-    if ((0 != ret ) && (MYSQL_DATA_TRUNCATED != ret))
+    }
+    if (1 == ret)
     {
       GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR,
                        "my",
-                       _("mysql_stmt_fetch failed at %s:%d with error: %s\n"),
+                       _("%s failed at %s:%d with error: %s\n"),
+                       "mysql_stmt_fetch",
                        __FILE__, __LINE__,
                        mysql_stmt_error (stmt));
       GNUNET_MY_cleanup_result (rs);
@@ -235,7 +244,6 @@
       field_off += rp->num_fields;
     }
   }
-  mysql_stmt_free_result (stmt);
   return GNUNET_OK;
 }
 

Modified: gnunet/src/my/my_result_helper.c
===================================================================
--- gnunet/src/my/my_result_helper.c    2016-06-24 15:45:12 UTC (rev 37357)
+++ gnunet/src/my/my_result_helper.c    2016-06-24 20:12:53 UTC (rev 37358)
@@ -46,6 +46,8 @@
   results[0].buffer = NULL;
   results[0].buffer_length = 0;
   results[0].length = &rs->mysql_bind_output_length;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -73,6 +75,8 @@
   void *buf;
   size_t size;
 
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   size = (size_t) rs->mysql_bind_output_length;
 
   if (rs->mysql_bind_output_length != size)
@@ -169,6 +173,8 @@
   results[0].buffer_length = rs->dst_size;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_BLOB;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -194,6 +200,8 @@
                          unsigned int column,
                          MYSQL_BIND *results)
 {
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   if (rs->dst_size != rs->mysql_bind_output_length)
     return GNUNET_SYSERR;
   return GNUNET_OK;
@@ -249,6 +257,8 @@
   results[0].buffer_length = 0;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_BLOB;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -279,6 +289,8 @@
   void *buf;
   size_t size;
 
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   size = (size_t) rs->mysql_bind_output_length;
 
   if (rs->mysql_bind_output_length != size)
@@ -379,6 +391,8 @@
   results[0].buffer_length = 0;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_BLOB;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -407,6 +421,8 @@
   void *buf;
   size_t size;
 
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   size = (size_t) rs->mysql_bind_output_length;
 
   if (rs->mysql_bind_output_length != size)
@@ -448,7 +464,7 @@
  */
 static void
 clean_rsa_signature (void *cls,
-          struct GNUNET_MY_ResultSpec *rs)
+                     struct GNUNET_MY_ResultSpec *rs)
 {
   struct GNUNET_CRYPTO_RsaSignature **sig = rs->dst;
 
@@ -505,6 +521,8 @@
   results[0].buffer_length = 0;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_BLOB;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -534,6 +552,11 @@
 
   if (rs->mysql_bind_output_length != size)
     return GNUNET_SYSERR;
+  if (*results->is_null)
+  {
+    rs->dst = NULL;
+    return GNUNET_OK;
+  }
 
   buf = GNUNET_malloc (size);
   results[0].buffer = buf;
@@ -627,6 +650,8 @@
   results[0].buffer_length = rs->dst_size;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_SHORT;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -653,6 +678,8 @@
 {
   if (rs->dst_size != rs->mysql_bind_output_length)
     return GNUNET_SYSERR;
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   return GNUNET_OK;
 }
 
@@ -702,6 +729,8 @@
   results[0].buffer_length = rs->dst_size;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_LONG;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -728,7 +757,9 @@
                      MYSQL_BIND *results)
 {
   if (rs->dst_size != rs->mysql_bind_output_length)
-      return GNUNET_SYSERR;
+    return GNUNET_SYSERR;
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   return GNUNET_OK;
 }
 
@@ -773,10 +804,14 @@
                     unsigned int column,
                     MYSQL_BIND *results)
 {
+  if (sizeof (uint64_t) != rs->dst_size)
+    return GNUNET_SYSERR;
   results[0].buffer = rs->dst;
   results[0].buffer_length = rs->dst_size;
   results[0].length = &rs->mysql_bind_output_length;
   results[0].buffer_type = MYSQL_TYPE_LONGLONG;
+  results[0].is_null = &rs->is_null;
+  rs->is_null = 0;
 
   return GNUNET_OK;
 }
@@ -801,8 +836,10 @@
                      unsigned int column,
                      MYSQL_BIND *results)
 {
-  if (rs->dst_size != rs->mysql_bind_output_length)
+  if (sizeof (uint64_t) != rs->dst_size)
     return GNUNET_SYSERR;
+  if (*results->is_null)
+    return GNUNET_SYSERR;
   return GNUNET_OK;
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]