Skip to content

Commit c77d577

Browse files
committed
vbzip: Support -mem option for encryption method/strength
1 parent 057ba21 commit c77d577

File tree

1 file changed

+52
-26
lines changed

1 file changed

+52
-26
lines changed

test/vbzip/cVbZip.cls

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ DefObj A-Z
2121
Private Const ERR_MISSING_ARCHIVE As String = "Missing archive"
2222
Private Const ERR_NO_FILES As String = "No files specified"
2323
Private Const ERR_INVALID_LEVEL As String = "Invalid compression level. Use 0 to 9"
24+
Private Const ERR_INVALID_STRENGTH As String = "Invalid encryption method/strength. Use 0 to 3"
2425
Private Const STR_LIST_HDR As String = "Date Time Attr Size Compressed Name"
2526
Private Const STR_LIST_SEP As String = "------------------- ----- ---------- ---------- -------------------"
2627

@@ -56,7 +57,6 @@ Public Function Init(vArgs As Variant) As Boolean
5657
Dim lTotalSize As Long
5758
Dim lTotalCompressed As Long
5859
Dim lCount As Long
59-
Dim lLevel As Long
6060

6161
On Error GoTo EH
6262
Set m_oArchive = New cZipArchive
@@ -78,16 +78,13 @@ Public Function Init(vArgs As Variant) As Boolean
7878
ConsolePrint ERR_NO_FILES & vbCrLf
7979
GoTo QH
8080
End If
81-
If IsEmpty(.Item("-m")) Then
82-
lLevel = 6
83-
ElseIf .Item("-m") = "0" Then
84-
lLevel = 0
85-
Else
86-
lLevel = Val(.Item("-m"))
87-
If lLevel < 1 Or lLevel > 9 Then
88-
ConsolePrint ERR_INVALID_LEVEL & vbCrLf
89-
GoTo QH
90-
End If
81+
If Not pvLimitNumericOption("-m", 6, 0, 9) Then
82+
ConsolePrint ERR_INVALID_LEVEL & vbCrLf
83+
GoTo QH
84+
End If
85+
If Not pvLimitNumericOption("-mem", 0, 0, 4) Then
86+
ConsolePrint ERR_INVALID_STRENGTH & vbCrLf
87+
GoTo QH
9188
End If
9289
For lIdx = 1 To .Item("numfiles")
9390
sFile = .Item("file" & lIdx)
@@ -98,20 +95,20 @@ Public Function Init(vArgs As Variant) As Boolean
9895
.Item("-e") = True
9996
End If
10097
m_oArchive.AddFromFolder sFile, Recursive:=.Item("-r"), _
101-
IncludeEmptyFolders:=.Item("-e"), Password:=.Item("-p")
98+
IncludeEmptyFolders:=.Item("-e"), Password:=.Item("-p"), EncrStrength:=.Item("-mem")
10299
ElseIf (FileAttr(sFile) And vbDirectory) <> 0 Then
103100
If .Item("-r") Then
104101
sMask = Mid$(sFile, InStrRev(sFile, "\") + 1)
105102
.Item("-e") = True
106103
End If
107-
m_oArchive.AddFromFolder PathCombine(sFile, "*.*"), Recursive:=.Item("-r"), _
108-
IncludeEmptyFolders:=.Item("-e"), TargetFolder:=sMask, Password:=.Item("-p")
104+
m_oArchive.AddFromFolder PathCombine(sFile, "*.*"), Recursive:=.Item("-r"), TargetFolder:=sMask, _
105+
IncludeEmptyFolders:=.Item("-e"), Password:=.Item("-p"), EncrStrength:=.Item("-mem")
109106
Else
110-
m_oArchive.AddFile sFile, Password:=.Item("-p")
107+
m_oArchive.AddFile sFile, Password:=.Item("-p"), EncrStrength:=.Item("-mem")
111108
End If
112109
Next
113110
m_sAction = "Compressing "
114-
If Not m_oArchive.CompressArchive(.Item("zip"), Level:=lLevel) Then
111+
If Not m_oArchive.CompressArchive(.Item("zip"), Level:=.Item("-m")) Then
115112
GoTo QH
116113
End If
117114
Case "l"
@@ -216,6 +213,25 @@ EH:
216213
ConsolePrint "unhandled error: " & Err.Description & vbCrLf
217214
End Function
218215

216+
Private Function pvLimitNumericOption(sOpt As String, dblDefault As Double, dblMin As Double, dblMax As Double) As Boolean
217+
Dim dblTemp As Double
218+
219+
With m_oOpt
220+
If IsEmpty(.Item(sOpt)) Then
221+
.Item(sOpt) = dblDefault
222+
ElseIf .Item(sOpt) = "0" Then
223+
.Item(sOpt) = 0#
224+
Else
225+
dblTemp = Val(.Item(sOpt))
226+
If dblTemp = 0 Or dblTemp < dblMin Or dblTemp > dblMax Then
227+
GoTo QH
228+
End If
229+
End If
230+
End With
231+
pvLimitNumericOption = True
232+
QH:
233+
End Function
234+
219235
Private Function FormatAttr(ByVal eAttr As VbFileAttribute, ByVal lFlags As Long) As String
220236
If eAttr = vbDirectory Then
221237
FormatAttr = "[DIR]"
@@ -241,20 +257,30 @@ Private Function ParseOpt(vArgs As Variant) As Object
241257
For lIdx = 0 To UBound(vArgs)
242258
Select Case Left$(vArgs(lIdx), 1 + bNoMoreOpt)
243259
Case "-", "/"
244-
Select Case Mid$(vArgs(lIdx), 2, 1)
245-
Case "o", "m", "p"
246-
If Len(vArgs(lIdx)) > 2 Then
247-
.Item("-" & Mid$(vArgs(lIdx), 2, 1)) = Mid$(vArgs(lIdx), 3)
260+
Select Case Mid$(vArgs(lIdx), 2, 3)
261+
Case "mem"
262+
If Len(vArgs(lIdx)) > 4 Then
263+
.Item("-" & Mid$(vArgs(lIdx), 2, 3)) = Mid$(vArgs(lIdx), 5)
248264
ElseIf LenB(vArgs(lIdx + 1)) <> 0 Then
249-
.Item("-" & Mid$(vArgs(lIdx), 2, 1)) = vArgs(lIdx + 1)
265+
.Item("-" & Mid$(vArgs(lIdx), 2, 3)) = vArgs(lIdx + 1)
250266
lIdx = lIdx + 1
251267
End If
252-
Case "-"
253-
If Len(vArgs(lIdx)) = 2 Then
254-
bNoMoreOpt = True
255-
End If
256268
Case Else
257-
.Item("-" & Mid$(vArgs(lIdx), 2)) = True
269+
Select Case Mid$(vArgs(lIdx), 2, 1)
270+
Case "o", "m", "p"
271+
If Len(vArgs(lIdx)) > 2 Then
272+
.Item("-" & Mid$(vArgs(lIdx), 2, 1)) = Mid$(vArgs(lIdx), 3)
273+
ElseIf LenB(vArgs(lIdx + 1)) <> 0 Then
274+
.Item("-" & Mid$(vArgs(lIdx), 2, 1)) = vArgs(lIdx + 1)
275+
lIdx = lIdx + 1
276+
End If
277+
Case "-"
278+
If Len(vArgs(lIdx)) = 2 Then
279+
bNoMoreOpt = True
280+
End If
281+
Case Else
282+
.Item("-" & Mid$(vArgs(lIdx), 2)) = True
283+
End Select
258284
End Select
259285
Case Else
260286
If LenB(.Item("command")) = 0 Then

0 commit comments

Comments
 (0)