Skip to content

Instantly share code, notes, and snippets.

@simonbyrne
Created May 10, 2015 08:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simonbyrne/3dc6e870f7b9b9aeedae to your computer and use it in GitHub Desktop.
Save simonbyrne/3dc6e870f7b9b9aeedae to your computer and use it in GitHub Desktop.
Test windows ENV interfaces
function winenvs(var)
# Win: ansi
len = ccall(:GetEnvironmentVariableA,stdcall,Uint32,(Ptr{Uint8},Ptr{Uint8},Uint32),var,C_NULL,0)
if len > 0
val=zeros(Uint8,len)
ccall(:GetEnvironmentVariableA,stdcall,Uint32,(Ptr{Uint8},Ptr{Uint8},Uint32),var,val,len)
win_a = bytestring(val)
else
win_a = ""
end
println("Win ANSI: ",win_a)
# Win: unicode
len = ccall(:GetEnvironmentVariableW,stdcall,Uint32,(Ptr{Uint16},Ptr{Uint8},Uint32),utf16(var),C_NULL,0)
if len > 0
val=zeros(Uint16,len)
ccall(:GetEnvironmentVariableW,stdcall,Uint32,(Ptr{Uint16},Ptr{Uint16},Uint32),utf16(var),val,len)
win_u = utf8(UTF16String(val))
else
win_u = ""
end
println("Win UTF16: ",win_u)
# POSIX
posix_p = ccall(:getenv,Ptr{Uint8},(Ptr{Uint8},),var)
if posix_p != C_NULL
posix = bytestring(posix_p)
else
posix = ""
end
println("POSIX: ",posix)
posix_up = ccall(:_wgetenv,Ptr{Uint16},(Ptr{Uint16},),utf16(var))
if posix_up != C_NULL
posix_u = utf8(UTF16String(pointer_to_array(posix_up,
ccall(:wcslen,Csize_t,(Ptr{Uint16},),posix_up)+1)))
else
posix_u = ""
end
println("POSIX UTF16: ",posix_u)
return nothing
end
#using RCall
println("None")
winenvs("FOO")
println()
println("Set Win ANSI")
ccall(:SetEnvironmentVariableA,stdcall,Uint32,(Ptr{Uint8},Ptr{Uint8}),"FOO","aaaa")
winenvs("FOO")
#rprint("Sys.getenv('foo')")
println()
println("Set Win UTF16")
ccall(:SetEnvironmentVariableW,stdcall,Uint32,(Ptr{Uint16},Ptr{Uint16}),utf16("FOO"),utf16("bbbb"))
winenvs("FOO")
#rprint("Sys.getenv('foo')")
println()
println("_putenv")
ccall(:_putenv,Cint,(Ptr{Uint8},),"FOO=cccc")
winenvs("FOO")
#rprint("Sys.getenv('foo')")
println()
println("_wputenv")
ccall(:_wputenv,Cint,(Ptr{Uint16},),utf16("FOO=dddd"))
winenvs("FOO")
#rprint("Sys.getenv('foo')")
println()
@simonbyrne
Copy link
Author

Results:

None
Win ANSI:
Win UTF16:
POSIX:
POSIX UTF16:

Set Win ANSI
Win ANSI: aaaa?
Win UTF16: aaaa
POSIX:
POSIX UTF16:

Set Win UTF16
Win ANSI: bbbb?
Win UTF16: bbbb
POSIX:
POSIX UTF16:

_putenv
Win ANSI: cccc?
Win UTF16: cccc
POSIX: cccc
POSIX UTF16: cccc

_wputenv
Win ANSI: dddd?
Win UTF16: dddd
POSIX: dddd
POSIX UTF16: dddd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment