summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Fix up strncat() usageLukas Fleischer2012-02-184-8/+7
| | | | | | | | | | | | | | | The last argument to strncat() should not be the total buffer length; it should be the space remaining: The strncat() function shall append not more than n bytes (a null byte and bytes that follow it are not appended) from the array pointed to by s2 to the end of the string pointed to by s1. The initial byte of s2 overwrites the null byte at the end of s1. A terminating null byte is always appended to the result. This patch fixes a couple of potential buffer overflow vulnerabilities. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/io.c: Use fork_exec() instead of system()Lukas Fleischer2012-02-181-3/+4
| | | | | | | Speeds up execution, prevents failures when pager or log file contains spaces, fixes a warning seen with "-Wunused-result". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Don't chomp on error in ical_readline_init()Lukas Fleischer2012-02-181-4/+6
| | | | | | | Skip the newline check if fgets() returns a NULL string. Fixes another warning seen with "-Wunused-result". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Add stricter syntax checking to io_load_*()Lukas Fleischer2012-02-181-33/+41
| | | | | | | | | | Be more restrictive with what we allow in data files and bail out if a line doesn't conform to our specification, especially in regard to separators. This prevents unexpected behavior when a data file is edited manually. As a bonus, this fixes a whole pile of compiler warnings previously seen with "-Wunused-result". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Trap fgets() failure in *_scan()Lukas Fleischer2012-02-183-4/+12
| | | | | | | | Ensure we don't read arbitrary data when fgets() returns a NULL string (meaning that either the EOF is encountered or an error occurred). This also fixes a couple of compiler warnings seen with "-Wunused-result". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Add missing configuration variablesLukas Fleischer2012-02-171-15/+42
| | | | | | | Append missing configuration variables to the end of our configuration file instead of keeping them undefined. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Revamp configuration file parsingLukas Fleischer2012-02-171-130/+81
| | | | | | | | | | | | | | | | | | | | | Reintroduce a map for configuration variable parsing. We use a different approach this time: Each map entry contains * a key, * a callback that can be used to parse that variable, * a callback that can be used to serialize that variable and * a target buffer that the parsed value is written to/read from. Commits 4f4891bdb88410ae04225f3d6acfa31d73a3901a and 6377582841118688aee13aff98c9216403582e45 show that we are pretty undecided on using a map or not. However, now that we use parser and serialization wrappers for every variable, having a central map makes everything much cleaner. The runtimes of config_load() and config_save() are slightly increased (by a constant factor). This will also allow us for implementing proper detection of missing configuration variables in the configuration file. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Add more parser/serialization wrappersLukas Fleischer2012-02-171-67/+133
| | | | | | | | | | | | Add convenience parser/serialization wrappers for all configuration variables that don't use the default config_parse_*() and config_serialize_*() helpers yet. This is nothing but a dirty hack and should be refactored later (e.g. by separating configuration variable parsing and validation or by adding optional validation functions). It makes it easier to switch to a more generic configuration parser, though. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Introduce config_parse_str()Lukas Fleischer2012-02-171-13/+14
| | | | | | Be consistent with other parser helpers and with config_serialize_str(). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Keep formatting and commentsLukas Fleischer2012-02-171-131/+46
| | | | | | | | | | | | | Switch to using the new config_file_walk() helper in config_save() and update existing configuration variables instead of blindly overwriting the existing configuration file. Note: This breaks configuration setting storage if one or more settings are missing in the configuration file. We need to refactor our parser and serialization routines another time before this can be implemented properly, though. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Add serialization helperLukas Fleischer2012-02-171-53/+184
| | | | | | | Add config_serialize_conf() which can be used to serialize the value of a configuration setting (counterpart to config_parse_conf()). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Add junk callback to config_file_walk()Lukas Fleischer2012-02-161-3/+9
| | | | | | | | | | This can be used if we care about junk, such as empty lines and comments. Currently unused since we skip these when parsing configuration settings. This makes sense if we want to make slight modifications to the configuration file without losing formatting and comments, though. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/config.c: Make config file reading more flexibleLukas Fleischer2012-02-161-11/+27
| | | | | | | | | | | | | | This adds one level of abstraction to config_load() by splitting out the actual reading routine and the variable setter into two separate functions. config_file_walk() can be used to read the configuration file, strip comments and pass every key/value pair to a callback. config_load_cb() is the new callback used in config_load(). Rationale: It makes sense to reuse the key/value parser to allow for a much saner config_save() routine that changes single values only instead of rewriting (and overwriting) the whole configuration file every time. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/llist.c: Bail out early on negative indexesLukas Fleischer2012-02-161-1/+7
| | | | | | | Make sure we don't return bogus list elements if negative indexes are used in llist_{,find_}nth(). Bail out early and return NULL instead. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/calendar.c: Fix range check in calendar_move()Lukas Fleischer2012-01-211-12/+14
| | | | | | | | | | | | | | | We added count prefix support to motion commands in commit 59e006e56d9f893506af56a4ca114fe53b537e49 but obviously forgot to check whether the range checks in calendar_move() still work correctly. Refactor out range checks and replace them by a single check that is performed *after* the new date is computed, but before we assign the new value to the actual selected date. This ensures we won't have to bother about these again when changing/adding functionality in/to calendar_move(), while keeping performance (date_change() is pretty cheap and range violations are corner cases anyway). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Split note file generation into separate functionLukas Fleischer2012-01-173-12/+23
| | | | | | | We currently use this in one place only but might reuse this a couple of times later (when migrating to libical). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Break out different import/export formatsLukas Fleischer2012-01-075-1501/+1598
| | | | | | | | | | | | | | | | | | | | | | Extract iCal and pcal import/export routines into separate files. This reduces complexity of the super huge "io.c" source file and makes it easier to follow changes that affect the iCal and pcal routines only (commits affecting both formats are very uncommon). Before: $ wc -l src/io.c 2938 src/io.c After: $ wc -l src/{io,ical,pcal}.c 1445 src/io.c 1263 src/ical.c 317 src/pcal.c 3025 total Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/apoint.c: Update in-notify-bar help for new duration syntaxBaptiste Jonglez2012-01-071-2/+2
| | | | | Signed-off-by: Baptiste Jonglez <baptiste@jonglez.org> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/apoint.c: Fix a length bug introduced by new duration formatBaptiste Jonglez2012-01-071-1/+1
| | | | | | | | | | | | | | | | Commit 4ff3bb9d introduced a new format for parsing durations, thus allowing a larger string to be retrieved from user input. However, the string used is still declared with the old length, leading to crashes when compiling with stack-smashing protection features (the default on Archlinux). Inputting a duration string of more than 8 characters (such as "+1d11h11m") would crash calcurse with a *** stack smashing detected *** message. Using a larger string from the start fixes the bug. Signed-off-by: Baptiste Jonglez <baptiste@jonglez.org> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Merge branch 'maint'Lukas Fleischer2011-12-161-1/+5
|\ | | | | | | | | Conflicts: src/io.c
| * Format "DURATION" field properly on ical exportJérôme Pinot2011-12-161-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | Use days/hours/minutes/seconds instead of seconds in the DURATION field. It fixes interaction with other softwares like phpicalendar. Lukas: Remove use of dur-week. RFC 5545 states that you cannot use this in conjunction with dur-day. Also, fix formatting and use proper constants. Signed-off-by: Jerome Pinot <ngc891@gmail.com> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/config.c: Drop support for legacy color schemesLukas Fleischer2011-12-121-85/+36
| | | | | | | | | | | | | | | | | | We used different naming schemes in versions prior to 1.8. Given that calcurse 1.8 has been released more than 4.5 years ago, remove the legacy code that still handles these. Users upgrading from <1.8 to 3.0.0 might need to convert the appropriate config file variable manually. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/utils.c: Mark is_all_digit() parameter constLukas Fleischer2011-12-092-2/+2
| | | | | | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/config.c: Remove map for configuration variablesLukas Fleischer2011-12-091-169/+114
| | | | | | | | | | | | | | | | | | | | This patch kind of reverts what we did in commit 6377582841118688aee13aff98c9216403582e45. We were a tad off-base there since using a map doesn't improve maintainability, really. Using strcmp() at a central location seems perfectly fine and doesn't have the overhead of the map scanning algorithm. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Extract config file handlers into a separate fileLukas Fleischer2011-12-098-550/+594
| | | | | | | | | | | | | | | | We used custom_load_conf() to load the configuration file and io_save_conf() to save configuration. Move these functions, including all helpers, to a central location. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/day.c: Nuke unneeded variableLukas Fleischer2011-12-091-4/+1
| | | | | | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/todo.c: Remove several unneeded variablesLukas Fleischer2011-12-091-19/+14
| | | | | | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/apoint.c: Remove several unneeded variablesLukas Fleischer2011-12-051-36/+30
| | | | | | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/utils.c: Support escape sequences in format stringsLukas Fleischer2011-11-221-0/+55
| | | | | | | | | | | | | | We support all simple escape sequences listed in the ANSI C standard, plus "\0" to allow for printing null characters. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Merge branch 'maint'Lukas Fleischer2011-11-151-2/+5
|\|
| * src/io.c: Avoid use of memcpy()Lukas Fleischer2011-11-111-2/+4
| | | | | | | | | | | | | | | | Use strncpy() and a proper limit, which ensures we never read more characters than the buffer can hold. Also, ensure we always null-terminate strings here. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
| * src/io.c: Null-terminate the ical_readline() bufferLukas Fleischer2011-11-111-0/+1
| | | | | | | | | | | | | | Ensure we always return with a null-terminated buffer, even if we read more than BUFSIZ characters. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/utils.c: Support printing '%' in format stringsLukas Fleischer2011-11-141-0/+9
| | | | | | | | | | | | This allows using "%%" to print the '%' character. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/args.c: Remove obsolete "-N" flagLukas Fleischer2011-11-141-4/+0
| | | | | | | | | | | | This is superseded by custom format strings. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/args.c: Allow for specifying custom format stringsLukas Fleischer2011-11-141-23/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | Following long command line options can be used to override the default format strings: * --format-apt * --format-recur-apt * --format-event * --format-recur-event * --format-todo Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | print_*(): Add format specifier to print notesLukas Fleischer2011-11-142-70/+70
| | | | | | | | | | | | | | | | | | | | | | | | * Move print_notefile() from "src/args.c" to "src/utils.c". * Add a "%N" format specifier to print_*(). This invokes print_notefile() and prints the content of an item's note file. * src/args.c: Use the new format specifier instead of print_notefile() everywhere. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Use a dynamic method to print todo items to stdoutLukas Fleischer2011-11-143-13/+42
| | | | | | | | | | | | | | | | | | | | | | | | This goes in line with the other commits adding print_*() support. Following format specifiers are allowed: * p: Print the priority of the item * m: Print the description of the item * n: Print the name of the note file belonging to the item Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | src/apoint.c: Remove apoint_recur_s2apoint_s()Lukas Fleischer2011-11-142-17/+0
| | | | | | | | | | | | | | This one is hackish, obsolete and no longer used by any other function. Drop it! Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Use a dynamic method to print recurrent items to stdoutLukas Fleischer2011-11-143-7/+33
| | | | | | | | | | | | | | | | | | Add print_recur_apoint() and print_recur_event() helper functions to print recurrent items to stdout and use them everywhere. Currently, these are only wrapper functions to print_apoint() and print_event() that create temporary, non-recurrent items. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Use a dynamic method to print events to stdoutLukas Fleischer2011-11-143-3/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | Add a flexible helper function print_event() and use it whenever we print events to stdout. This reduces the number of copy-pasted code and eventually allows for specifying custom format strings. Following format specifiers are supported: * m: Print the description of the item * n: Print the name of the note file belonging to the item Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Use a dynamic method to print appointments to stdoutLukas Fleischer2011-11-143-18/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a flexible helper function print_apoint() and use it whenever we print appointments to stdout. This reduces the number of copy-pasted code and eventually allows for specifying custom format strings. Following format specifiers are supported: * s: Print the start time of the appointment as UNIX time stamp * S: Print the start time of the appointment using the "hh:mm" format * d: Print the duration of the appointment in seconds * e: Print the end time of the appointment as UNIX time stamp * E: Print the end time of the appointment using the "hh:mm" format * m: Print the description of the item * n: Print the name of the note file belonging to the item Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Removed unused parameter from apoint_sec2str()Lukas Fleischer2011-11-144-8/+7
| | | | | | | | | | | | This is no longer needed as of commit 2d89d336. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Use a global configuration variableLukas Fleischer2011-11-1411-162/+159
| | | | | | | | | | | | | | This is one of the few valid use cases for a global variable. No need to make it pseudo-local and pass it from one function to another. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Merge branch 'maint'Lukas Fleischer2011-11-115-7/+20
|\| | | | | | | | | | | Conflicts: src/calcurse.h src/io.c
| * Cleanup joinable threads on terminationLukas Fleischer2011-10-043-3/+12
| | | | | | | | | | | | | | Always invoke pthread_join() when we blow up a thread via pthread_cancel() (avoid zombie threads). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
| * src/io.c: Update todo item count on iCal importLukas Fleischer2011-10-041-0/+3
| | | | | | | | | | | | | | Update the number of todo items when importing an iCal file to prevent some items from being inaccessible. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
| * Do not hardcode paths to the default editor/pagerLukas Fleischer2011-10-042-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use "vi" instead of "/usr/bin/vi" and "less" instead of "/usr/bin/less". Hardcoding absolute paths is a bad idea: $ uname -rsv Linux 3.0-ARCH #1 SMP PREEMPT Tue Aug 30 07:32:23 UTC 2011 $ which less /bin/less The "$PATH" environment variable will almost always have a better idea of where these binaries are located. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Remove parentheses from return statementsLukas Fleischer2011-11-0214-80/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | No reason to use "return (x);" here. Refer to the GNU coding guidelines for details. Created using following semantic patch: @@ expression expr; @@ - return (expr); + return expr; Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Make use of the NULL macroLukas Fleischer2011-11-028-39/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use this constant everywhere when referring to a null pointer instead of casting 0 to various types of pointers. Created using following semantic patch: @@ type type; @@ - (type *)0 + NULL Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Do not cast unused return values to voidLukas Fleischer2011-11-0220-511/+489
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A small style fix that removes all remaining "(void)" casts. Using these isn't encouraged in GNU coding guidelines and doesn't serve a certain purpose, except for satisfying a few static code analysis tools. We already nuked some of these in previous patches, but this semantic patch should fix what's left: @@ identifier func; @@ - (void)func ( + func ( ...); Long lines were re-formatted manually. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>