コード例 #1
0
ファイル: output.c プロジェクト: Astalaseven/pom-ng
int output_register(struct output_reg_info *reg_info) {

	pomlog(POMLOG_DEBUG "Registering output %s", reg_info->name);

	if (reg_info->api_ver != OUTPUT_API_VER) {
		pomlog(POMLOG_ERR "Cannot register output as API version differ : expected %u got %u", OUTPUT_API_VER, reg_info->api_ver);
		return POM_ERR;
	}

	pom_mutex_lock(&output_lock);
	struct output_reg *output = malloc(sizeof(struct output_reg));
	if (!output) {
		pom_mutex_unlock(&output_lock);
		pom_oom(sizeof(struct output_reg));
		return POM_ERR;
	}
	memset(output, 0, sizeof(struct output_reg));
	output->reg_info = reg_info;

	if (registry_add_instance_type(output_registry_class, reg_info->name) != POM_OK) {
		pom_mutex_unlock(&output_lock);
		free(output);
		return POM_ERR;
	}

	output->next = output_reg_head;
	if (output->next)
		output->next->prev = output;
	output_reg_head = output;
	pom_mutex_unlock(&output_lock);

	mod_refcount_inc(reg_info->mod);

	return POM_OK;
}
コード例 #2
0
ファイル: input.c プロジェクト: dkarametos/pom-ng
int input_register(struct input_reg_info *reg_info) {

	pomlog(POMLOG_DEBUG "Registering input %s", reg_info->name);

	if (reg_info->api_ver != INPUT_API_VER) {
		pomlog(POMLOG_ERR "API version of input %s does not match : expected %s got %s", reg_info->name, INPUT_API_VER, reg_info->api_ver);
		return POM_ERR;
	}

	struct input_reg *tmp;
	for (tmp = input_reg_head; tmp && strcmp(tmp->info->name, reg_info->name); tmp = tmp->next);
	if (tmp) {
		pomlog(POMLOG_ERR "Input %s already registered", reg_info->name);
		return POM_ERR;
	}

	struct input_reg *reg = malloc(sizeof(struct input_reg));
	if(!reg) {
		pom_oom(sizeof(struct input_reg));
		return POM_ERR;
	}

	memset(reg, 0, sizeof(struct input_reg));
	reg->info = reg_info;

	if (registry_add_instance_type(input_registry_class, reg_info->name) != POM_OK) {
		free(reg);
		return POM_ERR;
	}

	mod_refcount_inc(reg_info->mod);

	reg->next = input_reg_head;
	input_reg_head = reg;
	if (reg->next)
		reg->next->prev = reg;

	return POM_OK;

}