summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2017-02-02 21:50:47 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-02-03 09:24:42 -0800
commit4a894e0713910e68a8744a3b34b95a91b31cabde (patch)
treea0a0b78e286d5b46112eaa8c2562aac5abd3b709
parent7c8461a328c6d93a89aeb4358bacf0201e940f35 (diff)
downloadsubsurface-4a894e0713910e68a8744a3b34b95a91b31cabde.tar.gz
Win32: add the --win32log option to log stdout and stderr to files
Adding --win32log as the first command line option on Windows will now log all stdout and stderr output to the files subsurface_err.log and subsurface_out.log in the working directory. This change required a new argument 'bool logfile' to be added to: subsurface_console_init() which is defined in all platform files (linux.c, macos.c, etc.) Example usage: subsurface.exe --win32log -v -v -v Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
-rw-r--r--core/android.cpp4
-rw-r--r--core/dive.h2
-rw-r--r--core/linux.c3
-rw-r--r--core/macos.c5
-rw-r--r--core/subsurfacestartup.c5
-rw-r--r--core/windows.c10
-rw-r--r--subsurface-desktop-main.cpp12
7 files changed, 29 insertions, 12 deletions
diff --git a/core/android.cpp b/core/android.cpp
index ef55f083b..5eb8c59de 100644
--- a/core/android.cpp
+++ b/core/android.cpp
@@ -187,8 +187,10 @@ int subsurface_zip_close(struct zip *zip)
}
/* win32 console */
-void subsurface_console_init(bool dedicated)
+void subsurface_console_init(bool dedicated, bool logfile)
{
+ (void)dedicated;
+ (void)logifle;
/* NOP */
}
diff --git a/core/dive.h b/core/dive.h
index c9d176920..4886bffad 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -730,7 +730,7 @@ extern void *subsurface_opendir(const char *path);
extern int subsurface_access(const char *path, int mode);
extern struct zip *subsurface_zip_open_readonly(const char *path, int flags, int *errorp);
extern int subsurface_zip_close(struct zip *zip);
-extern void subsurface_console_init(bool dedicated);
+extern void subsurface_console_init(bool dedicated, bool logfile);
extern void subsurface_console_exit(void);
extern bool subsurface_user_is_root(void);
diff --git a/core/linux.c b/core/linux.c
index b81f6bf53..b050472a6 100644
--- a/core/linux.c
+++ b/core/linux.c
@@ -215,9 +215,10 @@ int subsurface_zip_close(struct zip *zip)
}
/* win32 console */
-void subsurface_console_init(bool dedicated)
+void subsurface_console_init(bool dedicated, bool logfile)
{
(void)dedicated;
+ (void)logifle;
/* NOP */
}
diff --git a/core/macos.c b/core/macos.c
index 500412cd8..20a575b67 100644
--- a/core/macos.c
+++ b/core/macos.c
@@ -201,9 +201,10 @@ int subsurface_zip_close(struct zip *zip)
}
/* win32 console */
-void subsurface_console_init(bool dedicated)
+void subsurface_console_init(bool dedicated, bool logfile)
{
- (void) dedicated;
+ (void)dedicated;
+ (void)logifle;
/* NOP */
}
diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c
index 7bff43750..f240d139c 100644
--- a/core/subsurfacestartup.c
+++ b/core/subsurfacestartup.c
@@ -187,7 +187,8 @@ static void print_help()
printf("\n --survey Offer to submit a user survey");
printf("\n --user=<test> Choose configuration space for user <test>");
printf("\n --cloud-timeout=<nr> Set timeout for cloud connection (0 < timeout < 60)");
- printf("\n --win32console Create a dedicated console if needed (Windows only). Add option before everything else\n\n");
+ printf("\n --win32console Create a dedicated console if needed (Windows only). Add option before everything else");
+ printf("\n --win32log Write the program output to subsurface.log (Windows only). Add option before everything else\n\n");
}
void parse_argument(const char *arg)
@@ -245,6 +246,8 @@ void parse_argument(const char *arg)
}
if (strcmp(arg, "--win32console") == 0)
return;
+ if (strcmp(arg, "--win32log") == 0)
+ return;
/* fallthrough */
case 'p':
/* ignore process serial number argument when run as native macosx app */
diff --git a/core/windows.c b/core/windows.c
index 58d3beaad..a94d7dda5 100644
--- a/core/windows.c
+++ b/core/windows.c
@@ -377,11 +377,12 @@ static struct {
FILE *out, *err;
} console_desc;
-void subsurface_console_init(bool dedicated)
+void subsurface_console_init(bool dedicated, bool logfile)
{
(void)console_desc;
/* if this is a console app already, do nothing */
#ifndef WIN32_CONSOLE_APP
+
/* just in case of multiple calls */
memset((void *)&console_desc, 0, sizeof(console_desc));
/* the AttachConsole(..) call can be used to determine if the parent process
@@ -421,9 +422,12 @@ void subsurface_console_init(bool dedicated)
SetConsoleCtrlHandler(NULL, TRUE); /* disable the CTRL handler */
}
+ const char *location_out = logfile ? "subsurface_out.log" : "CON";
+ const char *location_err = logfile ? "subsurface_err.log" : "CON";
+
/* redirect; on win32, CON is a reserved pipe target, like NUL */
- console_desc.out = freopen("CON", "w", stdout);
- console_desc.err = freopen("CON", "w", stderr);
+ console_desc.out = freopen(location_out, "w", stdout);
+ console_desc.err = freopen(location_err, "w", stderr);
if (!dedicated)
puts(""); /* add an empty line */
#endif
diff --git a/subsurface-desktop-main.cpp b/subsurface-desktop-main.cpp
index 165d1f7d9..e30df687c 100644
--- a/subsurface-desktop-main.cpp
+++ b/subsurface-desktop-main.cpp
@@ -34,9 +34,15 @@ int main(int argc, char **argv)
QStringList importedFiles;
QStringList arguments = QCoreApplication::arguments();
- bool dedicated_console = arguments.length() > 1 &&
- (arguments.at(1) == QString("--win32console"));
- subsurface_console_init(dedicated_console);
+ bool win32_log = arguments.length() > 1 &&
+ (arguments.at(1) == QString("--win32log"));
+ if (win32_log) {
+ subsurface_console_init(true, true);
+ } else {
+ bool dedicated_console = arguments.length() > 1 &&
+ (arguments.at(1) == QString("--win32console"));
+ subsurface_console_init(dedicated_console, false);
+ }
const char *default_directory = system_default_directory();
const char *default_filename = system_default_filename();