Re-add Feature#sysdef!

This commit is contained in:
0x1eef 2024-03-06 20:59:54 -03:00
parent bd0d8c4cd9
commit c3874d7dae
2 changed files with 38 additions and 0 deletions

View file

@ -44,6 +44,28 @@ ffi_available_features(VALUE self)
return features; return features;
} }
static VALUE
ffi_reset(VALUE self, VALUE rb_feature, VALUE rb_path)
{
VALUE rb_enable_flag, rb_disable_flag;
char *enable_flag, *disable_flag, *path;
rb_enable_flag = rb_funcall(rb_feature, rb_intern("enable"), 0);
rb_disable_flag = rb_funcall(rb_feature, rb_intern("disable"), 0);
Check_Type(rb_path, T_STRING);
Check_Type(rb_enable_flag, T_STRING);
Check_Type(rb_disable_flag, T_STRING);
path = RSTRING_PTR(rb_path);
enable_flag = RSTRING_PTR(rb_enable_flag);
disable_flag = RSTRING_PTR(rb_disable_flag);
if(hbsdcontrol_extattr_rm_attr(path, disable_flag) == 0 ||
hbsdcontrol_extattr_rm_attr(path, enable_flag) == 0) {
return Qtrue;
} else {
return Qfalse;
}
}
static VALUE static VALUE
feature_set(VALUE self, VALUE path, VALUE state) feature_set(VALUE self, VALUE path, VALUE state)
{ {
@ -83,5 +105,6 @@ Init_hbsdctl(void)
rb_define_const(rb_mControl, "Enable", INT2NUM(1)); rb_define_const(rb_mControl, "Enable", INT2NUM(1));
rb_define_singleton_method(rb_mFFI, "available_features", ffi_available_features, 0); rb_define_singleton_method(rb_mFFI, "available_features", ffi_available_features, 0);
rb_define_singleton_method(rb_mFFI, "library_version", ffi_library_version, 0); rb_define_singleton_method(rb_mFFI, "library_version", ffi_library_version, 0);
rb_define_singleton_method(rb_mFFI, "reset!", ffi_reset, 2);
rb_define_private_method(rb_cFeature, "set!", feature_set, 2); rb_define_private_method(rb_cFeature, "set!", feature_set, 2);
} }

View file

@ -40,6 +40,21 @@ module BSD::Control
set!(path, BSD::Control::Disable) set!(path, BSD::Control::Disable)
end end
##
# Restore system defaults.
#
# @param [String] path
# The path to a file.
#
# @raise [BSD::Control::Error]
# When the operation fails.
#
# @return [Boolean]
# Returns true on success.
def sysdef!(path)
FFI.reset!(self, path)
end
# @endgroup # @endgroup
## ##