From 2fe7a36aab8c6c934550b2b8dc2074c1af23859a Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Tue, 2 Aug 2011 21:42:10 +0200 Subject: Accept variable length note names Read up to the first blank in note_read() instead of assuming a fixed-width note file name. Accept everything up to 40 characters (which is the length of a SHA1 hash in hexadecimal representation). Signed-off-by: Lukas Fleischer --- src/calcurse.h | 3 ++- src/io.c | 8 ++++---- src/note.c | 17 ++++++++++++++--- src/todo.c | 4 ++-- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/calcurse.h b/src/calcurse.h index 8aa5c4a..4f0dc20 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -109,7 +109,8 @@ #define ATTR_HIGHEST 6 #define STATUSHEIGHT 2 -#define NOTESIZ 6 +#define MAX_NOTESIZ 40 +#define TMPEXTSIZ 6 /* Format for appointment hours is: HH:MM */ #define HRMIN_SIZE 6 diff --git a/src/io.c b/src/io.c index 31b4097..feaeb0a 100644 --- a/src/io.c +++ b/src/io.c @@ -1114,7 +1114,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); @@ -1295,7 +1295,7 @@ 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) @@ -2313,7 +2313,7 @@ ical_read_note (char *line, unsigned *noskipped, ical_vevent_e item_type, if ((p = strchr (line, ':')) != NULL) { - notename = new_tempfile (path_notes, NOTESIZ); + notename = new_tempfile (path_notes, TMPEXTSIZ); EXIT_IF (notename == NULL, _("Warning: could not create new note file to store " "description. Aborting...\n")); @@ -2818,7 +2818,7 @@ 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)); diff --git a/src/note.c b/src/note.c index 91aae66..c8aa1ec 100644 --- a/src/note.c +++ b/src/note.c @@ -93,7 +93,18 @@ erase_note (char **note, enum eraseflg flag) void note_read (char *buffer, FILE *fp) { - (void)fgets (buffer, NOTESIZ + 1, fp); - buffer[NOTESIZ] = '\0'; - getc (fp); + int i; + + for (i = 0; i < MAX_NOTESIZ; i++) + { + buffer[i] = getc (fp); + if (buffer[i] == ' ') + { + buffer[i] = '\0'; + return; + } + } + + while (getc (fp) != ' '); + buffer[MAX_NOTESIZ] = '\0'; } diff --git a/src/todo.c b/src/todo.c index c489f51..3c0d1ba 100644 --- a/src/todo.c +++ b/src/todo.c @@ -334,14 +334,14 @@ todo_chg_priority (int action) struct todo *backup; char backup_mesg[BUFSIZ]; int backup_id; - char backup_note[NOTESIZ + 1]; + char backup_note[MAX_NOTESIZ + 1]; int do_chg = 1; backup = todo_get_item (hilt); (void)strncpy (backup_mesg, backup->mesg, strlen (backup->mesg) + 1); backup_id = backup->id; if (backup->note) - (void)strncpy (backup_note, backup->note, NOTESIZ + 1); + (void)strncpy (backup_note, backup->note, MAX_NOTESIZ + 1); else backup_note[0] = '\0'; switch (action) -- cgit v1.2.3-54-g00ecf