summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2015-05-29 16:14:42 +0100
committerVincent Sanders <vince@kyllikki.org>2015-05-29 16:14:42 +0100
commit4324bf535f4e65561bd48d78032edd4455f1579a (patch)
treefebf900cf10dffd472869912f36667627d5da07a /utils
parent20d29c0537385ed4456e242a792784fc33344f3a (diff)
downloadnetsurf-4324bf535f4e65561bd48d78032edd4455f1579a.tar.gz
netsurf-4324bf535f4e65561bd48d78032edd4455f1579a.tar.bz2
Allow verbose logging to be directed to a file
Diffstat (limited to 'utils')
-rw-r--r--utils/log.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/utils/log.c b/utils/log.c
index 0be8ea264..1969102d4 100644
--- a/utils/log.c
+++ b/utils/log.c
@@ -26,8 +26,12 @@
#include "utils/log.h"
+/** flag to enable verbose logging */
bool verbose_log = false;
+/** The stream to which logging is sent */
+static FILE *logf;
+
nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv)
{
nserror ret = NSERROR_OK;
@@ -37,6 +41,11 @@ nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv)
(argv[1][1] == 'v') &&
(argv[1][2] == 0)) {
int argcmv;
+
+ /* verbose logging to stderr */
+ logf = stderr;
+
+ /* remove -v from argv list */
for (argcmv = 2; argcmv < (*pargc); argcmv++) {
argv[argcmv - 1] = argv[argcmv];
}
@@ -44,12 +53,36 @@ nserror nslog_init(nslog_ensure_t *ensure, int *pargc, char **argv)
/* ensure we actually show logging */
verbose_log = true;
+ } else if (((*pargc) > 2) &&
+ (argv[1][0] == '-') &&
+ (argv[1][1] == 'V') &&
+ (argv[1][2] == 0)) {
+ int argcmv;
+
+ /* verbose logging to file */
+ logf = fopen(argv[2], "a+");
+
+ /* remove -V and filename from argv list */
+ for (argcmv = 3; argcmv < (*pargc); argcmv++) {
+ argv[argcmv - 1] = argv[argcmv];
+ }
+ (*pargc)--;
+
+ if (logf == NULL) {
+ /* could not open log file for output */
+ ret = NSERROR_NOT_FOUND;
+ verbose_log = false;
+ } else {
+
+ /* ensure we actually show logging */
+ verbose_log = true;
+ }
}
/* ensure output file handle is correctly configured */
if ((verbose_log == true) &&
(ensure != NULL) &&
- (ensure(stderr) == false)) {
+ (ensure(logf) == false)) {
/* failed to ensure output configuration */
ret = NSERROR_INIT_FAILED;
verbose_log = false;