From ade0470197934fba87eb5113a7ecb2d542a6ed73 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Thu, 23 Jul 2009 18:33:20 +0000
Subject: Functions added to implement a logging mechanism for calcurse daemon.

---
 src/dmon.c  |  9 +++++++--
 src/io.c    | 34 ++++++++++++++++++++++++++++++++--
 src/io.h    |  3 ++-
 src/utils.c | 14 +++++++++++++-
 src/utils.h |  3 ++-
 src/vars.c  |  3 ++-
 src/vars.h  |  6 +++++-
 7 files changed, 63 insertions(+), 9 deletions(-)

(limited to 'src')

diff --git a/src/dmon.c b/src/dmon.c
index 5845cda..9aae65f 100644
--- a/src/dmon.c
+++ b/src/dmon.c
@@ -1,4 +1,4 @@
-/*	$calcurse: dmon.c,v 1.1 2009/07/20 19:44:04 culot Exp $	*/
+/*	$calcurse: dmon.c,v 1.2 2009/07/23 18:33:20 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -59,6 +59,8 @@ static void
 dmon_sigs_hdlr (int sig)
 {
   notify_free_app ();
+  (void)io_fprintln (path_dmon_log, _("terminated at %s with signal %d\n"),
+                     nowstr (), sig);
   
   exit (EXIT_SUCCESS);
 }
@@ -165,7 +167,10 @@ dmon_start (int parent_exit_status)
       
       if (next.txt)
         mem_free (next.txt);
-      
+
+      (void)io_fprintln (path_dmon_log, _("sleeping at %s for %d seconds\n"),
+                   nowstr (), DMON_SLEEP_TIME);
       psleep (DMON_SLEEP_TIME);
+      (void)io_fprintln (path_dmon_log, _("awakened at %s\n"), nowstr ());
     }
 }
diff --git a/src/io.c b/src/io.c
index 8d51e81..3c0ffa9 100755
--- a/src/io.c
+++ b/src/io.c
@@ -1,4 +1,4 @@
-/*	$calcurse: io.c,v 1.70 2009/07/19 08:20:00 culot Exp $	*/
+/*	$calcurse: io.c,v 1.71 2009/07/23 18:33:21 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -674,6 +674,34 @@ pcal_export_todo (FILE *stream)
   (void)fprintf (stream, "\n");
 }
 
+/* Append a line to a file. */
+unsigned
+io_fprintln (const char *fname, const char *fmt, ...)
+{
+  FILE *fp;
+  va_list ap;
+  char buf[BUFSIZ];
+  int ret;
+
+  fp = fopen (fname, "a");
+  RETVAL_IF (!fp, 0, _("Failed to open \"%s\", - %s\n"),
+             fname, strerror (errno));
+
+  va_start (ap, fmt);
+  ret = vsnprintf (buf, sizeof buf, fmt, ap);
+  RETVAL_IF (ret < 0, 0, _("Failed to build message\n"));
+  va_end (ap);
+  
+  ret = fprintf (fp, "%s", buf);
+  RETVAL_IF (ret < 0, 0, _("Failed to print message \"%s\"\n"), buf);
+  
+  ret = fclose (fp);
+  RETVAL_IF (ret != 0, 0, _("Failed to close \"%s\" - %s\n"),
+             fname, strerror (errno));
+
+  return 1;
+}
+
 /* 
  * Initialization of data paths. The cfile argument is the variable
  * which contains the calendar file. If none is given, then the default
@@ -699,6 +727,7 @@ io_init (char *cfile, char *datadir)
       (void)snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home);
       (void)snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home);
       (void)snprintf (path_lock, BUFSIZ, "%s/" LOCK_PATH_NAME, home);
+      (void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home);
     }
   else
     {
@@ -711,7 +740,8 @@ io_init (char *cfile, char *datadir)
       (void)snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH, home);
       (void)snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH, home);
       (void)snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH, home);
-      (void)snprintf (path_lock, BUFSIZ, "%s/" LOCK_PATH, home);      
+      (void)snprintf (path_lock, BUFSIZ, "%s/" LOCK_PATH, home);
+      (void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home);           
       (void)snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR, home);
       if (cfile == NULL)
         {
diff --git a/src/io.h b/src/io.h
index a0b9d8f..c71cb13 100755
--- a/src/io.h
+++ b/src/io.h
@@ -1,4 +1,4 @@
-/*	$calcurse: io.h,v 1.22 2009/07/12 16:22:01 culot Exp $	*/
+/*	$calcurse: io.h,v 1.23 2009/07/23 18:33:21 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -63,6 +63,7 @@ typedef struct {
   char name[BUFSIZ];
 } io_file_t;
 
+unsigned    io_fprintln (const char *, const char *, ...);
 void        io_init (char *, char *);
 void        io_extract_data (char *, const char *, int);
 unsigned    io_save_conf (conf_t *);
diff --git a/src/utils.c b/src/utils.c
index 34cb142..9e4da1d 100755
--- a/src/utils.c
+++ b/src/utils.c
@@ -1,4 +1,4 @@
-/*	$calcurse: utils.c,v 1.77 2009/07/20 19:45:27 culot Exp $	*/
+/*	$calcurse: utils.c,v 1.78 2009/07/23 18:33:21 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -764,6 +764,18 @@ now (void)
   return (current_time);
 }
 
+char *
+nowstr (void)
+{
+  static char buf[BUFSIZ];  
+  time_t now;
+
+  (void)time (&now);
+  (void)strftime (buf, sizeof buf, "%a %b %d %T %Y", localtime (&now));
+
+  return buf;
+}
+
 long
 mystrtol (const char *str)
 {
diff --git a/src/utils.h b/src/utils.h
index eae71a7..035f29a 100755
--- a/src/utils.h
+++ b/src/utils.h
@@ -1,4 +1,4 @@
-/*	$calcurse: utils.h,v 1.47 2009/07/20 19:45:27 culot Exp $	*/
+/*	$calcurse: utils.h,v 1.48 2009/07/23 18:33:22 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -149,6 +149,7 @@ void      draw_scrollbar (WINDOW *, int, int, int, int, int, unsigned);
 void      item_in_popup (char *, char *, char *, char *);
 long      get_today (void);
 long      now (void);
+char     *nowstr (void);
 long      mystrtol (const char *);
 void      print_bool_option_incolor (WINDOW *, unsigned, int, int);
 char     *new_tempfile (const char *, int);
diff --git a/src/vars.c b/src/vars.c
index 7120ae1..0dc6a06 100755
--- a/src/vars.c
+++ b/src/vars.c
@@ -1,4 +1,4 @@
-/*	$calcurse: vars.c,v 1.17 2009/07/12 16:22:02 culot Exp $	*/
+/*	$calcurse: vars.c,v 1.18 2009/07/23 18:33:22 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -103,6 +103,7 @@ char path_conf[] = "";
 char path_notes[] = "";
 char path_keys[] = "";
 char path_lock[] = "";
+char path_dmon_log[] = "";
 
 /* Variable to handle pads. */
 struct pad_s apad;
diff --git a/src/vars.h b/src/vars.h
index 1f220e8..677c15a 100755
--- a/src/vars.h
+++ b/src/vars.h
@@ -1,4 +1,4 @@
-/*	$calcurse: vars.h,v 1.34 2009/07/12 16:22:02 culot Exp $	*/
+/*	$calcurse: vars.h,v 1.35 2009/07/23 18:33:22 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -61,6 +61,7 @@
 #define CONF_PATH_NAME   "conf"
 #define KEYS_PATH_NAME   "keys"
 #define LOCK_PATH_NAME   ".calcurse.lock"
+#define DLOG_PATH_NAME   "daemon.log"
 #define NOTES_DIR_NAME   "notes/"
 
 #define TODO_PATH        DIR_NAME TODO_PATH_NAME
@@ -68,6 +69,7 @@
 #define CONF_PATH        DIR_NAME CONF_PATH_NAME
 #define KEYS_PATH        DIR_NAME KEYS_PATH_NAME
 #define LOCK_PATH        DIR_NAME LOCK_PATH_NAME
+#define DLOG_PATH        DIR_NAME DLOG_PATH_NAME
 #define NOTES_DIR        DIR_NAME NOTES_DIR_NAME
 
 #define ATTR_FALSE	0
@@ -160,6 +162,8 @@ extern char           path_conf[BUFSIZ];
 extern char           path_keys[BUFSIZ];
 extern char           path_notes[BUFSIZ];
 extern char           path_lock[BUFSIZ];
+extern char           path_dmon_log[BUFSIZ];
+
 extern struct pad_s   apad;
 extern struct nbar_s  nbar;
 
-- 
cgit v1.2.3-70-g09d2