From: Ryan McGovern Date: 2006-07-15T08:01:11+09:00 Subject: Help making a ruby module I am working on making a ruby module to wrapper the xsan quota fctl calls. I have C code that will get the quota information, but using the picaxe book i dont quite understand how to make a wrapper. Essecally i need 2 functions, a GetQuota function that would return a Ruby struct with the information and a SetQuota function the GetQuota would take only a name("mcgoverp") and a type ("U"), the SetQuota function would take a hard limit soft limit and time out as well as a name and a type. This is my current trial #include "ruby.h" #include "./extapi.h" #include #include #include static VALUE cXsanQuota; static void free_quota(void *p) { } static VALUE quota_alloc(VALUE klass){ } static VALUE quota_initialize(VALUE self) { return self; } static VALUE get_quota(VALUE self,VALUE user,VALUE system) { const char* in_file = "/Home/"; int in_fd = open(in_file, O_RDONLY); //open existing file GetQuotaReqReply_t test; GetQuotaReq_t request; request.gq_type='U'; strcpy(request.gq_quotaname,t.pw_name); test.req=request; int res=fcntl(in_fd,F_GETQUOTA,&test); //test.response has struct //how do i return that? } static VALUE set_quota(VALUE self,VALUE user, VALUE hl, VALUE sl, VALUE to) { SetQuotaReq_t setquota; char *str; str=RSTRING(user)->ptr; strcpy(setquota.sq_quotaname,str); setquota.sq_type="U"; setquota.sq_timelimit=FIX2INT(to); setquota.sq_hardlimit=NUM2ULONG(hl); setquota.sq_softlimit=NUM2ULONG(sl); res=fcntl(in_fd,F_SETQUOTA,&setquota); return res; } void Init_XsanQuota() { cXsanQuota=rb_define_class("XsanQuota",rb_cObject); rb_define_alloc_func(cXsanQuota,quota_alloc); rb_define_method(cXsanQuota,"initialize", quota_initialize,1); rb_define_method(cXsanQuota,"getQuota", quota_initialize,3); rb_define_method(cXsanQuota,"setQuota", quota_initialize,5); }