X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Fenvvars.pas;h=55d58702b4487b0cf2d85de10921d0b42b877dab;hb=b5698c71200b362d162a9afb6bf467d877dc6b09;hp=941b8e0b78d548ef5b90cc1f71341e6c001f4853;hpb=1bddfaf7b6421f1659a6f211dfdb1dfaef5d5173;p=d2df-sdl.git diff --git a/src/shared/envvars.pas b/src/shared/envvars.pas index 941b8e0..55d5870 100644 --- a/src/shared/envvars.pas +++ b/src/shared/envvars.pas @@ -19,14 +19,21 @@ unit envvars; interface -uses SysUtils, CTypes; + uses SysUtils, CTypes; -function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean; + function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean; + function GetUserName: String; implementation + uses +{$IFDEF WINDOWS} + Windows, +{$ENDIF} + utils; + + {$IFDEF WINDOWS} -uses Windows; function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; begin if (SetEnvironmentVariable(VarStr, VarVal)) then @@ -35,10 +42,17 @@ begin Result := -1; end; {$ELSE} -{$LINKLIB c} -const clib = 'c'; -function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; -cdecl; external clib name 'setenv'; + {$IFDEF GO32V2} + function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; + begin + {$WARNING setenv stub!} + result := 0 + end; + {$ELSE} + {$LINKLIB c} + const clib = 'c'; + function setenv(const VarStr: PChar; const VarVal: PChar; Repl: cint): cint; cdecl; external clib name 'setenv'; + {$ENDIF} {$ENDIF} function SetEnvVar(const VarName: AnsiString; const VarVal: AnsiString): Boolean; @@ -46,4 +60,25 @@ begin Result := (setenv(PChar(VarName), PChar(VarVal), 1) = 0); end; + (* Get system username already in cp1251 *) + function GetUserName: AnsiString; + var i: Integer; + begin + {$IF DEFINED(WINDOWS)} + Result := utf2win(UTF8String(SysUtils.GetEnvironmentVariable(WideString('USERNAME')))); + {$ELSEIF DEFINED(UNIX)} + Result := utf2win(SysUtils.GetEnvironmentVariable('USER')); + {$ELSE} + 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.