ext/capng/capability.c in capng_c-0.2.0 vs ext/capng/capability.c in capng_c-0.2.1

- old
+ new

@@ -115,19 +115,41 @@ rb_raise(rb_eArgError, "Expected a String or a Symbol instance"); } return INT2NUM(capability); } +/* + * Obtain capability code and name pairs with enumerable. + * + * @yield [Integer, String] + * @return [nil] + * + */ +static VALUE +rb_capng_capability_each(VALUE self) +{ + RETURN_ENUMERATOR(self, 0, 0); + + for (int i = 0; capabilityInfoTable[i].name != NULL; i++) { + rb_yield_values(2, + INT2NUM(capabilityInfoTable[i].code), + rb_str_new2(capabilityInfoTable[i].name)); + } + + return Qnil; +} + void Init_capng_capability(VALUE rb_cCapNG) { VALUE rb_cCapability = rb_define_class_under(rb_cCapNG, "Capability", rb_cObject); rb_define_alloc_func(rb_cCapability, rb_capng_capability_alloc); rb_define_method(rb_cCapability, "initialize", rb_capng_capability_initialize, 0); rb_define_method(rb_cCapability, "to_name", rb_capng_capability_to_name, 1); rb_define_method(rb_cCapability, "from_name", rb_capng_capability_from_name, 1); + rb_define_method(rb_cCapability, "each", rb_capng_capability_each, 0); // Capability constants. /* Make arbitrary changes to file UIDs and GIDs (see chown(2)). */ rb_define_const(rb_cCapability, "CHOWN", INT2NUM(CAP_CHOWN));