parent
d1090f0ddf
commit
fda3dbe7ea
|
@ -1,6 +1,6 @@
|
|||
/* -*- Mode: C ; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
Copyright (C) 2007,2008 Nedko Arnaudov
|
||||
Copyright (C) 2007,2008,2010 Nedko Arnaudov
|
||||
Copyright (C) 2007-2008 Juuso Alasuutari
|
||||
Copyright (C) 2008 Marc-Olivier Barre
|
||||
|
||||
|
@ -44,6 +44,8 @@
|
|||
#include "sigsegv.h"
|
||||
#include "svnversion.h"
|
||||
|
||||
static char * g_log_filename;
|
||||
static ino_t g_log_file_ino;
|
||||
FILE *g_logfile;
|
||||
char *g_jackdbus_config_dir;
|
||||
size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */
|
||||
|
@ -550,6 +552,49 @@ fail:
|
|||
jack_error ("Ran out of memory trying to construct method return");
|
||||
}
|
||||
|
||||
static bool jack_dbus_log_open(void)
|
||||
{
|
||||
struct stat st;
|
||||
int ret;
|
||||
int retry;
|
||||
|
||||
if (g_logfile != NULL)
|
||||
{
|
||||
ret = stat(g_log_filename, &st);
|
||||
if (ret != 0 || g_log_file_ino != st.st_ino)
|
||||
{
|
||||
fclose(g_logfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
for (retry = 0; retry < 10; retry++)
|
||||
{
|
||||
g_logfile = fopen(g_log_filename, "a");
|
||||
if (g_logfile == NULL)
|
||||
{
|
||||
fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", g_log_filename, errno, strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
ret = stat(g_log_filename, &st);
|
||||
if (ret == 0)
|
||||
{
|
||||
g_log_file_ino = st.st_ino;
|
||||
return true;
|
||||
}
|
||||
|
||||
fclose(g_logfile);
|
||||
g_logfile = NULL;
|
||||
}
|
||||
|
||||
fprintf(stderr, "Cannot stat just opened jackdbus log file \"%s\": %d (%s). %d retries\n", g_log_filename, errno, strerror(errno), retry);
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
jack_dbus_info_callback(const char *msg)
|
||||
{
|
||||
|
@ -560,8 +605,11 @@ jack_dbus_info_callback(const char *msg)
|
|||
ctime_r(×tamp, timestamp_str);
|
||||
timestamp_str[24] = 0;
|
||||
|
||||
fprintf(g_logfile, "%s: %s\n", timestamp_str, msg);
|
||||
fflush(g_logfile);
|
||||
if (jack_dbus_log_open())
|
||||
{
|
||||
fprintf(g_logfile, "%s: %s\n", timestamp_str, msg);
|
||||
fflush(g_logfile);
|
||||
}
|
||||
}
|
||||
|
||||
#define ANSI_BOLD_ON "\033[1m"
|
||||
|
@ -579,8 +627,11 @@ jack_dbus_error_callback(const char *msg)
|
|||
ctime_r(×tamp, timestamp_str);
|
||||
timestamp_str[24] = 0;
|
||||
|
||||
fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg);
|
||||
fflush(g_logfile);
|
||||
if (jack_dbus_log_open())
|
||||
{
|
||||
fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg);
|
||||
fflush(g_logfile);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -695,42 +746,39 @@ paths_uninit()
|
|||
free(g_jackdbus_log_dir);
|
||||
}
|
||||
|
||||
int
|
||||
log_init()
|
||||
static bool log_init(void)
|
||||
{
|
||||
char *log_filename;
|
||||
size_t log_len;
|
||||
|
||||
log_len = strlen(JACKDBUS_LOG);
|
||||
|
||||
log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1);
|
||||
if (log_filename == NULL)
|
||||
g_log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1);
|
||||
if (g_log_filename == NULL)
|
||||
{
|
||||
fprintf(stderr, "Out of memory\n");
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
memcpy(log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len);
|
||||
memcpy(log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len);
|
||||
log_filename[g_jackdbus_log_dir_len + log_len] = 0;
|
||||
memcpy(g_log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len);
|
||||
memcpy(g_log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len);
|
||||
g_log_filename[g_jackdbus_log_dir_len + log_len] = 0;
|
||||
|
||||
g_logfile = fopen(log_filename, "a");
|
||||
if (g_logfile == NULL)
|
||||
if (!jack_dbus_log_open())
|
||||
{
|
||||
fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", log_filename, errno, strerror(errno));
|
||||
free(log_filename);
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
free(log_filename);
|
||||
|
||||
return TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
log_uninit()
|
||||
static void log_uninit(void)
|
||||
{
|
||||
fclose(g_logfile);
|
||||
if (g_logfile != NULL)
|
||||
{
|
||||
fclose(g_logfile);
|
||||
}
|
||||
|
||||
free(g_log_filename);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue