static void func_new_from_value (NCDModuleInst *i) { // read arguments NCDValue *arg_value; if (!NCDValue_ListRead(i->args, 1, &arg_value)) { ModuleLog(i, BLOG_ERROR, "wrong arity"); goto fail0; } if (NCDValue_Type(arg_value) != NCDVALUE_STRING) { ModuleLog(i, BLOG_ERROR, "wrong type"); goto fail0; } // parse value uintmax_t value; if (!parse_unsigned_integer(NCDValue_StringValue(arg_value), &value)) { ModuleLog(i, BLOG_ERROR, "wrong value"); goto fail0; } // check overflow if (value > SIZE_MAX) { ModuleLog(i, BLOG_ERROR, "value too large"); goto fail0; } func_new_templ(i, value); return; fail0: NCDModuleInst_Backend_SetError(i); NCDModuleInst_Backend_Dead(i); }
static void func_new_from_value (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params) { // read arguments NCDValRef arg_value; if (!NCDVal_ListRead(params->args, 1, &arg_value)) { ModuleLog(i, BLOG_ERROR, "wrong arity"); goto fail0; } if (!NCDVal_IsString(arg_value)) { ModuleLog(i, BLOG_ERROR, "wrong type"); goto fail0; } // parse value uintmax_t value; if (!ncd_read_uintmax(arg_value, &value)) { ModuleLog(i, BLOG_ERROR, "wrong value"); goto fail0; } // check overflow if (value > SIZE_MAX) { ModuleLog(i, BLOG_ERROR, "value too large"); goto fail0; } func_new_templ(vo, i, value); return; fail0: NCDModuleInst_Backend_DeadError(i); }
static void func_new_from_index (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params) { struct instance *index = NCDModuleInst_Backend_GetUser((NCDModuleInst *)params->method_user); // check overflow if (index->value == SIZE_MAX) { ModuleLog(i, BLOG_ERROR, "overflow"); goto fail0; } func_new_templ(vo, i, index->value + 1); return; fail0: NCDModuleInst_Backend_DeadError(i); }
static void func_new_from_index (NCDModuleInst *i) { struct instance *index = ((NCDModuleInst *)i->method_user)->inst_user; // check overflow if (index->value == SIZE_MAX) { ModuleLog(i, BLOG_ERROR, "overflow"); goto fail0; } func_new_templ(i, index->value + 1); return; fail0: NCDModuleInst_Backend_SetError(i); NCDModuleInst_Backend_Dead(i); }