Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/UI/Console/Main.cpp')
-rw-r--r--CPP/7zip/UI/Console/Main.cpp164
1 files changed, 104 insertions, 60 deletions
diff --git a/CPP/7zip/UI/Console/Main.cpp b/CPP/7zip/UI/Console/Main.cpp
index 83e6ef5b..b9cb4eb9 100644
--- a/CPP/7zip/UI/Console/Main.cpp
+++ b/CPP/7zip/UI/Console/Main.cpp
@@ -2,6 +2,8 @@
#include "StdAfx.h"
+#include "../../../Common/MyWindows.h"
+
#include <Psapi.h>
#include "../../../../C/CpuArch.h"
@@ -230,42 +232,51 @@ static void PrintWarningsPaths(const CErrorPathCodes &pc, CStdOutStream &so)
}
static int WarningsCheck(HRESULT result, const CCallbackConsoleBase &callback,
- const CUpdateErrorInfo &errorInfo, CStdOutStream &so, bool showHeaders)
+ const CUpdateErrorInfo &errorInfo,
+ CStdOutStream *so,
+ CStdOutStream *se,
+ bool showHeaders)
{
int exitCode = NExitCode::kSuccess;
if (callback.ScanErrors.Paths.Size() != 0)
{
- so << endl;
- so << "Scan WARNINGS for files and folders:" << endl << endl;
- PrintWarningsPaths(callback.ScanErrors, so);
- so << "Scan WARNINGS: " << callback.ScanErrors.Paths.Size();
- so << endl;
+ if (se)
+ {
+ *se << endl;
+ *se << "Scan WARNINGS for files and folders:" << endl << endl;
+ PrintWarningsPaths(callback.ScanErrors, *se);
+ *se << "Scan WARNINGS: " << callback.ScanErrors.Paths.Size();
+ *se << endl;
+ }
exitCode = NExitCode::kWarning;
}
if (result != S_OK || errorInfo.ThereIsError())
{
- UString message;
- if (!errorInfo.Message.IsEmpty())
- {
- message.AddAscii(errorInfo.Message);
- message.Add_LF();
- }
+ if (se)
{
- FOR_VECTOR(i, errorInfo.FileNames)
+ UString message;
+ if (!errorInfo.Message.IsEmpty())
{
- message += fs2us(errorInfo.FileNames[i]);
+ message.AddAscii(errorInfo.Message);
message.Add_LF();
}
+ {
+ FOR_VECTOR(i, errorInfo.FileNames)
+ {
+ message += fs2us(errorInfo.FileNames[i]);
+ message.Add_LF();
+ }
+ }
+ if (errorInfo.SystemError != 0)
+ {
+ message += NError::MyFormatMessage(errorInfo.SystemError);
+ message.Add_LF();
+ }
+ if (!message.IsEmpty())
+ *se << L"\nError:\n" << message;
}
- if (errorInfo.SystemError != 0)
- {
- message += NError::MyFormatMessage(errorInfo.SystemError);
- message.Add_LF();
- }
- if (!message.IsEmpty())
- so << L"\nError:\n" << message;
// we will work with (result) later
// throw CSystemException(result);
@@ -277,17 +288,25 @@ static int WarningsCheck(HRESULT result, const CCallbackConsoleBase &callback,
{
if (showHeaders)
if (callback.ScanErrors.Paths.Size() == 0)
- so << kEverythingIsOk << endl;
+ if (so)
+ {
+ if (se)
+ se->Flush();
+ *so << kEverythingIsOk << endl;
+ }
}
else
{
- so << endl;
- so << "WARNINGS for files:" << endl << endl;
- PrintWarningsPaths(callback.FailedFiles, so);
- so << "WARNING: Cannot open " << numErrors << " file";
- if (numErrors > 1)
- so << 's';
- so << endl;
+ if (se)
+ {
+ *se << endl;
+ *se << "WARNINGS for files:" << endl << endl;
+ PrintWarningsPaths(callback.FailedFiles, *se);
+ *se << "WARNING: Cannot open " << numErrors << " file";
+ if (numErrors > 1)
+ *se << 's';
+ *se << endl;
+ }
exitCode = NExitCode::kWarning;
}
@@ -473,10 +492,7 @@ int Main2(
CStdOutStream *percentsStream = NULL;
if (options.Number_for_Percents != k_OutStream_disabled)
percentsStream = (options.Number_for_Percents == k_OutStream_stderr) ? &g_StdErr : &g_StdOut;;
-
- CStdOutStream &so = (g_StdStream ? *g_StdStream : g_StdOut);
-
if (options.HelpMode)
{
ShowCopyrightAndHelp(g_StdStream, true);
@@ -589,6 +605,7 @@ int Main2(
if (options.Command.CommandType == NCommandType::kInfo)
{
+ CStdOutStream &so = (g_StdStream ? *g_StdStream : g_StdOut);
unsigned i;
#ifdef EXTERNAL_CODECS
@@ -754,6 +771,7 @@ int Main2(
}
else if (options.Command.CommandType == NCommandType::kBenchmark)
{
+ CStdOutStream &so = (g_StdStream ? *g_StdStream : g_StdOut);
hresultMain = BenchCon(EXTERNAL_CODECS_VARS_L
options.Properties, options.NumIterations, (FILE *)so);
if (hresultMain == S_FALSE)
@@ -890,73 +908,91 @@ int Main2(
hresultMain = E_FAIL;
}
- so << endl;
+ CStdOutStream *so = g_StdStream;
+
+ bool isError = false;
- if (ecs->NumTryArcs > 1)
+ if (so)
{
- so << "Archives: " << ecs->NumTryArcs << endl;
- so << "OK archives: " << ecs->NumOkArcs << endl;
+ *so << endl;
+
+ if (ecs->NumTryArcs > 1)
+ {
+ *so << "Archives: " << ecs->NumTryArcs << endl;
+ *so << "OK archives: " << ecs->NumOkArcs << endl;
+ }
}
- bool isError = false;
+
if (ecs->NumCantOpenArcs != 0)
{
isError = true;
- so << "Can't open as archive: " << ecs->NumCantOpenArcs << endl;
+ if (so)
+ *so << "Can't open as archive: " << ecs->NumCantOpenArcs << endl;
}
+
if (ecs->NumArcsWithError != 0)
{
isError = true;
- so << "Archives with Errors: " << ecs->NumArcsWithError << endl;
+ if (so)
+ *so << "Archives with Errors: " << ecs->NumArcsWithError << endl;
}
- if (ecs->NumArcsWithWarnings != 0)
- so << "Archives with Warnings: " << ecs->NumArcsWithWarnings << endl;
- if (ecs->NumOpenArcWarnings != 0)
+ if (so)
{
- so << endl;
+ if (ecs->NumArcsWithWarnings != 0)
+ *so << "Archives with Warnings: " << ecs->NumArcsWithWarnings << endl;
+
if (ecs->NumOpenArcWarnings != 0)
- so << "Warnings: " << ecs->NumOpenArcWarnings << endl;
+ {
+ *so << endl;
+ if (ecs->NumOpenArcWarnings != 0)
+ *so << "Warnings: " << ecs->NumOpenArcWarnings << endl;
+ }
}
if (ecs->NumOpenArcErrors != 0)
{
isError = true;
- so << endl;
- if (ecs->NumOpenArcErrors != 0)
- so << "Open Errors: " << ecs->NumOpenArcErrors << endl;
+ if (so)
+ {
+ *so << endl;
+ if (ecs->NumOpenArcErrors != 0)
+ *so << "Open Errors: " << ecs->NumOpenArcErrors << endl;
+ }
}
if (isError)
retCode = NExitCode::kFatalError;
+ if (so)
if (ecs->NumArcsWithError != 0 || ecs->NumFileErrors != 0)
{
// if (ecs->NumArchives > 1)
{
- so << endl;
+ *so << endl;
if (ecs->NumFileErrors != 0)
- so << "Sub items Errors: " << ecs->NumFileErrors << endl;
+ *so << "Sub items Errors: " << ecs->NumFileErrors << endl;
}
}
else if (hresultMain == S_OK)
{
if (stat.NumFolders != 0)
- so << "Folders: " << stat.NumFolders << endl;
+ *so << "Folders: " << stat.NumFolders << endl;
if (stat.NumFiles != 1 || stat.NumFolders != 0 || stat.NumAltStreams != 0)
- so << "Files: " << stat.NumFiles << endl;
+ *so << "Files: " << stat.NumFiles << endl;
if (stat.NumAltStreams != 0)
{
- so << "Alternate Streams: " << stat.NumAltStreams << endl;
- so << "Alternate Streams Size: " << stat.AltStreams_UnpackSize << endl;
+ *so << "Alternate Streams: " << stat.NumAltStreams << endl;
+ *so << "Alternate Streams Size: " << stat.AltStreams_UnpackSize << endl;
}
- so
+ *so
<< "Size: " << stat.UnpackSize << endl
<< "Compressed: " << stat.PackSize << endl;
if (hashCalc)
{
- so << endl;
- PrintHashStat(so, hb);
+ *so << endl;
+ PrintHashStat(*so, hb);
}
}
}
@@ -1047,9 +1083,14 @@ int Main2(
callback.ClosePercents2();
- retCode = WarningsCheck(hresultMain, callback, errorInfo, so,
- // options.EnableHeaders
- true);
+ CStdOutStream *se = g_StdStream;
+ if (!se)
+ se = g_ErrStream;
+
+ retCode = WarningsCheck(hresultMain, callback, errorInfo,
+ g_StdStream, se,
+ true // options.EnableHeaders
+ );
}
else if (options.Command.CommandType == NCommandType::kHash)
{
@@ -1068,7 +1109,10 @@ int Main2(
errorInfoString, &callback);
CUpdateErrorInfo errorInfo;
errorInfo.Message = errorInfoString;
- retCode = WarningsCheck(hresultMain, callback, errorInfo, so, options.EnableHeaders);
+ CStdOutStream *se = g_StdStream;
+ if (!se)
+ se = g_ErrStream;
+ retCode = WarningsCheck(hresultMain, callback, errorInfo, g_StdStream, se, options.EnableHeaders);
}
else
ShowMessageAndThrowException(kUserErrorMessage, NExitCode::kUserError);