int verbose = 0; /* increase User messages */
int debug_level = 0; /* debug level */
time_t daemon_start_time = 0; /* Daemon start time */
-char *version = VERSION " (" BDATE ")";
+const char *version = VERSION " (" BDATE ")";
char my_name[30]; /* daemon name is stored here */
char *exepath = (char *)NULL;
char *exename = (char *)NULL;
char con_fname[500]; /* Console filename */
FILE *con_fd = NULL; /* Console file descriptor */
brwlock_t con_lock; /* Console lock structure */
-FILE *trace_fd = NULL;
#ifdef HAVE_POSTGRESQL
char catalog_db[] = "PostgreSQL";
const char *host_os = HOST_OS;
const char *distname = DISTNAME;
const char *distver = DISTVER;
+static FILE *trace_fd = NULL;
+#ifdef HAVE_WIN32
+static bool trace = true;
+#else
+static bool trace = false;
+#endif
/* Forward referenced functions */
* argv is NULL to avoid doing the path code twice.
*/
#define BTRACE_EXTRA 20
-void my_name_is(int argc, char *argv[], char *name)
+void my_name_is(int argc, char *argv[], const char *name)
{
char *l, *p, *q;
char cpath[400], npath[400];
if (type == M_ABORT || type == M_ERROR_TERM) {
fputs(msg, stdout); /* print this here to INSURE that it is printed */
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
+ MessageBox(NULL, msg, "Bacula", MB_OK);
+#endif
}
/* Now figure out where to send the message */
* are not printed.
*/
void
-d_msg(char *file, int line, int level, char *fmt,...)
+d_msg(const char *file, int line, int level, const char *fmt,...)
{
char buf[5000];
int len;
}
if (level <= debug_level) {
-#ifdef HAVE_WIN32
-#define SEND_DMSG_TO_FILE
-#endif
-#ifdef SEND_DMSG_TO_FILE
- if (!trace_fd) {
- bsnprintf(buf, sizeof(buf), "%s/bacula.trace", working_directory ? working_directory : ".");
- trace_fd = fopen(buf, "a+");
- }
-#endif
#ifdef FULL_LOCATION
if (details) {
/* visual studio passes the whole path to the file as well
bvsnprintf(buf+len, sizeof(buf)-len, (char *)fmt, arg_ptr);
va_end(arg_ptr);
-#ifdef SEND_DMSG_TO_FILE
- if (trace_fd) {
- fputs(buf, trace_fd);
- fflush(trace_fd);
+ /*
+ * Used the "trace on" command in the console to turn on
+ * output to the trace file. "trace off" will close the file.
+ */
+ if (trace) {
+ if (!trace_fd) {
+ bsnprintf(buf, sizeof(buf), "%s/bacula.trace", working_directory ? working_directory : ".");
+ trace_fd = fopen(buf, "a+");
+ }
+ if (trace_fd) {
+ fputs(buf, trace_fd);
+ fflush(trace_fd);
+ }
+ } else { /* not tracing */
+ fputs(buf, stdout);
}
-#else
- fputs(buf, stdout);
-#endif
}
}
+/*
+ * Set trace flag on/off. If argument is negative, there is no change
+ */
+void set_trace(int trace_flag)
+{
+ if (trace_flag < 0) {
+ return;
+ } else if (trace_flag > 0) {
+ trace = true;
+ } else {
+ trace = false;
+ }
+ if (!trace && trace_fd) {
+ FILE *ltrace_fd = trace_fd;
+ trace_fd = NULL;
+ bmicrosleep(0, 100000); /* yield to prevent seg faults */
+ fclose(ltrace_fd);
+ }
+}
/*********************************************************************
*
* are not printed.
*/
void
-p_msg(char *file, int line, int level, char *fmt,...)
+p_msg(const char *file, int line, int level, const char *fmt,...)
{
char buf[5000];
int len;
* are not printed.
*/
void
-t_msg(char *file, int line, int level, char *fmt,...)
+t_msg(const char *file, int line, int level, const char *fmt,...)
{
char buf[5000];
int len;
*
*/
void
-e_msg(char *file, int line, int type, int level, char *fmt,...)
+e_msg(const char *file, int line, int type, int level, const char *fmt,...)
{
char buf[5000];
va_list arg_ptr;
*
*/
void
-Jmsg(JCR *jcr, int type, int level, char *fmt,...)
+Jmsg(JCR *jcr, int type, int level, const char *fmt,...)
{
char rbuf[5000];
va_list arg_ptr;
int len;
MSGS *msgs;
- char *job;
+ const char *job;
Dmsg1(800, "Enter Jmsg type=%d\n", type);
* If we come here, prefix the message with the file:line-number,
* then pass it on to the normal Jmsg routine.
*/
-void j_msg(char *file, int line, JCR *jcr, int type, int level, char *fmt,...)
+void j_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...)
{
va_list arg_ptr;
int i, len, maxlen;
/*
* Edit a message into a Pool memory buffer, with file:lineno
*/
-int m_msg(char *file, int line, POOLMEM **pool_buf, char *fmt, ...)
+int m_msg(const char *file, int line, POOLMEM **pool_buf, const char *fmt, ...)
{
va_list arg_ptr;
int i, len, maxlen;
* Edit a message into a Pool Memory buffer NO file:lineno
* Returns: string length of what was edited.
*/
-int Mmsg(POOLMEM **pool_buf, char *fmt, ...)
+int Mmsg(POOLMEM **pool_buf, const char *fmt, ...)
{
va_list arg_ptr;
int len, maxlen;
* is generally used in low level routines (msg handler, bnet)
* to prevent recursion.
*/
-void Qmsg(JCR *jcr, int type, int level, char *fmt,...)
+void Qmsg(JCR *jcr, int type, int level, const char *fmt,...)
{
va_list arg_ptr;
int len, maxlen;
* If we come here, prefix the message with the file:line-number,
* then pass it on to the normal Qmsg routine.
*/
-void q_msg(char *file, int line, JCR *jcr, int type, int level, char *fmt,...)
+void q_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...)
{
va_list arg_ptr;
int i, len, maxlen;