#include "vcedit.h"
#include "comments.h"
+#define CHECK_CLOSED(o) \
+ if (!o->state) \
+ rb_raise (eClosed, "closed stream");
+
typedef struct {
vcedit_state *state;
VALUE comments;
static VALUE c_close (VALUE self);
-static VALUE cComments, eVT, eOpen, eInvalidData, eInvalidComment,
- eTempFile, eReopen;
+static VALUE cComments, eVT, eClosed, eOpen, eInvalidData,
+ eInvalidComment, eTempFile, eReopen;
static ID id_length;
static void
/*
* call-seq:
- * object.close -> object
+ * object.close -> nil
*
- * Closes *object* and returns it.
+ * Closes *object*. Further method calls on *object* will raise an
+ * Ogg::Vorbis::Tagger::ClosedStreamError exception.
+ * Returns +nil+.
*/
static VALUE
c_close (VALUE self)
Data_Get_Struct (self, RbVorbisTagger, o);
+ CHECK_CLOSED (o);
+
vcedit_state_unref (o->state);
o->state = NULL;
- return self;
+ return Qnil;
}
/*
Data_Get_Struct (self, RbVorbisTagger, o);
+ CHECK_CLOSED (o);
+
comments_sync (o->comments, o->state);
switch (vcedit_write (o->state)) {
Data_Get_Struct (self, RbVorbisTagger, o);
+ CHECK_CLOSED (o);
+
return o->comments;
}
rb_define_method (cVT, "comments", c_comments, 0);
eVT = rb_define_class_under (cVT, "TaggerError", eVorbis);
+ eClosed = rb_define_class_under (cVT, "ClosedStreamError", eVT);
eOpen = rb_define_class_under (cVT, "OpenError", eVT);
eInvalidData = rb_define_class_under (cVT, "InvalidDataError", eVT);
eInvalidComment = rb_define_class_under (cVT, "InvalidCommentError",