aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2011-08-02 21:42:10 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2011-10-05 12:25:47 +0200
commit2fe7a36aab8c6c934550b2b8dc2074c1af23859a (patch)
tree31fe32a80e1f15d2bfa457b40ba337c849f3e8df
parentbc97d60ef2cacfe79875e6c604bf3f0e6d07fbd9 (diff)
downloadcalcurse-2fe7a36aab8c6c934550b2b8dc2074c1af23859a.tar.gz
calcurse-2fe7a36aab8c6c934550b2b8dc2074c1af23859a.zip
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>
-rw-r--r--src/calcurse.h3
-rw-r--r--src/io.c8
-rw-r--r--src/note.c17
-rw-r--r--src/todo.c4
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)