More work on implementing calcurse daemon.
This commit is contained in:
parent
aef6f012fe
commit
3d23af73c0
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
* src/args.c (parse_args): check for file presence added (thanks
|
* src/args.c (parse_args): check for file presence added (thanks
|
||||||
again Chris for reporting it)
|
again Chris for reporting it)
|
||||||
|
|
||||||
|
* src/io.c (io_unset_lock): function removed
|
||||||
|
|
||||||
2009-07-23 Frederic Culot <frederic@culot.org>
|
2009-07-23 Frederic Culot <frederic@culot.org>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: dmon.c,v 1.2 2009/07/23 18:33:20 culot Exp $ */
|
/* $calcurse: dmon.c,v 1.3 2009/07/26 12:47:15 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -61,6 +61,9 @@ dmon_sigs_hdlr (int sig)
|
|||||||
notify_free_app ();
|
notify_free_app ();
|
||||||
(void)io_fprintln (path_dmon_log, _("terminated at %s with signal %d\n"),
|
(void)io_fprintln (path_dmon_log, _("terminated at %s with signal %d\n"),
|
||||||
nowstr (), sig);
|
nowstr (), sig);
|
||||||
|
|
||||||
|
if (unlink (path_dpid) != 0)
|
||||||
|
EXIT (_("Could not remove daemon lock file: %s\n"), strerror (errno));
|
||||||
|
|
||||||
exit (EXIT_SUCCESS);
|
exit (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
@ -143,6 +146,9 @@ dmon_start (int parent_exit_status)
|
|||||||
if (!daemonize (parent_exit_status))
|
if (!daemonize (parent_exit_status))
|
||||||
EXIT (_("Cannot daemonize, aborting\n"));
|
EXIT (_("Cannot daemonize, aborting\n"));
|
||||||
|
|
||||||
|
if (!io_dump_pid (path_dpid))
|
||||||
|
EXIT (_("Could not set lock file\n"));
|
||||||
|
|
||||||
io_check_file (path_conf, (int *)0);
|
io_check_file (path_conf, (int *)0);
|
||||||
custom_load_conf (&conf, 0);
|
custom_load_conf (&conf, 0);
|
||||||
|
|
||||||
|
47
src/io.c
47
src/io.c
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: io.c,v 1.72 2009/07/23 19:16:03 culot Exp $ */
|
/* $calcurse: io.c,v 1.73 2009/07/26 12:47:15 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -39,6 +39,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -726,7 +727,8 @@ io_init (char *cfile, char *datadir)
|
|||||||
(void)snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home);
|
(void)snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home);
|
||||||
(void)snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home);
|
(void)snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home);
|
||||||
(void)snprintf (path_keys, BUFSIZ, "%s/" KEYS_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_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home);
|
||||||
|
(void)snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home);
|
||||||
(void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home);
|
(void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -740,7 +742,8 @@ io_init (char *cfile, char *datadir)
|
|||||||
(void)snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH, home);
|
(void)snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH, home);
|
||||||
(void)snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH, home);
|
(void)snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH, home);
|
||||||
(void)snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH, home);
|
(void)snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH, home);
|
||||||
(void)snprintf (path_lock, BUFSIZ, "%s/" LOCK_PATH, home);
|
(void)snprintf (path_cpid, BUFSIZ, "%s/" CPID_PATH, home);
|
||||||
|
(void)snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH, home);
|
||||||
(void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home);
|
(void)snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home);
|
||||||
(void)snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR, home);
|
(void)snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR, home);
|
||||||
if (cfile == NULL)
|
if (cfile == NULL)
|
||||||
@ -2934,32 +2937,42 @@ io_set_lock (void)
|
|||||||
{
|
{
|
||||||
FILE *lock;
|
FILE *lock;
|
||||||
|
|
||||||
if ((lock = fopen (path_lock, "r")) != NULL)
|
if ((lock = fopen (path_cpid, "r")) != NULL)
|
||||||
{
|
{
|
||||||
(void)fprintf (stderr,
|
(void)fprintf (stderr,
|
||||||
_("\nWARNING: it seems that another calcurse instance is "
|
_("\nWARNING: it seems that another calcurse instance is "
|
||||||
"already running.\n"
|
"already running.\n"
|
||||||
"If this is not the case, please remove the following "
|
"If this is not the case, please remove the following "
|
||||||
"lock file: \n\"%s\"\n"
|
"lock file: \n\"%s\"\n"
|
||||||
"and restart calcurse.\n"), path_lock);
|
"and restart calcurse.\n"), path_cpid);
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((lock = fopen (path_lock, "w")) == NULL)
|
if (!io_dump_pid (path_cpid))
|
||||||
{
|
EXIT (_("FATAL ERROR: could not create %s: %s\n"),
|
||||||
(void)fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"),
|
path_cpid, strerror (errno));
|
||||||
path_lock, strerror (errno));
|
|
||||||
exit_calcurse (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
(void)fclose (lock);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Used when calcurse exits to remove the lock file. */
|
/*
|
||||||
void
|
* Create a new file and write the process pid inside
|
||||||
io_unset_lock (void)
|
* (used to create a simple lock for example).
|
||||||
|
*/
|
||||||
|
unsigned
|
||||||
|
io_dump_pid (char *file)
|
||||||
{
|
{
|
||||||
if (unlink (path_lock) != 0)
|
pid_t pid;
|
||||||
EXIT (_("Could not remove lock file: %s\n"), strerror (errno));
|
FILE *fp;
|
||||||
|
|
||||||
|
if (!file)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pid = getpid ();
|
||||||
|
if (!(fp = fopen (file, "w"))
|
||||||
|
|| fprintf (fp, "%ld\n", (long)pid) < 0
|
||||||
|
|| fclose (fp) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
4
src/io.h
4
src/io.h
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: io.h,v 1.23 2009/07/23 18:33:21 culot Exp $ */
|
/* $calcurse: io.h,v 1.24 2009/07/26 12:47:16 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -87,6 +87,6 @@ void io_log_free (io_file_t *);
|
|||||||
void io_start_psave_thread (conf_t *);
|
void io_start_psave_thread (conf_t *);
|
||||||
void io_stop_psave_thread (void);
|
void io_stop_psave_thread (void);
|
||||||
void io_set_lock (void);
|
void io_set_lock (void);
|
||||||
void io_unset_lock (void);
|
unsigned io_dump_pid (char *);
|
||||||
|
|
||||||
#endif /* !CALCURSE_IO_H */
|
#endif /* !CALCURSE_IO_H */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: utils.c,v 1.78 2009/07/23 18:33:21 culot Exp $ */
|
/* $calcurse: utils.c,v 1.79 2009/07/26 12:47:16 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -94,7 +94,11 @@ exit_calcurse (int status)
|
|||||||
keys_free ();
|
keys_free ();
|
||||||
mem_stats ();
|
mem_stats ();
|
||||||
if (remove_lock)
|
if (remove_lock)
|
||||||
io_unset_lock ();
|
{
|
||||||
|
if (unlink (path_cpid) != 0)
|
||||||
|
EXIT (_("Could not remove calcurse lock file: %s\n"),
|
||||||
|
strerror (errno));
|
||||||
|
}
|
||||||
|
|
||||||
dmon_start (status);
|
dmon_start (status);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: vars.c,v 1.18 2009/07/23 18:33:22 culot Exp $ */
|
/* $calcurse: vars.c,v 1.19 2009/07/26 12:47:16 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -102,7 +102,8 @@ char path_apts[] = "";
|
|||||||
char path_conf[] = "";
|
char path_conf[] = "";
|
||||||
char path_notes[] = "";
|
char path_notes[] = "";
|
||||||
char path_keys[] = "";
|
char path_keys[] = "";
|
||||||
char path_lock[] = "";
|
char path_cpid[] = "";
|
||||||
|
char path_dpid[] = "";
|
||||||
char path_dmon_log[] = "";
|
char path_dmon_log[] = "";
|
||||||
|
|
||||||
/* Variable to handle pads. */
|
/* Variable to handle pads. */
|
||||||
|
11
src/vars.h
11
src/vars.h
@ -1,4 +1,4 @@
|
|||||||
/* $calcurse: vars.h,v 1.35 2009/07/23 18:33:22 culot Exp $ */
|
/* $calcurse: vars.h,v 1.36 2009/07/26 12:47:17 culot Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calcurse - text-based organizer
|
* Calcurse - text-based organizer
|
||||||
@ -60,7 +60,8 @@
|
|||||||
#define APTS_PATH_NAME "apts"
|
#define APTS_PATH_NAME "apts"
|
||||||
#define CONF_PATH_NAME "conf"
|
#define CONF_PATH_NAME "conf"
|
||||||
#define KEYS_PATH_NAME "keys"
|
#define KEYS_PATH_NAME "keys"
|
||||||
#define LOCK_PATH_NAME ".calcurse.lock"
|
#define CPID_PATH_NAME ".calcurse.pid"
|
||||||
|
#define DPID_PATH_NAME ".daemon.pid"
|
||||||
#define DLOG_PATH_NAME "daemon.log"
|
#define DLOG_PATH_NAME "daemon.log"
|
||||||
#define NOTES_DIR_NAME "notes/"
|
#define NOTES_DIR_NAME "notes/"
|
||||||
|
|
||||||
@ -68,8 +69,9 @@
|
|||||||
#define APTS_PATH DIR_NAME APTS_PATH_NAME
|
#define APTS_PATH DIR_NAME APTS_PATH_NAME
|
||||||
#define CONF_PATH DIR_NAME CONF_PATH_NAME
|
#define CONF_PATH DIR_NAME CONF_PATH_NAME
|
||||||
#define KEYS_PATH DIR_NAME KEYS_PATH_NAME
|
#define KEYS_PATH DIR_NAME KEYS_PATH_NAME
|
||||||
#define LOCK_PATH DIR_NAME LOCK_PATH_NAME
|
#define CPID_PATH DIR_NAME CPID_PATH_NAME
|
||||||
#define DLOG_PATH DIR_NAME DLOG_PATH_NAME
|
#define DLOG_PATH DIR_NAME DLOG_PATH_NAME
|
||||||
|
#define DPID_PATH DIR_NAME DPID_PATH_NAME
|
||||||
#define NOTES_DIR DIR_NAME NOTES_DIR_NAME
|
#define NOTES_DIR DIR_NAME NOTES_DIR_NAME
|
||||||
|
|
||||||
#define ATTR_FALSE 0
|
#define ATTR_FALSE 0
|
||||||
@ -161,7 +163,8 @@ extern char path_apts[BUFSIZ];
|
|||||||
extern char path_conf[BUFSIZ];
|
extern char path_conf[BUFSIZ];
|
||||||
extern char path_keys[BUFSIZ];
|
extern char path_keys[BUFSIZ];
|
||||||
extern char path_notes[BUFSIZ];
|
extern char path_notes[BUFSIZ];
|
||||||
extern char path_lock[BUFSIZ];
|
extern char path_cpid[BUFSIZ];
|
||||||
|
extern char path_dpid[BUFSIZ];
|
||||||
extern char path_dmon_log[BUFSIZ];
|
extern char path_dmon_log[BUFSIZ];
|
||||||
|
|
||||||
extern struct pad_s apad;
|
extern struct pad_s apad;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user