コード例 #1
0
ファイル: emitter_t.c プロジェクト: allisonmobley/frozen
static ssize_t data_emitter_t_handler (data_t *data, fastcall_header *hargs) { // {{{
    ssize_t                   ret            = 0;
    emitter_t                *fdata          = (emitter_t *)data->ptr;

    switch(hargs->action) {
    case ACTION_CONVERT_FROM:
        ;
        hash_t                   *parameters;
        fastcall_convert_from    *fargs            = (fastcall_convert_from *)hargs;

        data_get(ret, TYPE_HASHT, parameters, fargs->src);
        if(ret != 0)
            return -EINVAL;

        if(fdata == NULL) {
            if( (data->ptr = fdata = calloc(1, sizeof(emitter_t))) == NULL)
                return -ENOMEM;

            fdata->allocated = 1;
        }

        hash_data_consume(ret, TYPE_MACHINET, fdata->machine, parameters, HK(machine));
        hash_data_consume(ret, TYPE_HASHT,    fdata->request, parameters, HK(request));

        if(fdata->machine != NULL && fdata->request != NULL)
            break;

        fdata->request = NULL;
        ret = -EFAULT;
    // fall
    case ACTION_FREE:
        if(fdata == NULL)
            return -EFAULT;

        shop_destroy(fdata->machine);
        hash_free(fdata->request);
        if(fdata->allocated)
            free(data->ptr);

        data->ptr = NULL;
        break;

    default:
        if(fdata == NULL)
            return -EFAULT;

        return machine_query(fdata->machine, fdata->request);
    }
    return ret;
} // }}}
コード例 #2
0
ファイル: morph.c プロジェクト: samuell/frozen
static ssize_t morph_configure(machine_t *machine, config_t *config){ // {{{
	ssize_t                ret;
	morph_userdata      *userdata          = (morph_userdata *)machine->userdata;
	
	hash_data_get    (ret, TYPE_UINTT, userdata->pass_first,     config, HK(pass_first));
	hash_data_consume(ret, TYPE_HASHT, userdata->machine_config, config, HK(config));
	if(ret != 0)
		return error("HK(config) not supplied");
	
	//userdata->running = 0; // calloc in init already set it
	return 0;
} // }}}
コード例 #3
0
ファイル: structs.c プロジェクト: samuell/frozen
static ssize_t struct_configure(machine_t *machine, hash_t *config){ // {{{
	ssize_t                ret;
	struct_userdata       *userdata      = (struct_userdata *)machine->userdata;
	
	hash_data_consume(ret, TYPE_HASHT,    userdata->structure,  config, HK(structure));
	hash_data_get    (ret, TYPE_HASHKEYT, userdata->buffer,     config, HK(buffer));
	hash_data_get    (ret, TYPE_HASHKEYT, userdata->key_values, config, HK(values));
	hash_data_get    (ret, TYPE_HASHKEYT, userdata->size,       config, HK(size));
	hash_data_get    (ret, TYPE_UINTT,    userdata->lazy,       config, HK(lazy));
	
	userdata->values     = (userdata->key_values == 0) ? STRUCT_VALUES_WHOLE : STRUCT_VALUES_ONE;
	
	if(userdata->buffer == 0 && userdata->lazy == 0)
		return error("machine struct parameter buffer invalid");
	if(userdata->structure == NULL)
		return error("machine struct parameter structure invalid");
	
	return 0;
} // }}}