/* variable_new */ Variable * variable_new(VariableType type, void * value) { Variable * variable; if((variable = object_new(sizeof(*variable))) == NULL) return NULL; if(variable_set_from(variable, type, value) != 0) { object_delete(variable); return NULL; } return variable; }
/* main */ int main(void) { int ret = 0; size_t i; const size_t count = 10; Variable ** args; int32_t i32; Variable * res; i32 = 0; if((res = variable_new(VT_INT32, &i32)) == NULL) return 2; if((args = malloc(sizeof(*args) * count)) == NULL) { variable_delete(res); return 2; } for(i = 0; i < count; i++) { i32 = i * 1111; if((args[i] = variable_new(VT_INT32, &i32)) == NULL) ret = 3; } for(i = 0; ret == 0 && i < count; i++) { i32 = i; if(variable_set_from(args[0], VT_INT32, &i32) != 0) ret = i + 4; else if(marshall_call(res, (MarshallCallback)_calln, i + 1, args) != 0) ret = i + 4; else if(variable_get_as(res, VT_INT32, &i32) != 0 || i32 != 0) ret = i + 4; } for(i = 0; i < count; i++) if(args[i] != NULL) variable_delete(args[i]); variable_delete(res); free(args); return ret; }