This commit adds a dedicated function to initialize the debugging
infrastructure. Basically, it moves start_debug() from init.c to lib.c
and renames it to mutt_log_init().
The point is to group all functions related to logging in the same
place, and eventually move them to a dedicated file (as lib.c is alreay
in charge of too many things).
As debugfile and debuglevel will later be defined as static in lib.c,
this commit also removes the MUTT_LIB_WHERE macro, which is only good at
confusing tools and developers.
---
init.c | 25 +------------------------
lib.c | 33 +++++++++++++++++++++++++++++++--
lib.h | 13 +++----------
3 files changed, 35 insertions(+), 36 deletions(-)
diff --git a/init.c b/init.c
index 04d6685..4966e96 100644
--- a/init.c
+++ b/init.c
@@ -2826,29 +2826,6 @@ int mutt_getvaluebyname (const char *name, const struct
mapping_t *map)
return (-1);
}
-#ifdef DEBUG
-static void start_debug (void)
-{
- int i;
- char buf[_POSIX_PATH_MAX];
- char buf2[_POSIX_PATH_MAX];
-
- /* rotate the old debug logs */
- for (i=3; i>=0; i--)
- {
- snprintf (buf, sizeof(buf), "%s/.muttdebug%d", NONULL(Homedir), i);
- snprintf (buf2, sizeof(buf2), "%s/.muttdebug%d", NONULL(Homedir), i+1);
- rename (buf, buf2);
- }
- if ((debugfile = safe_fopen(buf, "w")) != NULL)
- {
- setbuf (debugfile, NULL); /* don't buffer the debugging output! */
- dprint(1,(debugfile,"Mutt/%s (%s) debugging at level %d\n",
- MUTT_VERSION, ReleaseDate, debuglevel));
- }
-}
-#endif
-
static int mutt_execute_commands (LIST *p)
{
BUFFER err, token;
@@ -2957,7 +2934,7 @@ void mutt_init (int skip_sys_rc, LIST *commands)
#ifdef DEBUG
/* Start up debugging mode if requested */
if (debuglevel > 0)
- start_debug ();
+ mutt_log_init (ReleaseDate, Homedir);
#endif
/* And about the host... */
diff --git a/lib.c b/lib.c
index 224232b..4b80639 100644
--- a/lib.c
+++ b/lib.c
@@ -26,8 +26,6 @@
* some of our "standard" functions in external programs, too.
*/
-#define _LIB_C 1
-
#if HAVE_CONFIG_H
# include "config.h"
#endif
@@ -52,6 +50,10 @@
#include "lib.h"
+#ifdef DEBUG
+FILE *debugfile = NULL;
+int debuglevel = 0;
+#endif
static const struct sysexits
{
@@ -1010,6 +1012,33 @@ mutt_strsysexit(int e)
return sysexits_h[i].str;
}
+#ifdef DEBUG
+int mutt_log_init (const char *reldate, const char *homedir)
+{
+ char buf[_POSIX_PATH_MAX];
+ char buf2[_POSIX_PATH_MAX];
+ int i;
+
+ /* rotate the old debug logs */
+ for (i = 3; i >= 0; i--)
+ {
+ snprintf (buf, sizeof(buf), "%s/.muttdebug%d", NONULL(homedir), i);
+ snprintf (buf2, sizeof(buf2), "%s/.muttdebug%d", NONULL(homedir), i + 1);
+ rename (buf, buf2);
+ }
+
+ debugfile = safe_fopen (buf, "w");
+ if (!debugfile)
+ return -1;
+
+ setbuf (debugfile, NULL); /* don't buffer the debugging output! */
+ dprint(1,(debugfile,"Mutt/%s (%s) debugging at level %d\n",
+ MUTT_VERSION, reldate, debuglevel));
+
+ return 0;
+}
+#endif
+
void mutt_debug (FILE *fp, const char *fmt, ...)
{
va_list ap;
diff --git a/lib.h b/lib.h
index 84d33b5..2ad091c 100644
--- a/lib.h
+++ b/lib.h
@@ -128,22 +128,15 @@ static inline int is_email_wsp(char c)
extern void (*mutt_error) (const char *, ...);
# endif
-# ifdef _LIB_C
-# define MUTT_LIB_WHERE
-# define MUTT_LIB_INITVAL(x) = x
-# else
-# define MUTT_LIB_WHERE extern
-# define MUTT_LIB_INITVAL(x)
-# endif
-
void mutt_exit (int);
# ifdef DEBUG
-MUTT_LIB_WHERE FILE *debugfile MUTT_LIB_INITVAL(0);
-MUTT_LIB_WHERE int debuglevel MUTT_LIB_INITVAL(0);
+extern FILE *debugfile;
+extern int debuglevel;
+int mutt_log_init (const char *reldate, const char *homedir);
void mutt_debug (FILE *, const char *, ...);
# define dprint(N,X) do { if(debuglevel>=N && debugfile) mutt_debug X; }
while (0)
--
2.9.0