示例#1
0
文件: eval.c 项目: tinkertim/slash
SLVAL
sl_do_file(sl_vm_t* vm, char* filename)
{
    filename = sl_realpath(vm, filename);
    FILE* f = fopen(filename, "rb");
    uint8_t* src;
    size_t file_size;
    SLVAL err;
    
    if(!f) {
        err = sl_make_cstring(vm, "Could not load file: ");
        err = sl_string_concat(vm, err, sl_make_cstring(vm, filename));
        err = sl_string_concat(vm, err, sl_make_cstring(vm, " - "));
        err = sl_string_concat(vm, err, sl_make_cstring(vm, strerror(errno)));
        sl_throw(vm, sl_make_error2(vm, vm->lib.Error, err));
    }
    fseek(f, 0, SEEK_END);
    file_size = ftell(f);
    fseek(f, 0, SEEK_SET);
    src = sl_alloc(vm->arena, file_size);
    if(file_size && !fread(src, file_size, 1, f)) {
        fclose(f);
        err = sl_make_cstring(vm, "Could not load file: ");
        err = sl_string_concat(vm, err, sl_make_cstring(vm, filename));
        err = sl_string_concat(vm, err, sl_make_cstring(vm, " - "));
        err = sl_string_concat(vm, err, sl_make_cstring(vm, strerror(errno)));
        sl_throw(vm, sl_make_error2(vm, vm->lib.Error, err));
    }
    fclose(f);
    
    return sl_do_string(vm, src, file_size, filename, 0);
}
示例#2
0
文件: posix.c 项目: Hmaal/slash
sl_file_type_t
sl_file_type(struct sl_vm* vm, char* path)
{
    struct stat s;
    if(stat(sl_realpath(vm, path), &s)) {
        return SL_FT_NO_EXIST;
    }
    if(S_ISDIR(s.st_mode)) {
        return SL_FT_DIR;
    } else {
        return SL_FT_FILE;
    }
}
示例#3
0
文件: win32.c 项目: Hmaal/slash
sl_file_type_t
sl_file_type(struct sl_vm* vm, char* path)
{
    DWORD attrib = GetFileAttributes(sl_realpath(vm, path));
    if(attrib == INVALID_FILE_ATTRIBUTES) {
        return SL_FT_NO_EXIST;
    }
    if(attrib & FILE_ATTRIBUTE_DIRECTORY) {
        return SL_FT_DIR;
    } else {
        return SL_FT_FILE;
    }
}
示例#4
0
文件: cgi.c 项目: PatrickFang/slash
static SLVAL
sl_do_file_hashbang(sl_vm_t* vm, char* filename, int skip_hashbang)
{
    FILE* fh;
    uint8_t* src;
    long file_size;
    size_t real_start = 0;

    if(!skip_hashbang) {
        return sl_do_file(vm, filename);
    }

    filename = sl_realpath(vm, filename);
    fh = fopen(filename, "rb");

    if(!fh) {
        sl_error(vm, vm->lib.Error,
            "Could not load %Qs - %s", filename, strerror(errno));
    }

    fseek(fh, 0, SEEK_END);
    file_size = ftell(fh);
    fseek(fh, 0, SEEK_SET);

    if(file_size < 0) {
        sl_error(vm, vm->lib.Error,
            "Could not load %Qs - %s (count not get filesize)",
            filename, strerror(errno));
    }

    src = sl_alloc(vm->arena, file_size);
    if(file_size && !fread(src, file_size, 1, fh)) {
        fclose(fh);
        sl_error(vm, vm->lib.Error,
            "Could not load %Qs - %s",
            filename, strerror(errno));
    }
    fclose(fh);

    if(skip_hashbang) {
        real_start = get_hashbang_length(src, file_size);
    }

    return sl_do_string(vm,
        src + real_start,
        file_size - real_start,
        filename, 0);
}
示例#5
0
文件: posix.c 项目: Hmaal/slash
int
sl_file_exists(sl_vm_t* vm, char* path)
{
    struct stat s;
    return !stat(sl_realpath(vm, path), &s);
}
示例#6
0
文件: win32.c 项目: tinkertim/slash
int
sl_file_exists(sl_vm_t* vm, char* path)
{
    DWORD dwAttrib = GetFileAttributes(sl_realpath(vm, path));
    return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
示例#7
0
文件: win32.c 项目: Hmaal/slash
int
sl_file_exists(sl_vm_t* vm, char* path)
{
    DWORD dwAttrib = GetFileAttributes(sl_realpath(vm, path));
    return dwAttrib != INVALID_FILE_ATTRIBUTES;
}