Object
static VALUE
ossl_config_initialize(int argc, VALUE *argv, VALUE self)
{
CONF *conf;
long eline = -1;
char *filename;
VALUE path;
rb_scan_args(argc, argv, "01", &path);
if(!NIL_P(path)){
SafeStringValue(path);
filename = StringValuePtr(path);
GetConfig(self, conf);
if (!NCONF_load(conf, filename, &eline)){
if (eline <= 0)
ossl_raise(eConfigError, "wrong config file %s", filename);
else
ossl_raise(eConfigError, "error in %s:%d", filename, eline);
}
}
#ifdef OSSL_NO_CONF_API
else rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");
#else
else {
GetConfig(self, conf);
_CONF_new_data(conf);
}
#endif
return self;
}
Get all numbers as strings - use str.to_i to convert long number = CONF_get_number(confp->config, sect, StringValuePtr(item));
static VALUE
ossl_config_get_section(VALUE self, VALUE section)
{
CONF *conf;
STACK_OF(CONF_VALUE) *sk;
CONF_VALUE *entry;
int i, entries;
VALUE hash;
hash = rb_hash_new();
StringValue(section);
GetConfig(self, conf);
if (!(sk = NCONF_get_section(conf, StringValuePtr(section)))) {
ERR_clear_error();
return hash;
}
if ((entries = sk_CONF_VALUE_num(sk)) < 0) {
OSSL_Debug("# of items in section is < 0?!?");
return hash;
}
for (i=0; i<entries; i++) {
entry = sk_CONF_VALUE_value(sk, i);
rb_hash_aset(hash, rb_str_new2(entry->name), rb_str_new2(entry->value));
}
return hash;
}
static VALUE
ossl_config_set_section(VALUE self, VALUE section, VALUE hash)
{
VALUE arg[2];
rb_ossl_config_modify_check(self);
arg[0] = self;
arg[1] = section;
rb_block_call(hash, rb_intern("each"), 0, 0, set_conf_section_i, (VALUE)arg);
return hash;
}
static VALUE
ossl_config_add_value_m(VALUE self, VALUE section, VALUE name, VALUE value)
{
rb_ossl_config_modify_check(self);
return ossl_config_add_value(self, section, name, value);
}
static VALUE
ossl_config_each(VALUE self)
{
CONF *conf;
RETURN_ENUMERATOR(self, 0, 0);
GetConfig(self, conf);
lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(each_conf_value),
(void*)NULL);
return self;
}
static VALUE
ossl_config_get_value(VALUE self, VALUE section, VALUE name)
{
CONF *conf;
char *str;
StringValue(section);
StringValue(name);
GetConfig(self, conf);
str = NCONF_get_string(conf, RSTRING_PTR(section), RSTRING_PTR(name));
if(!str){
ERR_clear_error();
return Qnil;
}
return rb_str_new2(str);
}
static VALUE
ossl_config_inspect(VALUE self)
{
VALUE str, ary = ossl_config_get_sections(self);
const char *cname = rb_class2name(rb_obj_class(self));
str = rb_str_new2("#<");
rb_str_cat2(str, cname);
rb_str_cat2(str, " sections=");
rb_str_append(str, rb_inspect(ary));
rb_str_cat2(str, ">");
return str;
}
static VALUE
ossl_config_get_section_old(VALUE self, VALUE section)
{
rb_warn("Config#section is deprecated; use Config#[]");
return ossl_config_get_section(self, section);
}
static VALUE
ossl_config_get_sections(VALUE self)
{
CONF *conf;
VALUE ary;
GetConfig(self, conf);
ary = rb_ary_new();
lh_doall_arg((_LHASH *)conf->data, LHASH_DOALL_ARG_FN(get_conf_section),
(void*)ary);
return ary;
}
static VALUE
ossl_config_to_s(VALUE self)
{
CONF *conf;
GetConfig(self, conf);
return dump_conf(conf);
}
static VALUE
ossl_config_get_value_old(int argc, VALUE *argv, VALUE self)
{
VALUE section, name;
rb_scan_args(argc, argv, "11", §ion, &name);
/* support conf.value(nil, "HOME") -> conf.get_value("", "HOME") */
if (NIL_P(section)) section = rb_str_new2("");
/* support conf.value("HOME") -> conf.get_value("", "HOME") */
if (NIL_P(name)) {
name = section;
section = rb_str_new2("");
}
/* NOTE: Don't care about conf.get_value(nil, nil) */
rb_warn("Config#value is deprecated; use Config#get_value");
return ossl_config_get_value(self, section, name);
}