Beispiel #1
0
static bool fill_defaults(struct LoaderCtx *ctx)
{
	const struct CfKey *k;
	const struct CfSect *s;

	s = find_sect(ctx->cf, ctx->cur_sect);
	if (!s)
		goto fail;

	if (s->section_start) {
		if (!s->section_start(ctx->top_base, ctx->cur_sect))
			return false;
	}

	if (s->set_key)
		return true;

	for (k = s->key_list; k->key_name; k++) {
		if (!k->def_value || (k->flags & CF_READONLY))
			continue;
		if ((k->flags & CF_NO_RELOAD) && ctx->cf->loaded)
			continue;
		if (!cf_set(ctx->cf, ctx->cur_sect, k->key_name, k->def_value))
			goto fail;
	}
	return true;
fail:
	log_error("fill_defaults fail");
	return false;
}
int						process_n_sect_64(t_symbol_info *sym_info,
		t_file_info *file_info, struct nlist_64 *symbol)
{
	t_section_info	*sect;

	sect = find_sect(symbol->n_sect, file_info);
	if (!sect)
		return (NOT_VALID);
	sym_info->type = get_char_sect_type(sect->sectname);
	return (SUCCESS);
}
Beispiel #3
0
bool cf_set(const struct CfContext *cf, const char *sect, const char *key, const char *val)
{
	const struct CfSect *s;
	const struct CfKey *k;
	void *base, *p;
	struct CfValue cv;

	/* find section */
	s = find_sect(cf, sect);
	if (!s) {
		log_error("Unknown section: %s", sect);
		return false;
	}

	/* find section base */
	base = cf->base;
	if (s->base_lookup)
	    base = s->base_lookup(base, sect);

	/* handle dynamic keys */
	if (s->set_key)
		return s->set_key(base, key, val);

	/* set fixed key */
	k = find_key(s, key);
	if (!k) {
		log_error("Unknown parameter: %s/%s", sect, key);
		return false;
	}
	if (!k->op.setter || (k->flags & CF_READONLY)) {
		/* silently ignore */
		return true;
	}
	if ((k->flags & CF_NO_RELOAD) && cf->loaded) {
		/* silently ignore */
		return true;
	}
	p = get_dest(base, k);
	if (!p) {
		log_error("Bug - no base for relative key: %s/%s", sect, key);
		return false;
	}
	cv.key_name = k->key_name;
	cv.extra = k->op.op_extra;
	cv.value_p = p;
	cv.buf = NULL;
	cv.buflen = 0;
	return k->op.setter(&cv, val);
}
Beispiel #4
0
const char *cf_get(const struct CfContext *cf, const char *sect, const char *key,
		   char *buf, int buflen)
{
	const struct CfSect *s;
	const struct CfKey *k;
	void *base, *p;
	struct CfValue cv;

	/* find section */
	s = find_sect(cf, sect);
	if (!s)
		return NULL;

	/* find section base */
	base = cf->base;
	if (s->base_lookup)
	    base = s->base_lookup(base, sect);

	/* handle dynamic keys */
	if (s->set_key) {
		if (!s->get_key)
			return NULL;
		return s->get_key(base, key, buf, buflen);
	}

	/* get fixed key */
	k = find_key(s, key);
	if (!k || !k->op.getter)
		return NULL;
	p = get_dest(base, k);
	if (!p)
		return NULL;
	cv.key_name = k->key_name;
	cv.extra = k->op.op_extra;
	cv.value_p = p;
	cv.buf = buf;
	cv.buflen = buflen;
	return k->op.getter(&cv);
}