summaryrefslogtreecommitdiffstats
path: root/xbmc/platform/posix/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/platform/posix/main.cpp')
-rw-r--r--xbmc/platform/posix/main.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/xbmc/platform/posix/main.cpp b/xbmc/platform/posix/main.cpp
new file mode 100644
index 0000000..5028aaa
--- /dev/null
+++ b/xbmc/platform/posix/main.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#if defined(TARGET_DARWIN_OSX)
+// SDL redefines main as SDL_main
+#ifdef HAS_SDL
+#include <SDL/SDL.h>
+#endif
+#endif
+
+#include "PlatformPosix.h"
+#include "application/AppEnvironment.h"
+#include "application/AppParamParser.h"
+#include "platform/xbmc.h"
+
+#if defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
+#include "platform/linux/AppParamParserLinux.h"
+#endif
+
+#include <cstdio>
+#include <cstring>
+#include <errno.h>
+#include <locale.h>
+#include <signal.h>
+
+#include <sys/resource.h>
+
+namespace
+{
+extern "C" void XBMC_POSIX_HandleSignal(int sig)
+{
+ // Setting an atomic flag is one of the only useful things that is permitted by POSIX
+ // in signal handlers
+ CPlatformPosix::RequestQuit();
+}
+} // namespace
+
+
+int main(int argc, char* argv[])
+{
+#if defined(_DEBUG)
+ struct rlimit rlim;
+ rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY;
+ if (setrlimit(RLIMIT_CORE, &rlim) == -1)
+ fprintf(stderr, "Failed to set core size limit (%s).\n", strerror(errno));
+#endif
+
+ // Set up global SIGINT/SIGTERM handler
+ struct sigaction signalHandler;
+ std::memset(&signalHandler, 0, sizeof(signalHandler));
+ signalHandler.sa_handler = &XBMC_POSIX_HandleSignal;
+ signalHandler.sa_flags = SA_RESTART;
+ sigaction(SIGINT, &signalHandler, nullptr);
+ sigaction(SIGTERM, &signalHandler, nullptr);
+
+ setlocale(LC_NUMERIC, "C");
+
+#if defined(TARGET_LINUX) || defined(TARGET_FREEBSD)
+ CAppParamParserLinux appParamParser;
+#else
+ CAppParamParser appParamParser;
+#endif
+ appParamParser.Parse(argv, argc);
+
+ CAppEnvironment::SetUp(appParamParser.GetAppParams());
+ int status = XBMC_Run(true);
+ CAppEnvironment::TearDown();
+
+ return status;
+}