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); }
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; } }
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; } }
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); }
int sl_file_exists(sl_vm_t* vm, char* path) { struct stat s; return !stat(sl_realpath(vm, path), &s); }
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)); }
int sl_file_exists(sl_vm_t* vm, char* path) { DWORD dwAttrib = GetFileAttributes(sl_realpath(vm, path)); return dwAttrib != INVALID_FILE_ATTRIBUTES; }