CAMLprim value win_findfirst(value name) { HANDLE h; value v; WIN32_FIND_DATA fileinfo; value valname = Val_unit; value valh = Val_unit; caml_unix_check_path(name, "opendir"); Begin_roots2 (valname,valh); h = FindFirstFile(String_val(name),&fileinfo); if (h == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); if (err == ERROR_NO_MORE_FILES) raise_end_of_file(); else { win32_maperr(err); uerror("opendir", Nothing); } } valname = copy_string(fileinfo.cFileName); valh = win_alloc_handle(h); v = alloc_small(2, 0); Field(v,0) = valname; Field(v,1) = valh; End_roots(); return v; }
CAMLprim value win_findfirstw(value name) { HANDLE h; WIN32_FIND_DATAW fileinfo; CAMLparam1(name); CAMLlocal3(v, valname, valh); h = FindFirstFileW((LPCWSTR) String_val(name),&fileinfo); if (h == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); if ((err == ERROR_NO_MORE_FILES) || (err == ERROR_FILE_NOT_FOUND)) raise_end_of_file(); else { win32_maperr(err); uerror("opendir", Nothing); } } valname = copy_wstring(fileinfo.cFileName); valh = win_alloc_handle(h); v = alloc_small(2, 0); Field(v,0) = valname; Field(v,1) = valh; CAMLreturn (v); }
CAMLprim value unix_readdir(value vd) { DIR * d; directory_entry * e; d = DIR_Val(vd); if (d == (DIR *) NULL) unix_error(EBADF, "readdir", Nothing); e = readdir((DIR *) d); if (e == (directory_entry *) NULL) raise_end_of_file(); return copy_string(e->d_name); }
value mlgz_input_scan_line(value chan, value buf) { gzFile str=Gzfile_val(chan); int len = string_length(buf); char *c_buf= String_val(buf); if(gzeof(str)) raise_end_of_file(); if((gzgets(str, c_buf, len))==Z_NULL) mlgz_error(str); return Val_int(strlen(c_buf)); }
value mlgz_gzgetc(value chan) { gzFile str=Gzfile_val(chan); int res ; res = gzgetc(Gzfile_val(chan)); if(res<0){ if(gzeof(str)) raise_end_of_file(); else mlgz_error(str); } return Val_int(res); }
CAMLprim value win_findnext(value valh) { WIN32_FIND_DATA fileinfo; BOOL retcode; retcode = FindNextFile(Handle_val(valh), &fileinfo); if (!retcode) { DWORD err = GetLastError(); if (err == ERROR_NO_MORE_FILES) raise_end_of_file(); else { win32_maperr(err); uerror("readdir", Nothing); } } return copy_string(fileinfo.cFileName); }