static int ipaddrrange_new(Value *vret, Value *v, RefNode *node) { RefStr *rs = Value_vp(v[1]); char *ipaddr = NULL; const char *mask = NULL; int ret; if (str_has0(rs->c, rs->size)) { fs->throw_errorf(fs->mod_io, "SocketError", "No address found"); return FALSE; } if (fg->stk_top > v + 2) { char bits_str[8]; RefNode *v2_type = fs->Value_type(v[2]); if (v2_type == fs->cls_str) { mask = Value_cstr(v[2]); } else if (v2_type == fs->cls_int) { int64_t imask = fs->Value_int64(v[2], NULL); if (imask < 0) { imask = 0; } else if (imask > 128) { imask = 128; } sprintf(bits_str, "%d", (int)imask); mask = bits_str; } else { fs->throw_error_select(THROW_ARGMENT_TYPE2__NODE_NODE_NODE_INT, fs->cls_str, fs->cls_int, v2_type, 2); return FALSE; } ipaddr = Value_cstr(v[1]); ret = ipaddrrange_new_sub(vret, ipaddr, mask); } else { // "/"で分割する int i; for (i = 0; i < rs->size; i++) { if (rs->c[i] == '/') { ipaddr = fs->str_dup_p(rs->c, i, NULL); mask = rs->c + i + 1; break; } } if (ipaddr == NULL) { ipaddr = fs->str_dup_p(rs->c, rs->size, NULL); mask = NULL; } ret = ipaddrrange_new_sub(vret, ipaddr, mask); free(ipaddr); } return ret; }
static int applescript_new(Value *vret, Value *v, RefNode *node) { RefNode *cls_as = FUNC_VP(node); RefAppleScript *r = fs->buf_new(cls_as, sizeof(RefAppleScript)); const char *src = Value_cstr(v[1]); *vret = vp_Value(r); if (!apple_script_new_sub(r, src)) { return FALSE; } return TRUE; }
static GFile *value_to_gfile(Value v) { const RefNode *type = fs->Value_type(v); if (type == fs->cls_str || type == fs->cls_file) { return filename_to_gfile(Value_vp(v)); } else if (type == fs->cls_uri) { GFile *gf = g_file_new_for_uri(Value_cstr(v)); return gf; } else { fs->throw_errorf(fs->mod_lang, "TypeError", "Str, File or Uri required but %n", type); return NULL; } }
static int markdown_compile(Value *vret, Value *v, RefNode *node) { Ref *r = Value_vp(*v); Markdown *md = Value_ptr(r->v[INDEX_MARKDOWN_MD]); if (!parse_markdown(md, Value_cstr(v[1]))) { return FALSE; } if (!link_markdown(r)) { return FALSE; } return TRUE; }
static int output_nslog(Value *vret, Value *v, RefNode *node) { output_nslog_sub(Value_cstr(v[1])); return TRUE; }