diff --git a/src/shared/envvars.pas b/src/shared/envvars.pas
index 3774eab2fe277edbd168c160de436c954d3c5007..32d3273c3714dc7c7d0b2d9c52c4726e03f8d3e8 100644 (file)
--- a/src/shared/envvars.pas
+++ b/src/shared/envvars.pas
implementation
+ uses
{$IFDEF WINDOWS}
-uses Windows;
+ Windows,
+{$ENDIF}
+ utils;
+
+
+{$IF DEFINED(WINDOWS)}
function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
begin
if (SetEnvironmentVariable(VarStr, VarVal)) then
else
Result := -1;
end;
+{$ELSEIF DEFINED(GO32V2)}
+ {$LINKLIB c}
+ function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external;
{$ELSE}
-{$LINKLIB c}
-const clib = 'c';
-function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint;
-cdecl; external clib name 'setenv';
+ {$LINKLIB c}
+ function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external 'c' name 'setenv';
{$ENDIF}
function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean;
Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0);
end;
- function GetUserName: String;
+ (* Get system username already in cp1251 *)
+ function GetUserName: AnsiString;
+ var i: Integer;
begin
{$IF DEFINED(WINDOWS)}
- Result := SysUtils.GetEnvironmentVariable('USERNAME')
+ Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME'))));
{$ELSEIF DEFINED(UNIX)}
- Result := SysUtils.GetEnvironmentVariable('USER')
+ Result := utf2win(SysUtils.GetEnvironmentVariable('USER'));
{$ELSE}
- Result := ''
+ Result := '';
{$ENDIF}
+ (* invalidate username with non-cp1251 symbols *)
+ i := Low(Result);
+ while i <= High(Result) do
+ begin
+ if Result[i] = '?' then
+ Result := '';
+ Inc(i)
+ end
end;
end.