blob: 2cb154e6a445fc26d2f9d982f98cb1798323f2f9 [file] [log] [blame]
%module ruby_manual_proxy
%typemap(in, numinputs=0) SWIGTYPE ** ($*1_ltype temp) "$1 = &temp;";
%typemap(argout) SWIGTYPE **OUTPARAM {
$result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
}
%apply SWIGTYPE **OUTPARAM {
svn_fs_t **
};
%typemap(check) svn_fs_t * {
if (!$1) {
svn_swig_rb_raise_svn_fs_already_close();
}
}
%{
typedef struct svn_fs_t {
char path[256];
} svn_fs_t;
void svn_fs_create(svn_fs_t **fs_p, const char *path) {
svn_fs_t *fs = (svn_fs_t *)malloc(sizeof(svn_fs_t));
strncpy(fs->path, path, 256);
*fs_p = fs;
}
const char *svn_fs_path(svn_fs_t *fs) {
return fs->path;
}
%}
typedef struct svn_fs_t svn_fs_t;
void svn_fs_create(svn_fs_t **fs_p, const char *path);
const char *svn_fs_path(svn_fs_t *fs);
%{
static void svn_swig_rb_raise_svn_fs_already_close(void) {
rb_raise(rb_eIOError, "already closed");
}
static VALUE svn_fs_swig_rb_close(VALUE self) {
if (!DATA_PTR(self)) {
svn_swig_rb_raise_svn_fs_already_close();
}
DATA_PTR(self) = NULL;
return Qnil;
}
static VALUE svn_fs_swig_rb_closed(VALUE self) {
return DATA_PTR(self) ? Qfalse : Qtrue;
}
%}
%insert("init") %{
{
VALUE cSvnfs;
cSvnfs = rb_const_get(_mSWIG, rb_intern("TYPE_p_svn_fs_t"));
rb_define_method(cSvnfs, "close",
VALUEFUNC(svn_fs_swig_rb_close), 0);
}
%}