mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
e216f91ebc
Some users try to run Subsurface as root for example to get around permission problems with dive computer devices. This is a bad idea since config files get touched as root and then cannot be read as normal user anymore. This patch allows running as root only with verbose option on. We can assume if somebody manages to start subsurface as root this happens from the command line. For some reason, I couldn't get translation working at this stage. Windows version is a stub. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
121 lines
3.1 KiB
C++
121 lines
3.1 KiB
C++
/* main.c */
|
|
#include <locale.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
#include "dive.h"
|
|
#include "qt-gui.h"
|
|
#include "subsurfacestartup.h"
|
|
#include "desktop-widgets/mainwindow.h"
|
|
#include "desktop-widgets/maintab.h"
|
|
#include "profile-widget/profilewidget2.h"
|
|
#include "preferences/preferencesdialog.h"
|
|
#include "desktop-widgets/diveplanner.h"
|
|
#include "subsurface-core/color.h"
|
|
#include "qthelper.h"
|
|
|
|
#include <QStringList>
|
|
#include <QApplication>
|
|
#include <QLoggingCategory>
|
|
#include <git2.h>
|
|
|
|
QTranslator *qtTranslator, *ssrfTranslator;
|
|
|
|
static bool filesOnCommandLine = false;
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int i;
|
|
bool no_filenames = true;
|
|
QLoggingCategory::setFilterRules(QStringLiteral("qt.bluetooth* = true"));
|
|
QApplication *application = new QApplication(argc, argv);
|
|
(void)application;
|
|
QStringList files;
|
|
QStringList importedFiles;
|
|
QStringList arguments = QCoreApplication::arguments();
|
|
|
|
bool dedicated_console = arguments.length() > 1 &&
|
|
(arguments.at(1) == QString("--win32console"));
|
|
subsurface_console_init(dedicated_console);
|
|
|
|
const char *default_directory = system_default_directory();
|
|
const char *default_filename = system_default_filename();
|
|
subsurface_mkdir(default_directory);
|
|
|
|
for (i = 1; i < arguments.length(); i++) {
|
|
QString a = arguments.at(i);
|
|
if (a.isEmpty())
|
|
continue;
|
|
if (a.at(0) == '-') {
|
|
parse_argument(a.toLocal8Bit().data());
|
|
continue;
|
|
}
|
|
if (imported) {
|
|
importedFiles.push_back(a);
|
|
} else {
|
|
no_filenames = false;
|
|
files.push_back(a);
|
|
}
|
|
}
|
|
if (subsurface_user_is_root() && !force_root) {
|
|
printf("You are running Subsurface as root. This is not recommended.\n");
|
|
printf("If you insist to do so, run with option --allow_run_as_root.\n");
|
|
exit(0);
|
|
}
|
|
#if !LIBGIT2_VER_MAJOR && LIBGIT2_VER_MINOR < 22
|
|
git_threads_init();
|
|
#else
|
|
git_libgit2_init();
|
|
#endif
|
|
/*
|
|
* Initialize the random number generator - not really secure as
|
|
* this is based only on current time, but it should not matter
|
|
* that much in our context. Moreover this is better than
|
|
* the constant numbers we used to get before.
|
|
*/
|
|
qsrand(time(NULL));
|
|
|
|
setup_system_prefs();
|
|
copy_prefs(&default_prefs, &prefs);
|
|
fill_profile_color();
|
|
parse_xml_init();
|
|
taglist_init_global();
|
|
init_ui();
|
|
if (no_filenames) {
|
|
if (prefs.default_file_behavior == LOCAL_DEFAULT_FILE) {
|
|
QString defaultFile(prefs.default_filename);
|
|
if (!defaultFile.isEmpty())
|
|
files.push_back(QString(prefs.default_filename));
|
|
} else if (prefs.default_file_behavior == CLOUD_DEFAULT_FILE) {
|
|
QString cloudURL;
|
|
if (getCloudURL(cloudURL) == 0)
|
|
files.push_back(cloudURL);
|
|
}
|
|
}
|
|
MainWindow *m = MainWindow::instance();
|
|
filesOnCommandLine = !files.isEmpty() || !importedFiles.isEmpty();
|
|
m->loadFiles(files);
|
|
m->importFiles(importedFiles);
|
|
// in case something has gone wrong make sure we show the error message
|
|
m->showError();
|
|
|
|
if (verbose > 0)
|
|
print_files();
|
|
if (!quit)
|
|
run_ui();
|
|
exit_ui();
|
|
taglist_free(g_tag_list);
|
|
parse_xml_exit();
|
|
free((void *)default_directory);
|
|
free((void *)default_filename);
|
|
subsurface_console_exit();
|
|
free_prefs();
|
|
return 0;
|
|
}
|
|
|
|
bool haveFilesOnCommandLine()
|
|
{
|
|
return filesOnCommandLine;
|
|
}
|