diff --git a/ext/hbsdctl.rb/feature.c b/ext/hbsdctl.rb/feature.c index a2430c3..e4a5899 100644 --- a/ext/hbsdctl.rb/feature.c +++ b/ext/hbsdctl.rb/feature.c @@ -1,7 +1,8 @@ #include #include #include "include/feature.h" -static VALUE get_rb_eError(void); +static VALUE __rb_eError(void); +static VALUE __set(VALUE, VALUE, VALUE); /** * BSD::Control::Feature#set! @@ -12,30 +13,35 @@ feature_set(VALUE self, VALUE rb_path, VALUE rb_state) Check_Type(rb_path, T_STRING); Check_Type(rb_state, T_FIXNUM); if (getuid() != 0) { - rb_raise(get_rb_eError(), "This operation requires root privileges."); + rb_raise(__rb_eError(), "This operation requires root privileges."); } else if (rb_funcall(rb_cFile, rb_intern("exist?"), 1, rb_path) == Qfalse) { - rb_raise(get_rb_eError(), "The given path does not exist."); + rb_raise(__rb_eError(), "The given path does not exist."); } else { - int r; - VALUE rb_name; - rb_name = rb_funcall(self, rb_intern("name"), 0); - Check_Type(rb_name, T_STRING); - r = hbsdcontrol_set_feature_state( - RSTRING_PTR(rb_path), - RSTRING_PTR(rb_name), - NUM2INT(rb_state) - ); - if (r == 0) { - return (Qtrue); - } else { - rb_raise(get_rb_eError(), "hbsdcontrol_set_feature_state failed"); - } + VALUE rb_feature = rb_funcall(self, rb_intern("name"), 0); + Check_Type(rb_feature, T_STRING); + return (__set(rb_path, rb_feature, rb_state)); } } static VALUE -get_rb_eError(void) +__set(VALUE rb_path, VALUE rb_feature, VALUE rb_state) +{ + int result = hbsdcontrol_set_feature_state( + RSTRING_PTR(rb_path), + RSTRING_PTR(rb_feature), + NUM2INT(rb_state) + ); + if (result == 0) { + return (Qtrue); + } else { + rb_raise(__rb_eError(), "hbsdcontrol_set_feature_state failed"); + } +} + + +static VALUE +__rb_eError(void) { VALUE rb_mBSD = rb_const_get(rb_cObject, rb_intern("BSD")), rb_mControl = rb_const_get(rb_mBSD, rb_intern("Control")),