[vlc-devel] [PATCH] NSIS: Remove old files before new install

Marvin Scholz epirat07 at gmail.com
Sun Dec 10 19:34:57 CET 2017


Fix #19253
---
 extras/package/win32/NSIS/helpers/utils.nsh | 47 +++++++++++++++++++++++++++++
 extras/package/win32/NSIS/vlc.win32.nsi.in  | 20 ++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/extras/package/win32/NSIS/helpers/utils.nsh b/extras/package/win32/NSIS/helpers/utils.nsh
index 899bd8d21d..8b4d5e3ba3 100644
--- a/extras/package/win32/NSIS/helpers/utils.nsh
+++ b/extras/package/win32/NSIS/helpers/utils.nsh
@@ -214,6 +214,27 @@ Function un.TrimNewlines
    Exch $R0
 FunctionEnd
 
+Function TrimNewlines
+ Exch $R0
+ Push $R1
+ Push $R2
+ StrCpy $R1 0
+
+ loop:
+   IntOp $R1 $R1 - 1
+   StrCpy $R2 $R0 1 $R1
+   StrCmp $R2 "$\r" loop
+   StrCmp $R2 "$\n" loop
+   IntOp $R1 $R1 + 1
+   IntCmp $R1 0 no_trim_needed
+   StrCpy $R0 $R0 $R1
+
+ no_trim_needed:
+   Pop $R2
+   Pop $R1
+   Exch $R0
+FunctionEnd
+
 Function un.RemoveEmptyDirs
   Pop $9
   !define Index 'Line${__LINE__}'
@@ -240,6 +261,32 @@ Function un.RemoveEmptyDirs
   !undef Index
 FunctionEnd
 
+Function RemoveEmptyDirs
+  Pop $9
+  !define Index 'Line${__LINE__}'
+  FindFirst $0 $1 "$INSTDIR$9*"
+  StrCmp $0 "" "${Index}-End"
+  "${Index}-Loop:"
+    StrCmp $1 "" "${Index}-End"
+    StrCmp $1 "." "${Index}-Next"
+    StrCmp $1 ".." "${Index}-Next"
+    Push $0
+    Push $1
+    Push $9
+    Push "$9$1\"
+    Call RemoveEmptyDirs
+    Pop $9
+    Pop $1
+    Pop $0
+    RMDir "$INSTDIR$9$1"
+    "${Index}-Next:"
+    FindNext $0 $1
+    Goto "${Index}-Loop"
+  "${Index}-End:"
+  FindClose $0
+  !undef Index
+FunctionEnd
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Check if VLC is running and kill it if necessary ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/extras/package/win32/NSIS/vlc.win32.nsi.in b/extras/package/win32/NSIS/vlc.win32.nsi.in
index 2608644950..de27e38f55 100644
--- a/extras/package/win32/NSIS/vlc.win32.nsi.in
+++ b/extras/package/win32/NSIS/vlc.win32.nsi.in
@@ -238,6 +238,26 @@ ${MementoSection} "$(Name_Section01)" SEC01
   DetailPrint "$(Detail_CheckProcesses)"
   Call CheckRunningProcesses
 
+  ; Remove previous version first, if this is update
+  ${If} $ReinstallType == "1"
+    FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
+    UninstallLoop:
+      ClearErrors
+      FileRead $UninstallLog $R0
+      IfErrors UninstallEnd
+      Push $R0
+      Call TrimNewLines
+      Pop $R0
+      Delete "$INSTDIR\$R0"
+      Goto UninstallLoop
+    UninstallEnd:
+    FileClose $UninstallLog
+    Delete "$INSTDIR\uninstall.log"
+    Delete "$INSTDIR\uninstall.exe"
+    Push "\"
+    Call RemoveEmptyDirs
+  ${EndIf}
+
   !insertmacro OpenUninstallLog
 
   ; VLC.exe, libvlc.dll
-- 
2.14.3 (Apple Git-98)



More information about the vlc-devel mailing list