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; } // }}}
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; } // }}}
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; } // }}}