X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=bindings%2Fruby%2Fdefs.h;h=a2cb38c8a74425ed193144c2607b752210f603f5;hb=HEAD;hp=7ddb5df5ae0df3ef02f1cc52a67cf432374dc643;hpb=02b162116079a0b2e35823e5590a82056d22c8af;p=notmuch diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index 7ddb5df5..a2cb38c8 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -23,6 +23,7 @@ #include #include +#include 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), ¬much_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), ¬much_rb_directory_type, (ptr)) -#define Data_Get_Notmuch_FileNames(obj, ptr) \ - Data_Get_Notmuch_Object ((obj), ¬much_rb_filenames_type, (ptr)) - #define Data_Get_Notmuch_Query(obj, ptr) \ Data_Get_Notmuch_Object ((obj), ¬much_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