diff options
Diffstat (limited to 'application/xulrunner/app/nsXULRunnerApp.cpp')
-rw-r--r-- | application/xulrunner/app/nsXULRunnerApp.cpp | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/application/xulrunner/app/nsXULRunnerApp.cpp b/application/xulrunner/app/nsXULRunnerApp.cpp deleted file mode 100644 index d86317a85..000000000 --- a/application/xulrunner/app/nsXULRunnerApp.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "nsXULAppAPI.h" -#include "nsXPCOMGlue.h" -#include <stdio.h> -#include <stdlib.h> -#ifdef XP_WIN -#include <windows.h> -#if defined(_MSC_VER) && _MSC_VER < 1900 -#define snprintf _snprintf -#endif -#define strcasecmp _stricmp -#endif - -#include "nsAppRunner.h" -#include "nsIFile.h" -#include "nsCOMPtr.h" -#include "nsMemory.h" -#include "nsCRTGlue.h" -#include "nsStringAPI.h" -#include "nsServiceManagerUtils.h" -#include "plstr.h" -#include "prprf.h" -#include "prenv.h" -#include "nsINIParser.h" - -#ifdef XP_WIN -#define XRE_DONT_SUPPORT_XPSP2 // See https://bugzil.la/1023941#c32 -#include "nsWindowsWMain.cpp" -#endif - -#include "BinaryPath.h" - -#include "nsXPCOMPrivate.h" // for MAXPATHLEN and XPCOM_DLL - -using namespace mozilla; - -/** - * Output a string to the user. This method is really only meant to be used to - * output last-ditch error messages designed for developers NOT END USERS. - * - * @param isError - * Pass true to indicate severe errors. - * @param fmt - * printf-style format string followed by arguments. - */ -static void Output(bool isError, const char *fmt, ... ) -{ - va_list ap; - va_start(ap, fmt); - -#if (defined(XP_WIN) && !MOZ_WINCONSOLE) - wchar_t msg[2048]; - _vsnwprintf(msg, sizeof(msg)/sizeof(msg[0]), NS_ConvertUTF8toUTF16(fmt).get(), ap); - - UINT flags = MB_OK; - if (isError) - flags |= MB_ICONERROR; - else - flags |= MB_ICONINFORMATION; - - MessageBoxW(nullptr, msg, L"XULRunner", flags); -#else - vfprintf(stderr, fmt, ap); -#endif - - va_end(ap); -} - -/** - * Return true if |arg| matches the given argument name. - */ -static bool IsArg(const char* arg, const char* s) -{ - if (*arg == '-') - { - if (*++arg == '-') - ++arg; - return !strcasecmp(arg, s); - } - -#if defined(XP_WIN) - if (*arg == '/') - return !strcasecmp(++arg, s); -#endif - - return false; -} - -static nsresult -GetGREVersion(const char *argv0, - nsACString *aMilestone, - nsACString *aVersion) -{ - if (aMilestone) - aMilestone->AssignLiteral("<Error>"); - if (aVersion) - aVersion->AssignLiteral("<Error>"); - - nsCOMPtr<nsIFile> iniFile; - nsresult rv = BinaryPath::GetFile(argv0, getter_AddRefs(iniFile)); - if (NS_FAILED(rv)) - return rv; - - iniFile->SetNativeLeafName(NS_LITERAL_CSTRING("platform.ini")); - - nsINIParser parser; - rv = parser.Init(iniFile); - if (NS_FAILED(rv)) - return rv; - - if (aMilestone) { - rv = parser.GetString("Build", "Milestone", *aMilestone); - if (NS_FAILED(rv)) - return rv; - } - if (aVersion) { - rv = parser.GetString("Build", "BuildID", *aVersion); - if (NS_FAILED(rv)) - return rv; - } - return NS_OK; -} - -static void Usage(const char *argv0) -{ - nsAutoCString milestone; - GetGREVersion(argv0, &milestone, nullptr); - - // display additional information (XXX make localizable?) - Output(false, - "Mozilla XULRunner %s\n\n" - "Usage: " XULRUNNER_PROGNAME " [OPTIONS]\n" - " " XULRUNNER_PROGNAME " APP-FILE [APP-OPTIONS...]\n" - "\n" - "OPTIONS\n" - " --app specify APP-FILE (optional)\n" - " -h, --help show this message\n" - " -v, --version show version\n" - " --gre-version print the GRE version string on stdout\n" - "\n" - "APP-FILE\n" - " Application initialization file.\n" - "\n" - "APP-OPTIONS\n" - " Application specific options.\n", - milestone.get()); -} - -XRE_GetFileFromPathType XRE_GetFileFromPath; -XRE_CreateAppDataType XRE_CreateAppData; -XRE_FreeAppDataType XRE_FreeAppData; -XRE_mainType XRE_main; - -static const nsDynamicFunctionLoad kXULFuncs[] = { - { "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath }, - { "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData }, - { "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData }, - { "XRE_main", (NSFuncPtr*) &XRE_main }, - { nullptr, nullptr } -}; - -class AutoAppData -{ -public: - AutoAppData(nsIFile* aINIFile) : mAppData(nullptr) { - nsresult rv = XRE_CreateAppData(aINIFile, &mAppData); - if (NS_FAILED(rv)) - mAppData = nullptr; - } - ~AutoAppData() { - if (mAppData) - XRE_FreeAppData(mAppData); - } - - operator nsXREAppData*() const { return mAppData; } - nsXREAppData* operator -> () const { return mAppData; } - -private: - nsXREAppData* mAppData; -}; - -int main(int argc, char* argv[]) -{ - char exePath[MAXPATHLEN]; - nsresult rv = mozilla::BinaryPath::Get(argv[0], exePath); - if (NS_FAILED(rv)) { - Output(true, "Couldn't calculate the application directory.\n"); - return 255; - } - - char *lastSlash = strrchr(exePath, XPCOM_FILE_PATH_SEPARATOR[0]); - if (!lastSlash || (size_t(lastSlash - exePath) > MAXPATHLEN - sizeof(XPCOM_DLL) - 1)) - return 255; - - strcpy(++lastSlash, XPCOM_DLL); - - rv = XPCOMGlueStartup(exePath); - if (NS_FAILED(rv)) { - Output(true, "Couldn't load XPCOM.\n"); - return 255; - } - - if (argc > 1 && (IsArg(argv[1], "h") || - IsArg(argv[1], "help") || - IsArg(argv[1], "?"))) - { - Usage(argv[0]); - return 0; - } - - if (argc == 2 && (IsArg(argv[1], "v") || IsArg(argv[1], "version"))) - { - nsAutoCString milestone; - nsAutoCString version; - GetGREVersion(argv[0], &milestone, &version); - Output(false, "Mozilla XULRunner %s - %s\n", - milestone.get(), version.get()); - return 0; - } - - rv = XPCOMGlueLoadXULFunctions(kXULFuncs); - if (NS_FAILED(rv)) { - Output(true, "Couldn't load XRE functions.\n"); - return 255; - } - - if (argc > 1) { - nsAutoCString milestone; - rv = GetGREVersion(argv[0], &milestone, nullptr); - if (NS_FAILED(rv)) - return 2; - - if (IsArg(argv[1], "gre-version")) { - if (argc != 2) { - Usage(argv[0]); - return 1; - } - - printf("%s\n", milestone.get()); - return 0; - } - - if (IsArg(argv[1], "install-app")) { - Output(true, "--install-app support has been removed. Use 'python install-app.py' instead.\n"); - return 1; - } - } - - const char *appDataFile = getenv("XUL_APP_FILE"); - - if (!(appDataFile && *appDataFile)) { - if (argc < 2) { - Usage(argv[0]); - return 1; - } - - if (IsArg(argv[1], "app")) { - if (argc == 2) { - Usage(argv[0]); - return 1; - } - argv[1] = argv[0]; - ++argv; - --argc; - } - - appDataFile = argv[1]; - argv[1] = argv[0]; - ++argv; - --argc; - - static char kAppEnv[MAXPATHLEN]; - snprintf(kAppEnv, MAXPATHLEN, "XUL_APP_FILE=%s", appDataFile); - putenv(kAppEnv); - } - - nsCOMPtr<nsIFile> appDataLF; - rv = XRE_GetFileFromPath(appDataFile, getter_AddRefs(appDataLF)); - if (NS_FAILED(rv)) { - Output(true, "Error: unrecognized application.ini path.\n"); - return 2; - } - - AutoAppData appData(appDataLF); - if (!appData) { - Output(true, "Error: couldn't parse application.ini.\n"); - return 2; - } - - return XRE_main(argc, argv, appData, 0); -} |