fixing leak
[oweals/gnunet.git] / src / monkey / edb_api.c
index 78a340cd5e7b97a76775023ec425f96e248670c7..65b16a4a6b2a813858b73ddc3449adc91ec34b00 100644 (file)
@@ -81,11 +81,47 @@ GNUNET_MONKEY_EDB_disconnect (struct GNUNET_MONKEY_EDB_Context *cntxt)
 }
 
 
+/**
+ * Return the line number of the end-of-scope for the expression indicated by start_line_no
+ *
+ * @param cntxt context containing the Expression Database handle
+ * @param file_name path to the file in which the expression in question exists
+ * @param start_line_no expression's line
+ * @param iter callback function, iterator for values returned from the Database
+ * @param iter_cls closure for the expression iterator, will contain the scope-end line number
+ * @return GNUNET_OK on success, GNUNET_NO on failure
+ */
+int
+GNUNET_MONKEY_EDB_get_expression_scope_end(struct GNUNET_MONKEY_EDB_Context *cntxt,
+                                 const char *file_name, int start_line_no,
+                                 GNUNET_MONKEY_ExpressionIterator iter,
+                                 void *iter_cls)
+{
+       int err;
+       char *errMsg;
+       char *query;
+
+       if (asprintf(&query, "select end_lineno from Expression where file_name LIKE \'%%/%s\' and start_lineno = %d", file_name, start_line_no) == -1) {
+         GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Memory allocation problem occurred during creating database query!\n");
+               return GNUNET_NO;
+       }
+
+       err = sqlite3_exec(cntxt->db_handle, query, iter, iter_cls, &errMsg);
+       if (err) {
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                 "Error occurred while executing Database query. `%s'",
+                 errMsg);
+               return GNUNET_NO;
+       }
+       return GNUNET_OK;
+}
+
+
 /**
  * Run an SQLite query to retrieve those expressions that are previous to
  * given expression and are in the same scope of the given expression
  * 
- * @param cntxt context containing the Expression Database handle.
+ * @param cntxt context containing the Expression Database handle
  * @param file_name path to the file in which the expression in question exists
  * @param start_line_no expression beginning line
  * @param end_line_no line number for the expression's scope end
@@ -105,11 +141,11 @@ GNUNET_MONKEY_EDB_get_expressions (struct GNUNET_MONKEY_EDB_Context *cntxt,
   char *query;
   if (asprintf
       (&query,
-       "select expr_syntax, start_lineno from Expression where file_name = \'%s\' and start_lineno < %d and end_lineno = %d",
+       "select expr_syntax, start_lineno from Expression where file_name LIKE \'%%/%s\' and start_lineno <= %d and end_lineno = %d",
        file_name, start_line_no, end_line_no) == -1)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 "Memory allocation problem occurred.");
+                 "Memory allocation problem occurred!\n");
       return GNUNET_NO;
     }