Sha256: c882bd2f0030f12e8c9af0a918e4e5af030cfb97065e173461002cbfebc8015a
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
#include <tifffile.h> struct my_malloc { size_t size; void *ptr; }; static void my_malloc_free(void *p) { struct my_malloc *ptr = p; if (ptr->size > 0) free(ptr->ptr); } static VALUE my_malloc_alloc(VALUE klass) { VALUE obj; struct my_malloc *ptr; obj = Data_Make_Struct(klass, struct my_malloc, NULL, my_malloc_free, ptr); ptr->size = 0; ptr->ptr = NULL; return obj; } static VALUE my_malloc_init(VALUE self, VALUE size) { struct my_malloc *ptr; size_t requested = NUM2SIZET(size); if (0 == requested) rb_raise(rb_eArgError, "unable to allocate 0 bytes"); Data_Get_Struct(self, struct my_malloc, ptr); ptr->ptr = malloc(requested); if (NULL == ptr->ptr) rb_raise(rb_eNoMemError, "unable to allocate %ld bytes", requested); ptr->size = requested; return self; } static VALUE my_malloc_release(VALUE self) { struct my_malloc *ptr; Data_Get_Struct(self, struct my_malloc, ptr); if (0 == ptr->size) return self; ptr->size = 0; free(ptr->ptr); return self; } void Init_my_malloc(void) { VALUE cMyMalloc; cMyMalloc = rb_const_get(rb_cObject, rb_intern("TiffFile")); rb_define_alloc_func(cMyMalloc, my_malloc_alloc); rb_define_method(cMyMalloc, "initialize", my_malloc_init, 1); rb_define_method(cMyMalloc, "free", my_malloc_release, 0); }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tifffile-0.0.1 | ext/tifffile/tifffile.c |