]> git.cworth.org Git - notmuch/blobdiff - bindings/ruby/defs.h
emacs: Add new option notmuch-search-hide-excluded
[notmuch] / bindings / ruby / defs.h
index 7ddb5df5ae0df3ef02f1cc52a67cf432374dc643..a2cb38c8a74425ed193144c2607b752210f603f5 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <notmuch.h>
 #include <ruby.h>
+#include <talloc.h>
 
 extern VALUE notmuch_rb_cDatabase;
 extern VALUE notmuch_rb_cDirectory;
@@ -32,7 +33,6 @@ extern VALUE notmuch_rb_cThreads;
 extern VALUE notmuch_rb_cThread;
 extern VALUE notmuch_rb_cMessages;
 extern VALUE notmuch_rb_cMessage;
-extern VALUE notmuch_rb_cTags;
 
 extern VALUE notmuch_rb_eBaseError;
 extern VALUE notmuch_rb_eDatabaseError;
@@ -47,8 +47,6 @@ extern VALUE notmuch_rb_eUnbalancedFreezeThawError;
 extern VALUE notmuch_rb_eUnbalancedAtomicError;
 
 extern ID ID_call;
-extern ID ID_db_create;
-extern ID ID_db_mode;
 
 /* RSTRING_PTR() is new in ruby-1.9 */
 #if !defined(RSTRING_PTR)
@@ -58,7 +56,6 @@ extern ID ID_db_mode;
 extern const rb_data_type_t notmuch_rb_object_type;
 extern const rb_data_type_t notmuch_rb_database_type;
 extern const rb_data_type_t notmuch_rb_directory_type;
-extern const rb_data_type_t notmuch_rb_filenames_type;
 extern const rb_data_type_t notmuch_rb_query_type;
 extern const rb_data_type_t notmuch_rb_threads_type;
 extern const rb_data_type_t notmuch_rb_thread_type;
@@ -83,7 +80,7 @@ extern const rb_data_type_t notmuch_rb_tags_type;
     } while (0)
 
 #define Data_Wrap_Notmuch_Object(klass, type, ptr) \
-    TypedData_Wrap_Struct ((klass), (type), notmuch_rb_object_create ((ptr)))
+    TypedData_Wrap_Struct ((klass), (type), notmuch_rb_object_create ((ptr), "notmuch_rb_object: " __location__))
 
 #define Data_Get_Notmuch_Database(obj, ptr) \
     Data_Get_Notmuch_Object ((obj), &notmuch_rb_database_type, (ptr))
@@ -91,9 +88,6 @@ extern const rb_data_type_t notmuch_rb_tags_type;
 #define Data_Get_Notmuch_Directory(obj, ptr) \
     Data_Get_Notmuch_Object ((obj), &notmuch_rb_directory_type, (ptr))
 
-#define Data_Get_Notmuch_FileNames(obj, ptr) \
-    Data_Get_Notmuch_Object ((obj), &notmuch_rb_filenames_type, (ptr))
-
 #define Data_Get_Notmuch_Query(obj, ptr) \
     Data_Get_Notmuch_Object ((obj), &notmuch_rb_query_type, (ptr))
 
@@ -117,36 +111,35 @@ typedef struct {
 } notmuch_rb_object_t;
 
 static inline void *
-notmuch_rb_object_create (void *nm_object)
+notmuch_rb_object_create (void *nm_object, const char *name)
 {
-    notmuch_rb_object_t *rb_wrapper = malloc (sizeof (*rb_wrapper));
+    notmuch_rb_object_t *rb_wrapper = talloc_named_const (NULL, sizeof (*rb_wrapper), name);
+
     if (RB_UNLIKELY (!rb_wrapper))
        return NULL;
 
     rb_wrapper->nm_object = nm_object;
+    talloc_steal (rb_wrapper, nm_object);
     return rb_wrapper;
 }
 
 static inline void
 notmuch_rb_object_free (void *rb_wrapper)
 {
-    free (rb_wrapper);
+    talloc_free (rb_wrapper);
 }
 
-static inline notmuch_status_t
+static inline void
 notmuch_rb_object_destroy (VALUE rb_object, const rb_data_type_t *type)
 {
     notmuch_rb_object_t *rb_wrapper;
-    notmuch_status_t ret;
 
     Data_Get_Notmuch_Rb_Object (rb_object, type, rb_wrapper);
 
     /* Call the corresponding notmuch_*_destroy function */
-    ret = ((notmuch_status_t (*)(void *)) type->data) (rb_wrapper->nm_object);
+    ((void (*)(void *)) type->data) (rb_wrapper->nm_object);
     notmuch_rb_object_free (rb_wrapper);
     DATA_PTR (rb_object) = NULL;
-
-    return ret;
 }
 
 /* status.c */
@@ -157,6 +150,9 @@ notmuch_rb_status_raise (notmuch_status_t status);
 VALUE
 notmuch_rb_database_alloc (VALUE klass);
 
+VALUE
+notmuch_rb_database_destroy (VALUE self);
+
 VALUE
 notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE klass);
 
@@ -223,10 +219,7 @@ notmuch_rb_directory_get_child_directories (VALUE self);
 
 /* filenames.c */
 VALUE
-notmuch_rb_filenames_destroy (VALUE self);
-
-VALUE
-notmuch_rb_filenames_each (VALUE self);
+notmuch_rb_filenames_get (notmuch_filenames_t *fnames);
 
 /* query.c */
 VALUE
@@ -367,10 +360,7 @@ notmuch_rb_message_thaw (VALUE self);
 
 /* tags.c */
 VALUE
-notmuch_rb_tags_destroy (VALUE self);
-
-VALUE
-notmuch_rb_tags_each (VALUE self);
+notmuch_rb_tags_get (notmuch_tags_t *tags);
 
 /* init.c */
 void