Bug 407559 - "Allow XUL apps launched with Firefox to override name & vendor" [p=mark.finkle@gmail.com (Mark Finkle) r=bsmedberg a1.9=schrep]

This commit is contained in:
reed@reedloden.com 2007-12-19 03:23:22 -08:00
Родитель 341bd790a1
Коммит 642143012b
3 изменённых файлов: 23 добавлений и 73 удалений

Просмотреть файл

@ -2485,6 +2485,29 @@ XRE_main(int argc, char* argv[], const nsXREAppData* aAppData)
gBinaryPath = nsnull; gBinaryPath = nsnull;
#endif #endif
// Check for application.ini overrides
const char* override = nsnull;
ar = CheckArg("override", PR_TRUE, &override);
if (ar == ARG_BAD) {
Output(PR_TRUE, "Incorrect number of arguments passed to -override");
return 1;
}
else if (ar == ARG_FOUND) {
nsCOMPtr<nsILocalFile> overrideLF;
rv = XRE_GetFileFromPath(override, getter_AddRefs(overrideLF));
if (NS_FAILED(rv)) {
Output(PR_TRUE, "Error: unrecognized override.ini path.\n");
return 1;
}
nsXREAppData* overrideAppData = const_cast<nsXREAppData*>(aAppData);
rv = XRE_ParseAppData(overrideLF, overrideAppData);
if (NS_FAILED(rv)) {
Output(PR_TRUE, "Couldn't read override.ini");
return 1;
}
}
ScopedAppData appData(aAppData); ScopedAppData appData(aAppData);
gAppData = &appData; gAppData = &appData;

Просмотреть файл

@ -267,11 +267,6 @@ public:
XRE_FreeAppData(mAppData); XRE_FreeAppData(mAppData);
} }
nsresult
Override(nsILocalFile* aINIFile) {
return XRE_ParseAppData(aINIFile, mAppData);
}
operator nsXREAppData*() const { return mAppData; } operator nsXREAppData*() const { return mAppData; }
nsXREAppData* operator -> () const { return mAppData; } nsXREAppData* operator -> () const { return mAppData; }
@ -448,30 +443,6 @@ int main(int argc, char* argv[])
return 2; return 2;
} }
if (argc > 1 && IsArg(argv[1], "override")) {
if (argc == 2) {
Usage(argv[0]);
return 1;
}
argv[1] = argv[0];
++argv;
--argc;
const char *ovrDataFile = argv[1];
argv[1] = argv[0];
++argv;
--argc;
nsCOMPtr<nsILocalFile> ovrDataLF;
nsresult rv = XRE_GetFileFromPath(ovrDataFile, getter_AddRefs(ovrDataLF));
if (NS_FAILED(rv)) {
Output(PR_TRUE, "Error: unrecognized override.ini path.\n");
return 2;
}
appData.Override(ovrDataLF);
}
return XRE_main(argc, argv, appData); return XRE_main(argc, argv, appData);
} }

Просмотреть файл

@ -50,7 +50,6 @@
#include <io.h> #include <io.h>
#define snprintf _snprintf #define snprintf _snprintf
#define vsnprintf _vsnprintf #define vsnprintf _vsnprintf
#define strcasecmp stricmp
#define PATH_SEPARATOR_CHAR '\\' #define PATH_SEPARATOR_CHAR '\\'
#include "nsWindowsRestart.cpp" #include "nsWindowsRestart.cpp"
#define R_OK 04 #define R_OK 04
@ -98,23 +97,6 @@ static void Output(PRBool isError, const char *fmt, ... )
va_end(ap); va_end(ap);
} }
static PRBool IsArg(const char* arg, const char* s)
{
if (*arg == '-')
{
if (*++arg == '-')
++arg;
return !strcasecmp(arg, s);
}
#if defined(XP_WIN) || defined(XP_OS2)
if (*arg == '/')
return !strcasecmp(++arg, s);
#endif
return PR_FALSE;
}
class AutoAppData class AutoAppData
{ {
public: public:
@ -128,11 +110,6 @@ public:
XRE_FreeAppData(mAppData); XRE_FreeAppData(mAppData);
} }
nsresult
Override(nsILocalFile* aINIFile) {
return XRE_ParseAppData(aINIFile, mAppData);
}
operator nsXREAppData*() const { return mAppData; } operator nsXREAppData*() const { return mAppData; }
nsXREAppData* operator -> () const { return mAppData; } nsXREAppData* operator -> () const { return mAppData; }
@ -142,7 +119,6 @@ private:
XRE_CreateAppDataType XRE_CreateAppData; XRE_CreateAppDataType XRE_CreateAppData;
XRE_FreeAppDataType XRE_FreeAppData; XRE_FreeAppDataType XRE_FreeAppData;
XRE_ParseAppDataType XRE_ParseAppData;
XRE_mainType XRE_main; XRE_mainType XRE_main;
int int
@ -325,7 +301,6 @@ main(int argc, char **argv)
static const nsDynamicFunctionLoad kXULFuncs[] = { static const nsDynamicFunctionLoad kXULFuncs[] = {
{ "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData }, { "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData },
{ "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData }, { "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData },
{ "XRE_ParseAppData", (NSFuncPtr*) &XRE_ParseAppData },
{ "XRE_main", (NSFuncPtr*) &XRE_main }, { "XRE_main", (NSFuncPtr*) &XRE_main },
{ nsnull, nsnull } { nsnull, nsnull }
}; };
@ -367,25 +342,6 @@ main(int argc, char **argv)
&appData->xreDirectory); &appData->xreDirectory);
} }
if (argc > 1 && IsArg(argv[1], "override")) {
if (argc == 2) {
Output(PR_TRUE, "Error: missing override.ini file.\n");
return 1;
}
const char *ovrDataFile = argv[2];
nsCOMPtr<nsILocalFile> ovrDataLF;
nsresult rv = NS_NewNativeLocalFile(nsDependentCString(ovrDataFile), PR_FALSE,
getter_AddRefs(ovrDataLF));
if (NS_FAILED(rv)) {
Output(PR_TRUE, "Error: unrecognized override.ini path.\n");
return 1;
}
appData.Override(ovrDataLF);
}
retval = XRE_main(argc, argv, appData); retval = XRE_main(argc, argv, appData);
} }