]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/os-windows.cpp
Use ParseCommandLineArgvw() on Windows again, instead of hand-rolled parser. Update...
[factor.git] / vm / os-windows.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 077bc48..df2a57f
@@ -9,26 +9,26 @@ void factor_vm::init_ffi()
 {
        hFactorDll = GetModuleHandle(FACTOR_DLL);
        if(!hFactorDll)
-               fatal_error("GetModuleHandle(\"" FACTOR_DLL_NAME "\") failed", 0);
+               fatal_error("GetModuleHandle() failed", 0);
 }
 
 void factor_vm::ffi_dlopen(dll *dll)
 {
-       dll->dll = LoadLibraryEx((WCHAR *)alien_offset(dll->path), NULL, 0);
+       dll->handle = LoadLibraryEx((WCHAR *)alien_offset(dll->path), NULL, 0);
 }
 
 void *factor_vm::ffi_dlsym(dll *dll, symbol_char *symbol)
 {
-       return (void *)GetProcAddress(dll ? (HMODULE)dll->dll : hFactorDll, symbol);
+       return (void *)GetProcAddress(dll ? (HMODULE)dll->handle : hFactorDll, symbol);
 }
 
 void factor_vm::ffi_dlclose(dll *dll)
 {
-       FreeLibrary((HMODULE)dll->dll);
-       dll->dll = NULL;
+       FreeLibrary((HMODULE)dll->handle);
+       dll->handle = NULL;
 }
 
-bool factor_vm::windows_stat(vm_char *path)
+BOOL factor_vm::windows_stat(vm_char *path)
 {
        BY_HANDLE_FILE_INFORMATION bhfi;
        HANDLE h = CreateFileW(path,
@@ -50,15 +50,14 @@ bool factor_vm::windows_stat(vm_char *path)
                FindClose(h);
                return true;
        }
-       bool ret;
-       ret = GetFileInformationByHandle(h, &bhfi);
+       BOOL ret = GetFileInformationByHandle(h, &bhfi);
        CloseHandle(h);
        return ret;
 }
 
 void factor_vm::windows_image_path(vm_char *full_path, vm_char *temp_path, unsigned int length)
 {
-       snwprintf(temp_path, length-1, L"%s.image", full_path); 
+       SNWPRINTF(temp_path, length-1, L"%s.image", full_path); 
        temp_path[length - 1] = 0;
 }
 
@@ -75,7 +74,7 @@ const vm_char *factor_vm::default_image_path()
        if((ptr = wcsrchr(full_path, '.')))
                *ptr = 0;
 
-       snwprintf(temp_path, MAX_UNICODE_PATH-1, L"%s.image", full_path); 
+       SNWPRINTF(temp_path, MAX_UNICODE_PATH-1, L"%s.image", full_path); 
        temp_path[MAX_UNICODE_PATH - 1] = 0;
 
        return safe_strdup(temp_path);
@@ -90,25 +89,22 @@ const vm_char *factor_vm::vm_executable_path()
        return safe_strdup(full_path);
 }
 
-inline void factor_vm::primitive_existsp()
+void factor_vm::primitive_existsp()
 {
-       vm_char *path = untag_check<byte_array>(dpop())->data<vm_char>();
-       box_boolean(windows_stat(path));
+       vm_char *path = untag_check<byte_array>(ctx->pop())->data<vm_char>();
+       ctx->push(tag_boolean(windows_stat(path)));
 }
 
-PRIMITIVE_FORWARD(existsp)
-
-segment::segment(factor_vm *myvm_, cell size_)
+segment::segment(cell size_, bool executable_p)
 {
-       myvm = myvm_;
        size = size_;
 
        char *mem;
        DWORD ignore;
 
        if((mem = (char *)VirtualAlloc(NULL, getpagesize() * 2 + size,
-               MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == 0)
-               myvm->out_of_memory();
+               MEM_COMMIT, executable_p ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE)) == 0)
+               out_of_memory();
 
        if (!VirtualProtect(mem, getpagesize(), PAGE_NOACCESS, &ignore))
                fatal_error("Cannot allocate low guard page", (cell)mem);
@@ -126,10 +122,10 @@ segment::~segment()
        SYSTEM_INFO si;
        GetSystemInfo(&si);
        if(!VirtualFree((void*)(start - si.dwPageSize), 0, MEM_RELEASE))
-               myvm->fatal_error("Segment deallocation failed",0);
+               fatal_error("Segment deallocation failed",0);
 }
 
-long factor_vm::getpagesize()
+long getpagesize()
 {
        static long g_pagesize = 0;
        if (! g_pagesize)
@@ -141,9 +137,4 @@ long factor_vm::getpagesize()
        return g_pagesize;
 }
 
-void factor_vm::sleep_micros(u64 usec)
-{
-       Sleep((DWORD)(usec / 1000));
-}
-
 }