From 2fe7a36aab8c6c934550b2b8dc2074c1af23859a Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
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 <calcurse@cryptocrack.de>
---
 src/calcurse.h |  3 ++-
 src/io.c       |  8 ++++----
 src/note.c     | 17 ++++++++++++++---
 src/todo.c     |  4 ++--
 4 files changed, 22 insertions(+), 10 deletions(-)

(limited to 'src')

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-70-g09d2