menu: added new Keywords tag to .desktop files
[barry.git] / src / log.cc
blobb0dda8e2b6947f6c6d5ed25e1c208761eac7d420
1 ///
2 /// \file log.cc
3 /// General Barry interface routines
4 ///
6 /*
7 Copyright (C) 2008-2013, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #include "log.h"
23 #include "clog.h"
24 #include "platform.h"
25 #include <pthread.h>
26 #include <stdio.h>
27 #include <stdarg.h>
28 #include <string.h>
29 #include <iostream>
31 namespace Barry {
33 extern bool __data_dump_mode__;
34 extern std::ostream *LogStream;
35 extern pthread_mutex_t LogStreamMutex;
37 LogLock::LogLock()
39 while( pthread_mutex_lock(&LogStreamMutex) != 0 )
43 LogLock::~LogLock()
45 pthread_mutex_unlock(&LogStreamMutex);
49 bool LogVerbose()
51 return __data_dump_mode__;
54 std::ostream* GetLogStream()
56 return LogStream;
59 } // namespace Barry
61 // Callable from C:
63 void BarryLogf(int verbose, const char *msg, ...)
65 va_list vl;
66 va_start(vl, msg);
67 char buffer[2048];
68 char *output = buffer;
69 int buflen = sizeof(buffer);
70 int n = vsnprintf(buffer, buflen, msg, vl);
71 if( n < 0 || n >= buflen ) {
72 buflen = n + 100;
73 output = new char [buflen];
74 n = vsnprintf(output, buflen, msg, vl);
75 if( n < 0 || n >= buflen ) {
76 delete [] output;
77 output = buffer;
78 strcpy(buffer, "BarryLog: (trace error, output too long for buffer)");
81 va_end(vl);
83 if( verbose ) {
84 barryverbose(output);
86 else {
87 barrylog(output);
90 if( output != buffer )
91 delete [] output;