Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
File: exio.c Progetto: x768/fox-lang
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;
    }
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
static int output_nslog(Value *vret, Value *v, RefNode *node)
{
    output_nslog_sub(Value_cstr(v[1]));
    return TRUE;
}