]> gitweb.factorcode.org Git - factor.git/commitdiff
fix winnt environment variables
authorDoug Coleman <doug.coleman@gmail.com>
Sun, 19 Oct 2008 04:03:22 +0000 (23:03 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 19 Oct 2008 04:03:22 +0000 (23:03 -0500)
basis/environment/winnt/winnt.factor
basis/windows/errors/errors.factor
basis/windows/kernel32/kernel32.factor
basis/windows/types/types.factor

index e73db5c2929653f40ceb3095f12712bd091d040f..33cf6a698be58e869c3dc14fc167d39fabd144cb 100644 (file)
@@ -1,15 +1,17 @@
 ! Copyright (C) 2008 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: alien.strings fry io.encodings.utf16 kernel
-splitting windows windows.kernel32 ;
+splitting windows windows.kernel32 system environment
+alien.c-types sequences windows.errors io.streams.memory
+io.encodings io ;
 IN: environment.winnt
 
 M: winnt os-env ( key -- value )
     MAX_UNICODE_PATH "TCHAR" <c-array>
-    [ GetEnvironmentVariable ] keep over 0 = [
+    [ dup length GetEnvironmentVariable ] keep over 0 = [
         2drop f
     ] [
-        nip utf16 alien>string
+        nip utf16n alien>string
     ] if ;
 
 M: winnt set-os-env ( value key -- )
@@ -22,4 +24,10 @@ M: winnt unset-os-env ( key -- )
     ] when ;
 
 M: winnt (os-envs) ( -- seq )
-    GetEnvironmentStrings [ "\0" split ] [ FreeEnvironmentStrings ] bi ;
+    GetEnvironmentStrings [
+        <memory-stream> [
+            utf16n decode-input
+            [ "\0" read-until drop dup empty? not ]
+            [ ] [ drop ] produce
+        ] with-input-stream*
+    ] [ FreeEnvironmentStrings win32-error=0/f ] bi ;
index 2e4e709d43e90e9a651ec90b146d558399bcf04e..31a7cd8c09bb358d503d24244f2eabcb9092d4c8 100644 (file)
@@ -4,6 +4,7 @@ IN: windows.errors
 : ERROR_SUCCESS 0 ; inline
 : ERROR_HANDLE_EOF 38 ; inline
 : ERROR_BROKEN_PIPE 109 ; inline
+: ERROR_ENVVAR_NOT_FOUND 203 ; inline
 : ERROR_IO_INCOMPLETE 996 ; inline
 : ERROR_IO_PENDING 997 ; inline
 
index d4c610c7b923ee7b101cbc87d60978e1baf63996..f19561cda3c8ab1bde38930047149c3cae713813 100644 (file)
@@ -838,7 +838,8 @@ ALIAS: FindNextFile FindNextFileW
 ! FUNCTION: FormatMessageW
 ! FUNCTION: FreeConsole
 ! FUNCTION: FreeEnvironmentStringsA
-! FUNCTION: FreeEnvironmentStringsW
+FUNCTION: BOOL FreeEnvironmentStringsW ( LPTCH lpszEnvironmentBlock ) ;
+ALIAS: FreeEnvironmentStrings FreeEnvironmentStringsW
 ! FUNCTION: FreeLibrary
 ! FUNCTION: FreeLibraryAndExitThread
 ! FUNCTION: FreeResource
@@ -933,11 +934,12 @@ FUNCTION: HANDLE GetCurrentThread ( ) ;
 ! FUNCTION: GetDllDirectoryW
 ! FUNCTION: GetDriveTypeA
 ! FUNCTION: GetDriveTypeW
-FUNCTION: LPTCH GetEnvironmentStrings ( ) ;
+FUNCTION: void* GetEnvironmentStringsW ( ) ;
 ! FUNCTION: GetEnvironmentStringsA
 ALIAS: GetEnvironmentStrings GetEnvironmentStringsW
 ! FUNCTION: GetEnvironmentVariableA
-! FUNCTION: GetEnvironmentVariableW
+FUNCTION: DWORD GetEnvironmentVariableW ( LPCTSTR lpName, LPTSTR lpBuffer, DWORD nSize ) ;
+ALIAS: GetEnvironmentVariable GetEnvironmentVariableW
 FUNCTION: BOOL GetExitCodeProcess ( HANDLE hProcess, LPDWORD lpExitCode ) ;
 ! FUNCTION: GetExitCodeThread
 ! FUNCTION: GetExpandedNameA
@@ -1418,7 +1420,8 @@ ALIAS: SetCurrentDirectory SetCurrentDirectoryW
 ! FUNCTION: SetDllDirectoryW
 FUNCTION: BOOL SetEndOfFile ( HANDLE hFile ) ;
 ! FUNCTION: SetEnvironmentVariableA
-! FUNCTION: SetEnvironmentVariableW
+FUNCTION: BOOL SetEnvironmentVariableW ( LPCTSTR key, LPCTSTR value ) ;
+ALIAS: SetEnvironmentVariable SetEnvironmentVariableW
 ! FUNCTION: SetErrorMode
 ! FUNCTION: SetEvent
 ! FUNCTION: SetFileApisToANSI
index 56d617e8359189efd2c0951088d8d9a82b87167e..b1d8914be9ebb99d8d18d2d646f56141c0c9c4ef 100644 (file)
@@ -64,13 +64,12 @@ TYPEDEF: ulonglong   DWORD64
 TYPEDEF: longlong    LARGE_INTEGER
 TYPEDEF: LARGE_INTEGER* PLARGE_INTEGER
 
-TYPEDEF: WCHAR       TCHAR
-TYPEDEF: TCHAR*      LPTCH
-TYPEDEF: TCHAR       TBYTE
 TYPEDEF: wchar_t*  LPCSTR
 TYPEDEF: wchar_t*  LPWSTR
-
-
+TYPEDEF: WCHAR       TCHAR
+TYPEDEF: LPWSTR      LPTCH
+TYPEDEF: LPWSTR      PTCH
+TYPEDEF: TCHAR       TBYTE
 
 TYPEDEF: WORD                ATOM
 TYPEDEF: BYTE                BOOLEAN