Now using our own command-line parser, based on GetCommandLineW() + CommandLineToArgvW , instead of using QApplication::arguments(). This is less portable, but Qt's internal command-line parser has some rather strange behavior with processing certain characters. As a result, with Qt's command-line parser, some path names passed to LameXP got screwed up! Specifically "C:\Some Path\''Foo''.mp3" got mangled to "C:\Some Path''Foo''.mp3", i.e. the Backslash disappeared! Should be fixed now.

This commit is contained in:
LoRd_MuldeR 2012-06-22 15:49:56 +02:00
parent accee3da7a
commit 30bc239cd8
11 changed files with 64 additions and 24 deletions

View File

@ -24,6 +24,7 @@ a:visited { color: #0000EE; }
<li>Implemented multi-threading in initialization code for faster application startup
<li>Fixed a potential crash (stack overflow) when adding a huge number of files
<li>Fixed a problem with Cue Sheet import and files that contain trailing dots in their name
<li>Workaround for a bug (feature?) of Qt's command-line parser that screwed up some arguments
</ul><br>
<a name="4.04"></a>Changes between v4.03 and v4.04 [2012-04-26]:<br><ul>

View File

@ -27,7 +27,8 @@ if "%VER_LAMEXP_TYPE%"=="" GOTO:EOF
if "%VER_LAMEXP_PATCH%"=="" GOTO:EOF
REM ------------------------------------------
set "VER_LAMEXP_BASENAME=LameXP"
if not "%VER_LAMEXP_TYPE%" == "Final" set "VER_LAMEXP_BASENAME=LameXP-PRERELEASE"
if "%VER_LAMEXP_TYPE%" == "Alpha" set "VER_LAMEXP_BASENAME=LameXP-ALPHA"
if "%VER_LAMEXP_TYPE%" == "Beta" set "VER_LAMEXP_BASENAME=LameXP-BETA"
REM ------------------------------------------
echo LameXP Version:
echo %VER_LAMEXP_MAJOR%.%VER_LAMEXP_MINOR_HI%%VER_LAMEXP_MINOR_LO%, Build #%VER_LAMEXP_BUILD% (%VER_LAMEXP_TYPE%-%VER_LAMEXP_PATCH%)

View File

@ -3016,22 +3016,22 @@
<context>
<name>QApplication</name>
<message>
<location filename="../../src/Global.cpp" line="810"/>
<location filename="../../src/Global.cpp" line="816"/>
<source>Executable &apos;%1&apos; doesn&apos;t support Windows compatibility mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1053"/>
<location filename="../../src/Global.cpp" line="1059"/>
<source>Executable &apos;%1&apos; requires Qt v%2, but found Qt v%3.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1058"/>
<location filename="../../src/Global.cpp" line="1064"/>
<source>Executable &apos;%1&apos; was built for Qt &apos;%2&apos;, but found Qt &apos;%3&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1071"/>
<location filename="../../src/Global.cpp" line="1077"/>
<source>Executable &apos;%1&apos; requires Windows 2000 or later.</source>
<translation type="unfinished"></translation>
</message>

View File

@ -3016,22 +3016,22 @@
<context>
<name>QApplication</name>
<message>
<location filename="../../src/Global.cpp" line="810"/>
<location filename="../../src/Global.cpp" line="816"/>
<source>Executable &apos;%1&apos; doesn&apos;t support Windows compatibility mode.</source>
<translation type="unfinished">Plik wykonywalny &apos;%1&apos; nie działa w trybie kompatybilności z Windows.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1053"/>
<location filename="../../src/Global.cpp" line="1059"/>
<source>Executable &apos;%1&apos; requires Qt v%2, but found Qt v%3.</source>
<translation type="unfinished">Plik wykonywalny &apos;%1&apos; wymaga Qt v%2, znaleziono jednak Qt v%3.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1058"/>
<location filename="../../src/Global.cpp" line="1064"/>
<source>Executable &apos;%1&apos; was built for Qt &apos;%2&apos;, but found Qt &apos;%3&apos;.</source>
<translation type="unfinished">Plik wykonywalny &quot;%1&quot; został skompilowany dla Qt &quot;%2&quot;, znaleziono &quot;%3&quot;.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1071"/>
<location filename="../../src/Global.cpp" line="1077"/>
<source>Executable &apos;%1&apos; requires Windows 2000 or later.</source>
<translation type="unfinished">Plik wykonywalny &apos;%1&apos; wymaga do uruchomienia Windows 2000 lub nowszego.</translation>
</message>

View File

@ -3016,22 +3016,22 @@
<context>
<name>QApplication</name>
<message>
<location filename="../../src/Global.cpp" line="810"/>
<location filename="../../src/Global.cpp" line="816"/>
<source>Executable &apos;%1&apos; doesn&apos;t support Windows compatibility mode.</source>
<translation>EXE-filen &apos;%1&apos; stöder inte Windows kompatibilitetsläge.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1053"/>
<location filename="../../src/Global.cpp" line="1059"/>
<source>Executable &apos;%1&apos; requires Qt v%2, but found Qt v%3.</source>
<translation>EXE-filen &apos;%1&apos; kräver Qt v%2, du har Qt v%3.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1058"/>
<location filename="../../src/Global.cpp" line="1064"/>
<source>Executable &apos;%1&apos; was built for Qt &apos;%2&apos;, but found Qt &apos;%3&apos;.</source>
<translation>EXE-filen &apos;%1&apos; är byggd för Qt &apos;%2&apos;, du har Qt &apos;%3&apos;.</translation>
</message>
<message>
<location filename="../../src/Global.cpp" line="1071"/>
<location filename="../../src/Global.cpp" line="1077"/>
<source>Executable &apos;%1&apos; requires Windows 2000 or later.</source>
<translation>EXE-filen &apos;%1&apos; kräver Windows 2000 eller senare.</translation>
</message>

View File

@ -30,7 +30,7 @@
#define VER_LAMEXP_MINOR_LO 5
#define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 5
#define VER_LAMEXP_BUILD 1038
#define VER_LAMEXP_BUILD 1040
///////////////////////////////////////////////////////////////////////////////
// Tool versions (minimum expected versions!)

View File

@ -1125,7 +1125,7 @@ bool MainWindow::winEvent(MSG *message, long *result)
*/
void MainWindow::windowShown(void)
{
QStringList arguments = QApplication::arguments();
const QStringList &arguments = lamexp_arguments(); //QApplication::arguments();
//First run?
bool firstRun = false;

View File

@ -63,6 +63,9 @@
#include <time.h>
#include <process.h>
//Shell API
#include <Shellapi.h>
//COM includes
#include <Objbase.h>
#include <PowrProf.h>
@ -258,6 +261,9 @@ static const DWORD g_main_thread_id = GetCurrentThreadId();
//Log file
static FILE *g_lamexp_log_file = NULL;
//CLI Arguments
static QStringList *g_lamexp_argv = NULL;
///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
///////////////////////////////////////////////////////////////////////////////
@ -536,7 +542,7 @@ void lamexp_message_handler(QtMsgType type, const char *msg)
/*
* Initialize the console
*/
void lamexp_init_console(int argc, char* argv[])
void lamexp_init_console(const QStringList &argv)
{
bool enableConsole = lamexp_version_demo();
@ -561,13 +567,13 @@ void lamexp_init_console(int argc, char* argv[])
if(!LAMEXP_DEBUG)
{
for(int i = 0; i < argc; i++)
for(int i = 0; i < argv.count(); i++)
{
if(!_stricmp(argv[i], "--console"))
if(!argv.at(i).compare("--console", Qt::CaseInsensitive))
{
enableConsole = true;
}
else if(!_stricmp(argv[i], "--no-console"))
else if(!argv.at(i).compare("--no-console", Qt::CaseInsensitive))
{
enableConsole = false;
}
@ -1683,6 +1689,31 @@ bool lamexp_install_translator_from_file(const QString &qmFile)
return success;
}
const QStringList &lamexp_arguments(void)
{
if(!g_lamexp_argv)
{
g_lamexp_argv = new QStringList();
int nArgs = 0;
LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
if(NULL != szArglist)
{
for(int i = 0; i < nArgs; i++)
{
*g_lamexp_argv << WCHAR2QSTR(szArglist[i]);
}
LocalFree(szArglist);
}
else
{
qWarning("CommandLineToArgvW failed !!!");
}
}
return *g_lamexp_argv;
}
/*
* Locate known folder on local system
*/
@ -2100,6 +2131,9 @@ void lamexp_finalization(void)
fclose(g_lamexp_log_file);
g_lamexp_log_file = NULL;
}
//Free CLI Arguments
LAMEXP_DELETE(g_lamexp_argv);
}
/*

View File

@ -104,7 +104,7 @@ DWORD lamexp_get_os_version(void);
bool lamexp_detect_wine(void);
//Public functions
void lamexp_init_console(int argc, char* argv[]);
void lamexp_init_console(const QStringList &argv);
bool lamexp_init_qt(int argc, char* argv[]);
int lamexp_init_ipc(void);
LONG WINAPI lamexp_exception_handler(__in struct _EXCEPTION_POINTERS *ExceptionInfo);
@ -124,6 +124,7 @@ bool lamexp_portable_mode(void);
bool lamexp_shutdown_computer(const QString &message, const unsigned long timeout = 30, const bool forceShutdown = true, const bool hibernate = false);
bool lamexp_is_hibernation_supported(void);
QIcon lamexp_app_icon(const QDate *date = NULL, const QTime *time = NULL);
const QStringList &lamexp_arguments(void);
//Translation support
QStringList lamexp_query_translations(void);

View File

@ -50,8 +50,11 @@ static int lamexp_main(int argc, char* argv[])
int iShutdown = shutdownFlag_None;
bool bAccepted = true;
//Get CLI arguments
const QStringList &arguments = lamexp_arguments();
//Init console
lamexp_init_console(argc, argv);
lamexp_init_console(arguments);
//Print version info
qDebug("LameXP - Audio Encoder Front-End v%d.%02d %s (Build #%03d)", lamexp_version_major(), lamexp_version_minor(), lamexp_version_release(), lamexp_version_build());
@ -73,9 +76,9 @@ static int lamexp_main(int argc, char* argv[])
//Enumerate CLI arguments
qDebug("Command-Line Arguments:");
for(int i = 0; i < argc; i++)
for(int i = 0; i < arguments.count(); i++)
{
qDebug("argv[%d]=%s", i, argv[i]);
qDebug("argv[%d]=%s", i, arguments.at(i).toUtf8().constData());
}
qDebug("");

View File

@ -46,7 +46,7 @@ void MessageProducerThread::run()
{
setTerminationEnabled(true);
bool bSentFiles = false;
QStringList arguments = QApplication::arguments();
const QStringList &arguments = lamexp_arguments(); //QApplication::arguments();
for(int i = 0; i < arguments.count(); i++)
{