summaryrefslogtreecommitdiffstats
path: root/src/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/io.c')
-rw-r--r--src/io.c619
1 files changed, 248 insertions, 371 deletions
diff --git a/src/io.c b/src/io.c
index 8709341..62b113e 100644
--- a/src/io.c
+++ b/src/io.c
@@ -45,6 +45,7 @@
#include <errno.h>
#include "calcurse.h"
+#include "sha1.h"
#define ICALDATEFMT "%Y%m%d"
#define ICALDATETIMEFMT "%Y%m%dT%H%M%S"
@@ -136,7 +137,6 @@ static char *ical_recur_type[RECUR_TYPES] =
static void
progress_bar (progress_bar_t type, int progress)
{
-#define SLEEPTIME 125000
#define NBFILES 4
#define NBEXPORTED 3
#define LABELENGTH 15
@@ -194,8 +194,6 @@ progress_bar (progress_bar_t type, int progress)
custom_remove_attr (win[STA].p, ATTR_HIGHEST);
wmove (win[STA].p, 0, 0);
wins_wrefresh (win[STA].p);
- (void)usleep (SLEEPTIME);
-#undef SLEEPTIME
#undef NBFILES
#undef NBEXPORTED
#undef LABELENGTH
@@ -217,11 +215,10 @@ get_export_stream (enum export_type type)
stream = NULL;
stream_name = (char *) mem_malloc (BUFSIZ);
if ((home = getenv ("HOME")) != NULL)
- (void)snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", home,
- file_ext[type]);
+ snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", home, file_ext[type]);
else
- (void)snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", get_tempdir (),
- file_ext[type]);
+ snprintf (stream_name, BUFSIZ, "%s/calcurse.%s", get_tempdir (),
+ file_ext[type]);
while (stream == NULL)
{
@@ -230,18 +227,18 @@ get_export_stream (enum export_type type)
if (cancel)
{
mem_free (stream_name);
- return (NULL);
+ return NULL;
}
stream = fopen (stream_name, "w");
if (stream == NULL)
{
status_mesg (wrong_name, press_enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
}
mem_free (stream_name);
- return (stream);
+ return stream;
}
/*
@@ -266,8 +263,8 @@ foreach_date_dump (const long date_end, struct rpt *rpt, llist_t *exc,
while (date <= date_end && date <= rpt->until)
{
- if (recur_item_inday (item_first_date, exc, rpt->type, rpt->freq,
- rpt->until, date))
+ if (recur_item_inday (item_first_date, item_dur, exc, rpt->type,
+ rpt->freq, rpt->until, date))
{
(*cb_dump)(stream, date + item_time, item_dur, item_mesg);
}
@@ -297,41 +294,40 @@ foreach_date_dump (const long date_end, struct rpt *rpt, llist_t *exc,
static void
ical_export_valarm (FILE *stream)
{
- (void)fprintf (stream, "BEGIN:VALARM\n");
+ fputs ("BEGIN:VALARM\n", stream);
pthread_mutex_lock (&nbar.mutex);
- (void)fprintf (stream, "TRIGGER:-P%dS\n", nbar.cntdwn);
+ fprintf (stream, "TRIGGER:-P%dS\n", nbar.cntdwn);
pthread_mutex_unlock (&nbar.mutex);
- (void)fprintf (stream, "ACTION:DISPLAY\n");
- (void)fprintf (stream, "END:VALARM\n");
+ fputs ("ACTION:DISPLAY\n", stream);
+ fputs ("END:VALARM\n", stream);
}
/* Export header. */
static void
ical_export_header (FILE *stream)
{
- (void)fprintf (stream, "BEGIN:VCALENDAR\n");
- (void)fprintf (stream, "PRODID:-//calcurse//NONSGML v%s//EN\n", VERSION);
- (void)fprintf (stream, "VERSION:2.0\n");
+ fputs ("BEGIN:VCALENDAR\n", stream);
+ fprintf (stream, "PRODID:-//calcurse//NONSGML v%s//EN\n", VERSION);
+ fputs ("VERSION:2.0\n", stream);
}
static void
pcal_export_header (FILE *stream)
{
- (void)fprintf (stream, "# calcurse pcal export\n");
- (void)fprintf (stream, "\n# =======\n# options\n# =======\n");
- (void)fprintf (stream, "opt -A -K -l -m -F %s\n",
- calendar_week_begins_on_monday () ?
- "Monday" : "Sunday");
- (void)fprintf (stream, "# Display week number (i.e. 1-52) on every Monday\n");
- (void)fprintf (stream, "all monday in all %s %%w\n", _("Week"));
- (void)fprintf (stream, "\n");
+ fputs ("# calcurse pcal export\n", stream);
+ fputs ("\n# =======\n# options\n# =======\n", stream);
+ fprintf (stream, "opt -A -K -l -m -F %s\n",
+ calendar_week_begins_on_monday () ? "Monday" : "Sunday");
+ fputs ("# Display week number (i.e. 1-52) on every Monday\n", stream);
+ fprintf (stream, "all monday in all %s %%w\n", _("Week"));
+ fputc ('\n', stream);
}
/* Export footer. */
static void
ical_export_footer (FILE *stream)
{
- (void)fprintf (stream, "END:VCALENDAR\n");
+ fputs ("END:VCALENDAR\n", stream);
}
static void
@@ -350,36 +346,36 @@ ical_export_recur_events (FILE *stream)
{
struct recur_event *rev = LLIST_GET_DATA (i);
date_sec2date_fmt (rev->day, ICALDATEFMT, ical_date);
- (void)fprintf (stream, "BEGIN:VEVENT\n");
- (void)fprintf (stream, "DTSTART:%s\n", ical_date);
- (void)fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d",
- ical_recur_type[rev->rpt->type], rev->rpt->freq);
+ fputs ("BEGIN:VEVENT\n", stream);
+ fprintf (stream, "DTSTART:%s\n", ical_date);
+ fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d",
+ ical_recur_type[rev->rpt->type], rev->rpt->freq);
if (rev->rpt->until != 0)
{
date_sec2date_fmt (rev->rpt->until, ICALDATEFMT, ical_date);
- (void)fprintf (stream, ";UNTIL=%s\n", ical_date);
+ fprintf (stream, ";UNTIL=%s\n", ical_date);
}
else
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
if (LLIST_FIRST (&rev->exc))
{
- (void)fprintf (stream, "EXDATE:");
+ fputs ("EXDATE:", stream);
LLIST_FOREACH (&rev->exc, j)
{
struct excp *exc = LLIST_GET_DATA (j);
date_sec2date_fmt (exc->st, ICALDATEFMT, ical_date);
- (void)fprintf (stream, "%s", ical_date);
+ fprintf (stream, "%s", ical_date);
if (LLIST_NEXT (j))
- (void)fprintf (stream, ",");
+ fputc (',', stream);
else
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
}
}
- (void)fprintf (stream, "SUMMARY:%s\n", rev->mesg);
- (void)fprintf (stream, "END:VEVENT\n");
+ fprintf (stream, "SUMMARY:%s\n", rev->mesg);
+ fputs ("END:VEVENT\n", stream);
}
}
@@ -391,7 +387,7 @@ pcal_dump_event (FILE *stream, long event_date, long event_dur,
char pcal_date[BUFSIZ];
date_sec2date_fmt (event_date, "%b %d", pcal_date);
- (void)fprintf (stream, "%s %s\n", pcal_date, event_mesg);
+ fprintf (stream, "%s %s\n", pcal_date, event_mesg);
}
/* Format and dump appointment data to a pcal formatted file. */
@@ -404,8 +400,8 @@ pcal_dump_apoint (FILE *stream, long apoint_date, long apoint_dur,
date_sec2date_fmt (apoint_date, "%b %d", pcal_date);
date_sec2date_fmt (apoint_date, "%R", pcal_beg);
date_sec2date_fmt (apoint_date + apoint_dur, "%R", pcal_end);
- (void)fprintf (stream, "%s ", pcal_date);
- (void)fprintf (stream, "(%s -> %s) %s\n", pcal_beg, pcal_end, apoint_mesg);
+ fprintf (stream, "%s ", pcal_date);
+ fprintf (stream, "(%s -> %s) %s\n", pcal_beg, pcal_end, apoint_mesg);
}
static void
@@ -414,11 +410,10 @@ pcal_export_recur_events (FILE *stream)
llist_item_t *i;
char pcal_date[BUFSIZ];
- (void)fprintf (stream, "\n# =============");
- (void)fprintf (stream, "\n# Recur. Events");
- (void)fprintf (stream, "\n# =============\n");
- (void)fprintf (stream,
- "# (pcal does not support from..until dates specification\n");
+ fputs ("\n# =============", stream);
+ fputs ("\n# Recur. Events", stream);
+ fputs ("\n# =============\n", stream);
+ fputs ("# (pcal does not support from..until dates specification\n", stream);
LLIST_FOREACH (&recur_elist, i)
{
@@ -429,23 +424,22 @@ pcal_export_recur_events (FILE *stream)
{
case RECUR_DAILY:
date_sec2date_fmt (rev->day, "%b %d", pcal_date);
- (void)fprintf (stream, "all day on_or_after %s %s\n",
- pcal_date, rev->mesg);
+ fprintf (stream, "all day on_or_after %s %s\n", pcal_date,
+ rev->mesg);
break;
case RECUR_WEEKLY:
date_sec2date_fmt (rev->day, "%a", pcal_date);
- (void)fprintf (stream, "all %s on_or_after ", pcal_date);
+ fprintf (stream, "all %s on_or_after ", pcal_date);
date_sec2date_fmt (rev->day, "%b %d", pcal_date);
- (void)fprintf (stream, "%s %s\n", pcal_date, rev->mesg);
+ fprintf (stream, "%s %s\n", pcal_date, rev->mesg);
break;
case RECUR_MONTHLY:
date_sec2date_fmt (rev->day, "%d", pcal_date);
- (void)fprintf (stream, "day on all %s %s\n", pcal_date,
- rev->mesg);
+ fprintf (stream, "day on all %s %s\n", pcal_date, rev->mesg);
break;
case RECUR_YEARLY:
date_sec2date_fmt (rev->day, "%b %d", pcal_date);
- (void)fprintf (stream, "%s %s\n", pcal_date, rev->mesg);
+ fprintf (stream, "%s %s\n", pcal_date, rev->mesg);
break;
default:
EXIT (_("incoherent repetition type"));
@@ -474,10 +468,10 @@ ical_export_events (FILE *stream)
{
struct event *ev = LLIST_TS_GET_DATA (i);
date_sec2date_fmt (ev->day, ICALDATEFMT, ical_date);
- (void)fprintf (stream, "BEGIN:VEVENT\n");
- (void)fprintf (stream, "DTSTART:%s\n", ical_date);
- (void)fprintf (stream, "SUMMARY:%s\n", ev->mesg);
- (void)fprintf (stream, "END:VEVENT\n");
+ fputs ("BEGIN:VEVENT\n", stream);
+ fprintf (stream, "DTSTART:%s\n", ical_date);
+ fprintf (stream, "SUMMARY:%s\n", ev->mesg);
+ fputs ("END:VEVENT\n", stream);
}
}
@@ -486,13 +480,13 @@ pcal_export_events (FILE *stream)
{
llist_item_t *i;
- (void)fprintf (stream, "\n# ======\n# Events\n# ======\n");
+ fputs ("\n# ======\n# Events\n# ======\n", stream);
LLIST_FOREACH (&eventlist, i)
{
struct event *ev = LLIST_TS_GET_DATA (i);
pcal_dump_event (stream, ev->day, 0, ev->mesg);
}
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
}
/* Export recurrent appointments. */
@@ -509,40 +503,40 @@ ical_export_recur_apoints (FILE *stream)
struct recur_apoint *rapt = LLIST_TS_GET_DATA (i);
date_sec2date_fmt (rapt->start, ICALDATETIMEFMT, ical_datetime);
- (void)fprintf (stream, "BEGIN:VEVENT\n");
- (void)fprintf (stream, "DTSTART:%s\n", ical_datetime);
- (void)fprintf (stream, "DURATION:PT0H0M%ldS\n", rapt->dur);
- (void)fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d",
- ical_recur_type[rapt->rpt->type], rapt->rpt->freq);
+ fputs ("BEGIN:VEVENT\n", stream);
+ fprintf (stream, "DTSTART:%s\n", ical_datetime);
+ fprintf (stream, "DURATION:PT0H0M%ldS\n", rapt->dur);
+ fprintf (stream, "RRULE:FREQ=%s;INTERVAL=%d",
+ ical_recur_type[rapt->rpt->type], rapt->rpt->freq);
if (rapt->rpt->until != 0)
{
date_sec2date_fmt (rapt->rpt->until + HOURINSEC, ICALDATEFMT,
ical_date);
- (void)fprintf (stream, ";UNTIL=%s\n", ical_date);
+ fprintf (stream, ";UNTIL=%s\n", ical_date);
}
else
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
if (LLIST_FIRST (&rapt->exc))
{
- (void)fprintf (stream, "EXDATE:");
+ fputs ("EXDATE:", stream);
LLIST_FOREACH (&rapt->exc, j)
{
struct excp *exc = LLIST_GET_DATA (j);
date_sec2date_fmt (exc->st, ICALDATEFMT, ical_date);
- (void)fprintf (stream, "%s", ical_date);
+ fprintf (stream, "%s", ical_date);
if (LLIST_NEXT (j))
- (void)fprintf (stream, ",");
+ fputc (',', stream);
else
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
}
}
- (void)fprintf (stream, "SUMMARY:%s\n", rapt->mesg);
+ fprintf (stream, "SUMMARY:%s\n", rapt->mesg);
if (rapt->state & APOINT_NOTIFY)
ical_export_valarm (stream);
- (void)fprintf (stream, "END:VEVENT\n");
+ fputs ("END:VEVENT\n", stream);
}
LLIST_TS_UNLOCK (&recur_alist_p);
}
@@ -553,11 +547,10 @@ pcal_export_recur_apoints (FILE *stream)
llist_item_t *i;
char pcal_date[BUFSIZ], pcal_beg[BUFSIZ], pcal_end[BUFSIZ];
- (void)fprintf (stream, "\n# ==============");
- (void)fprintf (stream, "\n# Recur. Apoints");
- (void)fprintf (stream, "\n# ==============\n");
- (void)fprintf (stream,
- "# (pcal does not support from..until dates specification\n");
+ fputs ("\n# ==============", stream);
+ fputs ("\n# Recur. Apoints", stream);
+ fputs ("\n# ==============\n", stream);
+ fputs ("# (pcal does not support from..until dates specification\n", stream);
LLIST_TS_FOREACH (&recur_alist_p, i)
{
@@ -571,25 +564,25 @@ pcal_export_recur_apoints (FILE *stream)
{
case RECUR_DAILY:
date_sec2date_fmt (rapt->start, "%b %d", pcal_date);
- (void)fprintf (stream, "all day on_or_after %s (%s -> %s) %s\n",
- pcal_date, pcal_beg, pcal_end, rapt->mesg);
+ fprintf (stream, "all day on_or_after %s (%s -> %s) %s\n",
+ pcal_date, pcal_beg, pcal_end, rapt->mesg);
break;
case RECUR_WEEKLY:
date_sec2date_fmt (rapt->start, "%a", pcal_date);
- (void)fprintf (stream, "all %s on_or_after ", pcal_date);
+ fprintf (stream, "all %s on_or_after ", pcal_date);
date_sec2date_fmt (rapt->start, "%b %d", pcal_date);
- (void)fprintf (stream, "%s (%s -> %s) %s\n", pcal_date,
- pcal_beg, pcal_end, rapt->mesg);
+ fprintf (stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg,
+ pcal_end, rapt->mesg);
break;
case RECUR_MONTHLY:
date_sec2date_fmt (rapt->start, "%d", pcal_date);
- (void)fprintf (stream, "day on all %s (%s -> %s) %s\n",
- pcal_date, pcal_beg, pcal_end, rapt->mesg);
+ fprintf (stream, "day on all %s (%s -> %s) %s\n", pcal_date,
+ pcal_beg, pcal_end, rapt->mesg);
break;
case RECUR_YEARLY:
date_sec2date_fmt (rapt->start, "%b %d", pcal_date);
- (void)fprintf (stream, "%s (%s -> %s) %s\n", pcal_date,
- pcal_beg, pcal_end, rapt->mesg);
+ fprintf (stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg,
+ pcal_end, rapt->mesg);
break;
default:
EXIT (_("incoherent repetition type"));
@@ -620,17 +613,17 @@ ical_export_apoints (FILE *stream)
{
struct apoint *apt = LLIST_TS_GET_DATA (i);
date_sec2date_fmt (apt->start, ICALDATETIMEFMT, ical_datetime);
- (void)fprintf (stream, "BEGIN:VEVENT\n");
- (void)fprintf (stream, "DTSTART:%s\n", ical_datetime);
- (void)fprintf (stream, "DURATION:P%ldDT%ldH%ldM%ldS\n",
- apt->dur / DAYINSEC,
- (apt->dur / HOURINSEC) % 24,
- (apt->dur / MININSEC) % 60,
- apt->dur % MININSEC);
- (void)fprintf (stream, "SUMMARY:%s\n", apt->mesg);
+ fputs ("BEGIN:VEVENT\n", stream);
+ fprintf (stream, "DTSTART:%s\n", ical_datetime);
+ fprintf (stream, "DURATION:P%ldDT%ldH%ldM%ldS\n",
+ apt->dur / DAYINSEC,
+ (apt->dur / HOURINSEC) % DAYINHOURS,
+ (apt->dur / MININSEC) % HOURINMIN,
+ apt->dur % MININSEC);
+ fprintf (stream, "SUMMARY:%s\n", apt->mesg);
if (apt->state & APOINT_NOTIFY)
ical_export_valarm (stream);
- (void)fprintf (stream, "END:VEVENT\n");
+ fputs ("END:VEVENT\n", stream);
}
LLIST_TS_UNLOCK (&alist_p);
}
@@ -640,7 +633,7 @@ pcal_export_apoints (FILE *stream)
{
llist_item_t *i;
- (void)fprintf (stream, "\n# ============\n# Appointments\n# ============\n");
+ fputs ("\n# ============\n# Appointments\n# ============\n", stream);
LLIST_TS_LOCK (&alist_p);
LLIST_TS_FOREACH (&alist_p, i)
{
@@ -648,7 +641,7 @@ pcal_export_apoints (FILE *stream)
pcal_dump_apoint (stream, apt->start, apt->dur, apt->mesg);
}
LLIST_TS_UNLOCK (&alist_p);
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
}
/* Export todo items. */
@@ -663,10 +656,10 @@ ical_export_todo (FILE *stream)
if (todo->id < 0) /* completed items */
continue;
- (void)fprintf (stream, "BEGIN:VTODO\n");
- (void)fprintf (stream, "PRIORITY:%d\n", todo->id);
- (void)fprintf (stream, "SUMMARY:%s\n", todo->mesg);
- (void)fprintf (stream, "END:VTODO\n");
+ fputs ("BEGIN:VTODO\n", stream);
+ fprintf (stream, "PRIORITY:%d\n", todo->id);
+ fprintf (stream, "SUMMARY:%s\n", todo->mesg);
+ fputs ("END:VTODO\n", stream);
}
}
@@ -675,17 +668,17 @@ pcal_export_todo (FILE *stream)
{
llist_item_t *i;
- (void)fprintf (stream, "#\n# Todos\n#\n");
+ fputs ("#\n# Todos\n#\n", stream);
LLIST_FOREACH (&todolist, i)
{
struct todo *todo = LLIST_TS_GET_DATA (i);
if (todo->id < 0) /* completed items */
continue;
- (void)fprintf (stream, "note all ");
- (void)fprintf (stream, "%d. %s\n", todo->id, todo->mesg);
+ fputs ("note all ", stream);
+ fprintf (stream, "%d. %s\n", todo->id, todo->mesg);
}
- (void)fprintf (stream, "\n");
+ fputc ('\n', stream);
}
/* Append a line to a file. */
@@ -734,15 +727,15 @@ io_init (char *cfile, char *datadir)
if (datadir != NULL)
{
home = datadir;
- (void)snprintf (path_dir, BUFSIZ, "%s", home);
- (void)snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home);
- (void)snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH_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_keys, BUFSIZ, "%s/" KEYS_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);
+ snprintf (path_dir, BUFSIZ, "%s", home);
+ snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home);
+ snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH_NAME, home);
+ snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home);
+ snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home);
+ snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home);
+ snprintf (path_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home);
+ snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home);
+ snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home);
}
else
{
@@ -751,22 +744,22 @@ io_init (char *cfile, char *datadir)
{
home = ".";
}
- (void)snprintf (path_dir, BUFSIZ, "%s/" DIR_NAME, home);
- (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_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_notes, BUFSIZ, "%s/" NOTES_DIR, home);
+ snprintf (path_dir, BUFSIZ, "%s/" DIR_NAME, home);
+ snprintf (path_todo, BUFSIZ, "%s/" TODO_PATH, home);
+ snprintf (path_conf, BUFSIZ, "%s/" CONF_PATH, home);
+ snprintf (path_keys, BUFSIZ, "%s/" KEYS_PATH, home);
+ snprintf (path_cpid, BUFSIZ, "%s/" CPID_PATH, home);
+ snprintf (path_dpid, BUFSIZ, "%s/" DPID_PATH, home);
+ snprintf (path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home);
+ snprintf (path_notes, BUFSIZ, "%s/" NOTES_DIR, home);
if (cfile == NULL)
{
- (void)snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH, home);
+ snprintf (path_apts, BUFSIZ, "%s/" APTS_PATH, home);
}
else
{
- (void)snprintf (apts_file, BUFSIZ, "%s", cfile);
- (void)strncpy (path_apts, apts_file, BUFSIZ);
+ snprintf (apts_file, BUFSIZ, "%s", cfile);
+ strncpy (path_apts, apts_file, BUFSIZ);
/* check if the file exists, otherwise create it */
data_file = fopen (path_apts, "r");
if (data_file == NULL)
@@ -778,7 +771,7 @@ io_init (char *cfile, char *datadir)
{
case 'N':
case 'n':
- printf (_("aborting...\n"));
+ puts (_("aborting...\n"));
exit_calcurse (EXIT_FAILURE);
break;
@@ -793,12 +786,12 @@ io_init (char *cfile, char *datadir)
else
{
printf (_("%s successfully created\n"), path_apts);
- printf (_("starting interactive mode...\n"));
+ puts (_("starting interactive mode...\n"));
}
break;
default:
- printf (_("aborting...\n"));
+ puts (_("aborting...\n"));
exit_calcurse (EXIT_FAILURE);
break;
}
@@ -813,9 +806,10 @@ io_extract_data (char *dst_data, const char *org, int len)
{
int i;
+ for (; *org == ' ' || *org == '\t'; org++);
for (i = 0; i < len - 1; i++)
{
- if (*org == '\n' || *org == '\0')
+ if (*org == '\n' || *org == '\0' || *org == '#')
break;
*dst_data++ = *org++;
}
@@ -842,143 +836,6 @@ display_mark (void)
static pthread_mutex_t io_save_mutex = PTHREAD_MUTEX_INITIALIZER;
-/* Save the user configuration. */
-unsigned
-io_save_conf (struct conf *conf)
-{
- char *config_txt =
- "#\n"
- "# Calcurse configuration file\n#\n"
- "# This file sets the configuration options used by Calcurse. These\n"
- "# options are usually set from within Calcurse. A line beginning with \n"
- "# a space or tab is considered to be a continuation of the previous "
- "line.\n"
- "# For a variable to be unset its value must be blank.\n"
- "# To set a variable to the empty string its value should be \"\".\n"
- "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n";
- char theme_name[BUFSIZ];
- FILE *fp;
-
- if ((fp = fopen (path_conf, "w")) == NULL)
- return 0;
-
- custom_color_theme_name (theme_name);
-
- (void)fprintf (fp, "%s\n", config_txt);
-
- (void)fprintf (fp, "# If this option is set to yes, "
- "automatic save is done when quitting\n");
- (void)fprintf (fp, "auto_save=\n");
- (void)fprintf (fp, "%s\n", (conf->auto_save) ? "yes" : "no");
-
- (void)fprintf (fp, "\n# If not null, perform automatic saves every "
- "'periodic_save' minutes\n");
- (void)fprintf (fp, "periodic_save=\n");
- (void)fprintf (fp, "%d\n", conf->periodic_save);
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "confirmation is required before quitting\n");
- (void)fprintf (fp, "confirm_quit=\n");
- (void)fprintf (fp, "%s\n", (conf->confirm_quit) ? "yes" : "no");
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "confirmation is required before deleting an event\n");
- (void)fprintf (fp, "confirm_delete=\n");
- (void)fprintf (fp, "%s\n", (conf->confirm_delete) ? "yes" : "no");
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "messages about loaded and saved data will not be displayed\n");
- (void)fprintf (fp, "skip_system_dialogs=\n");
- (void)fprintf (fp, "%s\n", (conf->skip_system_dialogs) ? "yes" : "no");
-
- (void)fprintf (fp,
- "\n# If this option is set to yes, progress bar appearing "
- "when saving data will not be displayed\n");
- (void)fprintf (fp, "skip_progress_bar=\n");
- (void)fprintf (fp, "%s\n", (conf->skip_progress_bar) ? "yes" : "no");
-
- (void)fprintf (fp, "\n# Default calendar view (0)monthly (1)weekly:\n");
- (void)fprintf (fp, "calendar_default_view=\n");
- (void)fprintf (fp, "%d\n", calendar_get_view ());
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "monday is the first day of the week, else it is sunday\n");
- (void)fprintf (fp, "week_begins_on_monday=\n");
- (void)fprintf (fp, "%s\n",
- (calendar_week_begins_on_monday ())? "yes" : "no");
-
- (void)fprintf (fp, "\n# This is the color theme used for menus :\n");
- (void)fprintf (fp, "color-theme=\n");
- (void)fprintf (fp, "%s\n", theme_name);
-
- (void)fprintf (fp, "\n# This is the layout of the calendar :\n");
- (void)fprintf (fp, "layout=\n");
- (void)fprintf (fp, "%d\n", wins_layout ());
-
- (void)fprintf (fp, "\n# Width (in percentage, 0 being minimun width) "
- "of the side bar :\n");
- (void)fprintf (fp, "side-bar_width=\n");
- (void)fprintf (fp, "%d\n", wins_sbar_wperc ());
-
- if (ui_mode == UI_CURSES)
- pthread_mutex_lock (&nbar.mutex);
- (void)fprintf (fp,
- "\n# If this option is set to yes, "
- "notify-bar will be displayed :\n");
- (void)fprintf (fp, "notify-bar_show=\n");
- (void)fprintf (fp, "%s\n", (nbar.show) ? "yes" : "no");
-
- (void)fprintf (fp,
- "\n# Format of the date to be displayed inside notify-bar :\n");
- (void)fprintf (fp, "notify-bar_date=\n");
- (void)fprintf (fp, "%s\n", nbar.datefmt);
-
- (void)fprintf (fp,
- "\n# Format of the time to be displayed inside notify-bar :\n");
- (void)fprintf (fp, "notify-bar_clock=\n");
- (void)fprintf (fp, "%s\n", nbar.timefmt);
-
- (void)fprintf (fp,
- "\n# Warn user if he has an appointment within next "
- "'notify-bar_warning' seconds :\n");
- (void)fprintf (fp, "notify-bar_warning=\n");
- (void)fprintf (fp, "%d\n", nbar.cntdwn);
-
- (void)fprintf (fp, "\n# Command used to notify user of "
- "an upcoming appointment :\n");
- (void)fprintf (fp, "notify-bar_command=\n");
- (void)fprintf (fp, "%s\n", nbar.cmd);
-
- (void)fprintf (fp, "\n# Format of the date to be displayed "
- "in non-interactive mode :\n");
- (void)fprintf (fp, "output_datefmt=\n");
- (void)fprintf (fp, "%s\n", conf->output_datefmt);
-
- (void)fprintf (fp, "\n# Format to be used when entering a date "
- "(1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd) "
- "(4)yyyy-mm-dd:\n");
- (void)fprintf (fp, "input_datefmt=\n");
- (void)fprintf (fp, "%d\n", conf->input_datefmt);
-
- if (ui_mode == UI_CURSES)
- pthread_mutex_unlock (&nbar.mutex);
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "calcurse will run in background to get notifications "
- "after exiting\n");
- (void)fprintf (fp, "notify-daemon_enable=\n");
- (void)fprintf (fp, "%s\n", dmon.enable ? "yes" : "no");
-
- (void)fprintf (fp, "\n# If this option is set to yes, "
- "activity will be logged when running in background\n");
- (void)fprintf (fp, "notify-daemon_log=\n");
- (void)fprintf (fp, "%s\n", dmon.log ? "yes" : "no");
-
- file_close (fp, __FILE_POS__);
-
- return 1;
-}
-
/*
* Save the apts data file, which contains the
* appointments first, and then the events.
@@ -1028,10 +885,7 @@ io_save_todo (void)
LLIST_FOREACH (&todolist, i)
{
struct todo *todo = LLIST_TS_GET_DATA (i);
- if (todo->note)
- (void)fprintf (fp, "[%d]>%s %s\n", todo->id, todo->note, todo->mesg);
- else
- (void)fprintf (fp, "[%d] %s\n", todo->id, todo->mesg);
+ todo_write (todo, fp);
}
file_close (fp, __FILE_POS__);
@@ -1055,7 +909,7 @@ io_save_keys (void)
/* Save the calendar data */
void
-io_save_cal (struct conf *conf, enum save_display display)
+io_save_cal (enum save_display display)
{
char *access_pb = _("Problems accessing data file ...");
char *save_success = _("The data files were successfully saved");
@@ -1066,14 +920,14 @@ io_save_cal (struct conf *conf, enum save_display display)
show_bar = 0;
if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_BAR
- && !conf->skip_progress_bar)
+ && !conf.skip_progress_bar)
show_bar = 1;
else if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_MARK)
display_mark ();
if (show_bar)
progress_bar (PROGRESS_BAR_SAVE, PROGRESS_BAR_CONF);
- if (!io_save_conf (conf))
+ if (!config_save ())
ERROR_MSG ("%s", access_pb);
if (show_bar)
@@ -1092,11 +946,11 @@ io_save_cal (struct conf *conf, enum save_display display)
ERROR_MSG ("%s", access_pb);
/* Print a message telling data were saved */
- if (ui_mode == UI_CURSES && !conf->skip_system_dialogs
+ if (ui_mode == UI_CURSES && !conf.skip_system_dialogs
&& display != IO_SAVE_DISPLAY_MARK)
{
status_mesg (save_success, enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
pthread_mutex_unlock (&io_save_mutex);
@@ -1118,7 +972,7 @@ io_load_app (void)
int id = 0;
int freq;
char type, state = 0L;
- char note[NOTESIZ + 1], *notep;
+ char note[MAX_NOTESIZ + 1], *notep;
t = time (NULL);
lt = localtime (&t);
@@ -1132,7 +986,7 @@ io_load_app (void)
c = getc (data_file);
if (c == EOF)
break;
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
/* Read the date first: it is common to both events
* and appointments.
@@ -1156,7 +1010,7 @@ io_load_app (void)
{
EXIT (_("no event nor appointment found"));
}
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
/* Read the remaining informations. */
if (is_appointment)
@@ -1181,38 +1035,38 @@ io_load_app (void)
if (c == '{')
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
is_recursive = 1;
fscanf (data_file, "{ %d%c ", &freq, &type);
c = getc (data_file);
if (c == '}')
{ /* endless recurrent item */
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
fscanf (data_file, "} ");
until.tm_year = 0;
}
else if (c == '-')
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
fscanf (data_file, " -> %u / %u / %u ",
&until.tm_mon, &until.tm_mday, &until.tm_year);
c = getc (data_file);
if (c == '!')
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
recur_exc_scan (&exc, data_file);
c = getc (data_file);
}
else
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
fscanf (data_file, "} ");
}
}
else if (c == '!')
{ // endless item with exceptions
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
recur_exc_scan (&exc, data_file);
c = getc (data_file);
until.tm_year = 0;
@@ -1224,21 +1078,19 @@ io_load_app (void)
}
}
else
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
/* Check if a note is attached to the item. */
c = getc (data_file);
if (c == '>')
{
- (void)fgets (note, NOTESIZ + 1, data_file);
- note[NOTESIZ] = '\0';
+ note_read (note, data_file);
notep = note;
- getc (data_file);
}
else
{
notep = NULL;
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
}
/*
@@ -1250,13 +1102,13 @@ io_load_app (void)
c = getc (data_file);
if (c == '!')
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
fscanf (data_file, " ! ");
state |= APOINT_NOTIFY;
}
else
{
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
fscanf (data_file, " | ");
state = 0L;
}
@@ -1301,13 +1153,13 @@ io_load_todo (void)
char *newline;
int nb_tod = 0;
int c, id;
- char buf[BUFSIZ], e_todo[BUFSIZ], note[NOTESIZ + 1];
+ char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1];
data_file = fopen (path_todo, "r");
if (data_file == NULL)
{
status_mesg (mesg_line1, mesg_line2);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
for (;;)
{
@@ -1323,20 +1175,16 @@ io_load_todo (void)
else
{
id = 9;
- (void)ungetc (c, data_file);
+ ungetc (c, data_file);
}
/* Now read the attached note, if any. */
c = getc (data_file);
if (c == '>')
- {
- (void)fgets (note, NOTESIZ + 1, data_file);
- note[NOTESIZ] = '\0';
- getc (data_file);
- }
+ note_read (note, data_file);
else
note[0] = '\0';
/* Then read todo description. */
- (void)fgets (buf, sizeof buf, data_file);
+ fgets (buf, sizeof buf, data_file);
newline = strchr (buf, '\n');
if (newline)
*newline = '\0';
@@ -1530,8 +1378,8 @@ io_check_dir (char *dir, int *missing)
{
if (errno != EEXIST)
{
- (void)fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"),
- dir, strerror (errno));
+ fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"), dir,
+ strerror (errno));
exit_calcurse (EXIT_FAILURE);
}
}
@@ -1553,7 +1401,7 @@ io_file_exist (char *file)
if ((fd = fopen (file, "r")) == NULL)
return 0;
- (void)fclose (fd);
+ fclose (fd);
return 1;
}
@@ -1570,8 +1418,8 @@ io_check_file (char *file, int *missing)
(*missing)++;
if ((fd = fopen (file, "w")) == NULL)
{
- (void)fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"),
- file, strerror (errno));
+ fprintf (stderr, _("FATAL ERROR: could not create %s: %s\n"), file,
+ strerror (errno));
exit_calcurse (EXIT_FAILURE);
}
file_close (fd, __FILE_POS__);
@@ -1624,18 +1472,18 @@ io_startup_screen (unsigned skip_dialogs, int no_data_file)
if (no_data_file != 0)
{
status_mesg (welcome_mesg, enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
else if (!skip_dialogs)
{
status_mesg (data_mesg, enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
}
/* Export calcurse data. */
void
-io_export_data (enum export_type type, struct conf *conf)
+io_export_data (enum export_type type)
{
FILE *stream;
char *success = _("The data were successfully exported");
@@ -1663,17 +1511,17 @@ io_export_data (enum export_type type, struct conf *conf)
cb_export_header[type] (stream);
- if (!conf->skip_progress_bar && ui_mode == UI_CURSES)
+ if (!conf.skip_progress_bar && ui_mode == UI_CURSES)
progress_bar (PROGRESS_BAR_EXPORT, PROGRESS_BAR_EXPORT_EVENTS);
cb_export_recur_events[type] (stream);
cb_export_events[type] (stream);
- if (!conf->skip_progress_bar && ui_mode == UI_CURSES)
+ if (!conf.skip_progress_bar && ui_mode == UI_CURSES)
progress_bar (PROGRESS_BAR_EXPORT, PROGRESS_BAR_EXPORT_APOINTS);
cb_export_recur_apoints[type] (stream);
cb_export_apoints[type] (stream);
- if (!conf->skip_progress_bar && ui_mode == UI_CURSES)
+ if (!conf.skip_progress_bar && ui_mode == UI_CURSES)
progress_bar (PROGRESS_BAR_EXPORT, PROGRESS_BAR_EXPORT_TODO);
cb_export_todo[type] (stream);
@@ -1682,10 +1530,10 @@ io_export_data (enum export_type type, struct conf *conf)
if (stream != stdout)
file_close (stream, __FILE_POS__);
- if (!conf->skip_system_dialogs && ui_mode == UI_CURSES)
+ if (!conf.skip_system_dialogs && ui_mode == UI_CURSES)
{
status_mesg (success, enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
}
@@ -1734,7 +1582,7 @@ ical_log_init (FILE *log, float version)
"+-------------------------------------------------------------------+\n\n";
if (log)
- (void)fprintf (log, header, version);
+ fprintf (log, header, version);
}
/*
@@ -1750,7 +1598,7 @@ ical_log (FILE *log, ical_types_e type, unsigned lineno, char *msg)
RETURN_IF (type < 0 || type >= ICAL_TYPES, _("unknown ical type"));
if (log)
- (void)fprintf (log, "%s [%d]: %s\n", typestr[type], lineno, msg);
+ fprintf (log, "%s [%d]: %s\n", typestr[type], lineno, msg);
}
static void
@@ -1758,7 +1606,7 @@ ical_store_todo (int priority, char *mesg, char *note)
{
todo_add (mesg, priority, note);
mem_free (mesg);
- erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+ erase_note (&note);
}
static void
@@ -1790,7 +1638,7 @@ ical_store_event (char *mesg, char *note, long day, long end, ical_rpt_t *rpt,
event_new (mesg, note, day, EVENTID);
}
mem_free (mesg);
- erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+ erase_note (&note);
}
static void
@@ -1812,7 +1660,7 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
apoint_new (mesg, note, start, dur, state);
}
mem_free (mesg);
- erase_note (&note, ERASE_FORCE_KEEP_NOTE);
+ erase_note (&note);
}
/*
@@ -2297,7 +2145,7 @@ ical_read_exdate (llist_t *exc, FILE *log, char *exstr, unsigned *noskipped,
char buf[BUFSIZ];
const int buflen = q - p;
- (void)strncpy (buf, p, buflen);
+ strncpy (buf, p, buflen);
buf[buflen] = '\0';
date = ical_datetime2long (buf, NULL);
ical_add_exc (exc, date);
@@ -2319,43 +2167,37 @@ static char *
ical_read_note (char *line, unsigned *noskipped, ical_vevent_e item_type,
const int itemline, FILE *log)
{
- char *p, *notestr, *notename, fullnotename[BUFSIZ];
+ char *sha1 = mem_malloc (SHA1_DIGESTLEN * 2 + 1);
+ char *p, *notestr, fullnotename[BUFSIZ];
FILE *fdo;
if ((p = strchr (line, ':')) != NULL)
{
- notename = new_tempfile (path_notes, NOTESIZ);
- EXIT_IF (notename == NULL,
- _("Warning: could not create new note file to store "
- "description. Aborting...\n"));
- (void)snprintf (fullnotename, BUFSIZ, "%s%s", path_notes, notename);
- fdo = fopen (fullnotename, "w");
- EXIT_IF (fdo == NULL, _("Warning: could not open %s, Aborting..."),
- fullnotename);
p++;
notestr = ical_unformat_line (p);
if (notestr == NULL)
{
ical_log (log, item_type, itemline,
_("could not get entire item description."));
- file_close (fdo, __FILE_POS__);
- erase_note (&notename, ERASE_FORCE);
(*noskipped)++;
return NULL;
}
else if (strlen (notestr) == 0)
{
- file_close (fdo, __FILE_POS__);
- erase_note (&notename, ERASE_FORCE);
mem_free (notestr);
return NULL;
}
else
{
- (void)fprintf (fdo, "%s", notestr);
+ sha1_digest (notestr, sha1);
+ snprintf (fullnotename, BUFSIZ, "%s%s", path_notes, sha1);
+ fdo = fopen (fullnotename, "w");
+ EXIT_IF (fdo == NULL, _("Warning: could not open %s, Aborting..."),
+ fullnotename);
+ fprintf (fdo, "%s", notestr);
file_close (fdo, __FILE_POS__);
mem_free (notestr);
- return notename;
+ return sha1;
}
}
else
@@ -2701,7 +2543,7 @@ get_import_stream (enum export_type type)
if (stream == NULL)
{
status_mesg (wrong_file, press_enter);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
}
mem_free (stream_name);
@@ -2716,15 +2558,12 @@ get_import_stream (enum export_type type)
* and is cleared at the end.
*/
void
-io_import_data (enum import_type type, struct conf *conf, char *stream_name)
+io_import_data (enum import_type type, char *stream_name)
{
const struct string vevent = STRING_BUILD ("BEGIN:VEVENT");
const struct string vtodo = STRING_BUILD ("BEGIN:VTODO");
char *proc_report = _("Import process report: %04d lines read ");
- char *lines_stats =
- _("%d apps / %d events / %d todos / %d skipped ");
- char *lines_stats_interactive =
- _("%d apps / %d events / %d todos / %d skipped ([ENTER] to continue)");
+ char stats_str[4][BUFSIZ];
char buf[BUFSIZ], lstore[BUFSIZ];
FILE *stream = NULL;
struct io_file *log;
@@ -2787,26 +2626,33 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
if (stream != stdin)
file_close (stream, __FILE_POS__);
+ snprintf (stats_str[0], BUFSIZ,
+ ngettext ("%d app", "%d apps", stats.apoints), stats.apoints);
+ snprintf (stats_str[1], BUFSIZ,
+ ngettext ("%d event", "%d events", stats.events), stats.events);
+ snprintf (stats_str[2], BUFSIZ,
+ ngettext ("%d todo", "%d todos", stats.todos), stats.todos);
+ snprintf (stats_str[3], BUFSIZ, _("%d skipped"), stats.skipped);
+
/* Update the number of todo items. */
todo_set_nb (todo_nb () + stats.todos);
- if (ui_mode == UI_CURSES && !conf->skip_system_dialogs)
+ if (ui_mode == UI_CURSES && !conf.skip_system_dialogs)
{
char read[BUFSIZ], stat[BUFSIZ];
- (void)snprintf (read, BUFSIZ, proc_report, stats.lines);
- (void)snprintf (stat, BUFSIZ, lines_stats_interactive, stats.apoints,
- stats.events, stats.todos, stats.skipped);
+ snprintf (read, BUFSIZ, proc_report, stats.lines);
+ snprintf (stat, BUFSIZ, "%s / %s / %s / %s (%s)", stats_str[0],
+ stats_str[1], stats_str[2], stats_str[3],
+ _("Press [ENTER] to continue"));
status_mesg (read, stat);
- (void)wgetch (win[STA].p);
+ wgetch (win[STA].p);
}
else if (ui_mode == UI_CMDLINE)
{
printf (proc_report, stats.lines);
- printf ("\n");
- printf (lines_stats, stats.apoints, stats.events, stats.todos,
- stats.skipped);
- printf ("\n");
+ printf ("\n%s / %s / %s / %s\n", stats_str[0], stats_str[1],
+ stats_str[2], stats_str[3]);
}
/* User has the choice to look at the log file if some items could not be
@@ -2817,7 +2663,7 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
{
char *view_log = _("Some items could not be imported, see log file ?");
- io_log_display (log, view_log, conf->pager);
+ io_log_display (log, view_log, conf.pager);
}
io_log_free (log);
}
@@ -2830,13 +2676,13 @@ io_log_init (void)
struct io_file *log;
snprintf (logprefix, BUFSIZ, "%s/calcurse_log.", get_tempdir ());
- logname = new_tempfile (logprefix, NOTESIZ);
+ logname = new_tempfile (logprefix, TMPEXTSIZ);
RETVAL_IF (logname == NULL, 0,
_("Warning: could not create temporary log file, Aborting..."));
log = mem_malloc (sizeof (struct io_file));
RETVAL_IF (log == NULL, 0,
_("Warning: could not open temporary log file, Aborting..."));
- (void)snprintf (log->name, sizeof (log->name), "%s%s", logprefix, logname);
+ snprintf (log->name, sizeof (log->name), "%s%s", logprefix, logname);
mem_free (logname);
log->fd = fopen (log->name, "w");
if (log->fd == NULL)
@@ -2853,7 +2699,7 @@ void
io_log_print (struct io_file *log, int line, char *msg)
{
if (log && log->fd)
- (void)fprintf (log->fd, "line %d: %s\n", line, msg);
+ fprintf (log->fd, "line %d: %s\n", line, msg);
}
void
@@ -2871,8 +2717,8 @@ io_log_display (struct io_file *log, char *msg, char *pager)
{
char cmd[BUFSIZ];
- (void)snprintf (cmd, BUFSIZ, "%s %s", pager, log->name);
- (void)system (cmd);
+ snprintf (cmd, BUFSIZ, "%s %s", pager, log->name);
+ system (cmd);
}
}
else
@@ -2908,25 +2754,23 @@ static pthread_t io_t_psave;
static void *
io_psave_thread (void *arg)
{
- struct conf *config;
int delay;
- config = (struct conf *)arg;
- delay = config->periodic_save;
+ delay = conf.periodic_save;
EXIT_IF (delay < 0, _("Invalid delay"));
for (;;)
{
- (void)sleep (delay * MININSEC);
- io_save_cal (config, IO_SAVE_DISPLAY_MARK);
+ sleep (delay * MININSEC);
+ io_save_cal (IO_SAVE_DISPLAY_MARK);
}
}
/* Launch the thread which handles periodic saves. */
void
-io_start_psave_thread (struct conf *conf)
+io_start_psave_thread (void)
{
- pthread_create (&io_t_psave, NULL, io_psave_thread, (void *)conf);
+ pthread_create (&io_t_psave, NULL, io_psave_thread, NULL);
}
/* Stop periodic data saves. */
@@ -2972,12 +2816,12 @@ io_set_lock (void)
if (lock != NULL)
{
- (void)fprintf (stderr,
- _("\nWARNING: it seems that another calcurse instance is "
- "already running.\n"
- "If this is not the case, please remove the following "
- "lock file: \n\"%s\"\n"
- "and restart calcurse.\n"), path_cpid);
+ fprintf (stderr,
+ _("\nWARNING: it seems that another calcurse instance is "
+ "already running.\n"
+ "If this is not the case, please remove the following "
+ "lock file: \n\"%s\"\n"
+ "and restart calcurse.\n"), path_cpid);
exit (EXIT_FAILURE);
}
else
@@ -3030,7 +2874,7 @@ io_get_pid (char *file)
if (fscanf (fp, "%u", &pid) != 1)
return 0;
- (void)fclose (fp);
+ fclose (fp);
return pid;
}
@@ -3059,3 +2903,36 @@ io_file_is_empty (char *file)
return -1;
}
+
+/*
+ * Copy an existing file to a new location.
+ */
+int
+io_file_cp (const char *src, const char *dst)
+{
+ FILE *fp_src, *fp_dst;
+ char *buffer[BUFSIZ];
+ unsigned int bytes_read;
+
+ if (!(fp_src = fopen (src, "rb")))
+ return 0;
+ if (!(fp_dst = fopen (dst, "wb")))
+ return 0;
+
+ while (!feof (fp_src))
+ {
+ bytes_read = fread (buffer, 1, BUFSIZ, fp_src);
+ if (bytes_read > 0)
+ {
+ if (fwrite (buffer, 1, bytes_read, fp_dst) != bytes_read)
+ return 0;
+ }
+ else
+ return 0;
+ }
+
+ fclose (fp_dst);
+ fclose (fp_src);
+
+ return 1;
+}