Skip to content

Commit

Permalink
Extract7ZipFile: output/log memory requirements.
Browse files Browse the repository at this point in the history
  • Loading branch information
martijnlaan committed Nov 14, 2024
1 parent 63aaaa8 commit d78d5dd
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 1 deletion.
25 changes: 25 additions & 0 deletions Components/Lzma2/Util/7z/7zMain.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
-Change main to mainW to support Unicode archive names
-Add specific error text for SZ_ERROR_ARCHIVE and SZ_ERROR_NO_ARCHIVE
-Return res on errors instead of always returning 1
-Add optional output of SzArEx_Extract's output buffer sizes
Otherwise unchanged */

#include "Precomp.h"
Expand Down Expand Up @@ -531,6 +532,19 @@ static void PrintError_WRes(const char *message, WRes wres)
PrintLF();
}

#ifdef REPORT_OUTBUFFERSIZE
static void PrintInt(const char *message, UInt64 value)
{
Print(message);
{
char s[32];
UInt64ToStr(value, s, 1);
Print(s);
}
PrintLF();
}
#endif

static void GetAttribString(UInt32 wa, BoolInt isDir, char *s)
{
#ifdef USE_WINDOWS_FILE
Expand Down Expand Up @@ -655,6 +669,9 @@ int Z7_CDECL mainW(int numargs, WCHAR *args[])
UInt32 blockIndex = 0xFFFFFFFF; /* it can have any value before first call (if outBuffer = 0) */
Byte *outBuffer = 0; /* it must be 0 before first call for each new archive. */
size_t outBufferSize = 0; /* it can have any value before first call (if outBuffer = 0) */
#ifdef REPORT_OUTBUFFERSIZE
size_t prevOutBufferSize = -1; /* it must be -1 before first call for each new archive. */
#endif

for (i = 0; i < db.NumFiles; i++)
{
Expand Down Expand Up @@ -741,6 +758,14 @@ int Z7_CDECL mainW(int numargs, WCHAR *args[])
&allocImp, &allocTempImp);
if (res != SZ_OK)
break;
#ifdef REPORT_OUTBUFFERSIZE
if (prevOutBufferSize == -1 || outBufferSize != prevOutBufferSize)
{
PrintLF();
PrintInt("Used new buffer size ", outBufferSize);
prevOutBufferSize = outBufferSize;
}
#endif
}

if (!testCommand)
Expand Down
2 changes: 1 addition & 1 deletion ISHelp/isxfunc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1845,7 +1845,7 @@ end;</pre>
<prototype>function Extract7ZipFile(const FileName, DestDir: String; const FullPaths: Boolean): Integer;</prototype>
<description><p>Extracts the specified 7-Zip archive to the specified directory, with or without using path names. Returns zero if successful, nonzero otherwise</p>
<p>The archive must not be encrypted.</p></description>
<remarks><p>Uses an embedded version of the &quot;7z ANSI-C Decoder&quot; from the LZMA SDK by Igor Pavlov, as-is, except that Unicode support was improved.</p>
<remarks><p>Uses an embedded version of the &quot;7z ANSI-C Decoder&quot; from the LZMA SDK by Igor Pavlov, as-is, except that Unicode support and error messages were improved and that it outputs memory requirements.</p>
<p>All output of the decoder is logged if logging is enabled, including error messages but excluding empty lines.</p>
<p>The decoder has the following limitations, as written by Igor Pavlov in the LZMA SDK:<br /><br />
-It reads only &quot;FileName&quot;, &quot;Size&quot;, &quot;LastWriteTime&quot; and &quot;CRC&quot; information for each file in archive.<br />
Expand Down
2 changes: 2 additions & 0 deletions Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ int _fputs(char const* str, FILE* stream);
/* Include all needed SDK code. None of these require changes for the helper function to
work but 7zMain.c was changed for better Unicode support */

#define REPORT_OUTBUFFERSIZE

#include "../../../../Components/Lzma2/Util/7z/7zMain.c"

#ifndef USE_WINDOWS_FILE
Expand Down
Binary file modified Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.obj
Binary file not shown.

0 comments on commit d78d5dd

Please sign in to comment.