2
0
Эх сурвалжийг харах

ADD: Lua - show error when script file not found
ADD: Lua - setenv/unsetenv functions (patch by NorbertJh)

Alexander Koblov 3 жил өмнө
parent
commit
87a7647472

+ 15 - 0
components/doublecmd/dcosutils.pas

@@ -237,6 +237,7 @@ function mbGetEnvironmentString(Index : Integer) : String;
 function mbExpandEnvironmentStrings(const FileName: String): String;
 function mbExpandEnvironmentStrings(const FileName: String): String;
 function mbGetEnvironmentVariable(const sName: String): String;
 function mbGetEnvironmentVariable(const sName: String): String;
 function mbSetEnvironmentVariable(const sName, sValue: String): Boolean;
 function mbSetEnvironmentVariable(const sName, sValue: String): Boolean;
+function mbUnsetEnvironmentVariable(const sName: String): Boolean;
 function mbSysErrorMessage: String; overload; inline;
 function mbSysErrorMessage: String; overload; inline;
 function mbSysErrorMessage(ErrorCode: Integer): String; overload;
 function mbSysErrorMessage(ErrorCode: Integer): String; overload;
 {en
 {en
@@ -1637,6 +1638,20 @@ begin
 end;
 end;
 {$ENDIF}
 {$ENDIF}
 
 
+function mbUnsetEnvironmentVariable(const sName: String): Boolean;
+{$IFDEF MSWINDOWS}
+var
+  wsName: UnicodeString;
+begin
+  wsName:= CeUtf8ToUtf16(sName);
+  Result:= SetEnvironmentVariableW(PWideChar(wsName), NIL);
+end;
+{$ELSE}
+begin
+  Result:= (unsetenv(PAnsiChar(CeUtf8ToSys(sName))) = 0);
+end;
+{$ENDIF}
+
 function mbSysErrorMessage: String;
 function mbSysErrorMessage: String;
 begin
 begin
   Result := mbSysErrorMessage(GetLastOSError);
   Result := mbSysErrorMessage(GetLastOSError);

+ 6 - 0
components/doublecmd/dcunix.pas

@@ -145,6 +145,12 @@ function getenv(name: PAnsiChar): PAnsiChar; cdecl; external clib;
             insufficient space in the environment)
             insufficient space in the environment)
 }
 }
 function setenv(const name, value: PAnsiChar; overwrite: cint): cint; cdecl; external clib;
 function setenv(const name, value: PAnsiChar; overwrite: cint): cint; cdecl; external clib;
+{en
+   Remove an environment variable
+   @param(name Environment variable name)
+   @returns(The function returns zero on success, or -1 on error)
+}
+function unsetenv(const name: PAnsiChar): cint; cdecl; external clib;
 {en
 {en
    Get password file entry
    Get password file entry
    @param(uid User ID)
    @param(uid User ID)

+ 24 - 0
src/uluastd.pas

@@ -91,6 +91,28 @@ begin
   end;
   end;
 end;
 end;
 
 
+function luaSetEnvironmentVariable(L : Plua_State) : Integer; cdecl;
+begin
+  Result:= 1;
+  if (mbSetEnvironmentVariable(luaL_checkstring(L, 1),luaL_checkstring(L, 2))) then begin
+    lua_pushinteger(L, 0);
+  end
+  else begin
+    lua_pushinteger(L, -1);
+  end;
+end;
+
+function luaUnsetEnvironmentVariable(L : Plua_State) : Integer; cdecl;
+begin
+  Result:= 1;
+  if (mbUnsetEnvironmentVariable(luaL_checkstring(L, 1))) then begin
+    lua_pushinteger(L, 0);
+  end
+  else begin
+    lua_pushinteger(L, -1);
+  end;
+end;
+
 function luaExecute(L: Plua_State): Integer; cdecl;
 function luaExecute(L: Plua_State): Integer; cdecl;
 begin
 begin
   Result:= 1;
   Result:= 1;
@@ -786,6 +808,8 @@ begin
     luaP_register(L, 'tmpname', @luaTempName);
     luaP_register(L, 'tmpname', @luaTempName);
     luaP_register(L, 'rename', @luaRenameFile);
     luaP_register(L, 'rename', @luaRenameFile);
     luaP_register(L, 'getenv', @luaGetEnvironmentVariable);
     luaP_register(L, 'getenv', @luaGetEnvironmentVariable);
+    luaP_register(L, 'setenv', @luaSetEnvironmentVariable);
+    luaP_register(L, 'unsetenv', @luaUnsetEnvironmentVariable);
   lua_pop(L, 1);
   lua_pop(L, 1);
 
 
   io_noclose_:= @io_noclose;
   io_noclose_:= @io_noclose;

+ 5 - 1
src/umaincommands.pas

@@ -5105,7 +5105,11 @@ begin
   begin
   begin
     // Get script file name
     // Get script file name
     FileName:= PrepareParameter(Params[0]);
     FileName:= PrepareParameter(Params[0]);
-    if not mbFileExists(FileName) then Exit;
+    if not mbFileExists(FileName) then
+    begin
+      msgError(Format(rsMsgFileNotFound, [Filename]));
+      Exit;
+    end;
 
 
     // Get script arguments
     // Get script arguments
     Count:= Length(Params) - 1;
     Count:= Length(Params) - 1;