summaryrefslogtreecommitdiffstats
path: root/src/utils.c
Commit message (Collapse)AuthorAgeFilesLines
* Declare several parameters/variables constantLukas Fleischer2012-05-081-11/+11
| | | | | | | | | | | | Add the "const" keyword to parameters and variables that are never modified. Most of these were spotted by "-Wwrite-strings". We cast the second parameter to execvp() explicitly as it expects a "char *const[]" where it should expect a "const char *const[]" (according to the documentation, this is due to compatibility reasons). This should be changed once we come up with a better solution. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Get rid of "semantic range checks" when parsing durationBaptiste Jonglez2012-05-021-13/+0
| | | | | | | | | | Don't restrict ranges when entering durations. We now accept duration like "+1d42h600m". This might not seem very logical, but it's perfectly valid, and being able to enter "+36h" is useful when you don't want to do the maths yourself. Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Merge "%(start"{,str}")" and "%(end"{,str}")"Lukas Fleischer2012-04-171-21/+13
| | | | | | | | | | | | | Add "default" and "epoch" extended formats for dates. "default" is the same as "%H:%M", "epoch" prints the number of seconds since January 1, 1970. Also, change the semantics of "%(start)" to return dates in default format (same format that "%(startstr)" used to use before this patch). The old "%(start)" behavior can be emulated by using "%(start:epoch)". The same applies to "%(end)" and "%(endstr)". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Support extended date formatsLukas Fleischer2012-04-171-2/+19
| | | | | | | Add support for appending a strftime()-style format string to "%(start)" and "%(end)". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Allow passing extended formatsLukas Fleischer2012-04-171-5/+24
| | | | | | | | | Extended formats can be specified by adding custom format strings to the end of a long format specifier, separated by a colon (":"). This feature is currently unused. Extended format support for several format specifiers will be added in following patches. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Add support for long format specifiersLukas Fleischer2012-04-171-5/+43
| | | | | | | | | | | | | | | | Adds following long format specifiers for each short format specifier: * s: (start) * S: (startstr) * d: (duration) * e: (end) * E: (endstr) * m: (message) * n: (noteid) * N: (note) * p: (priority) Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Break out format specifier parsingLukas Fleischer2012-04-171-24/+72
| | | | | | | Move the format specifier parser to a separate function. This is done in preparation for supporting long format specifiers. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Miscellaneous small code cleanupsLukas Fleischer2012-04-061-3/+10
| | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Mark some more variables/parameters constantLukas Fleischer2012-04-051-1/+1
| | | | | | Fixes a couple of warnings seen with GCC 4.7. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Mark localized string literals constantLukas Fleischer2012-04-051-3/+3
| | | | | | | Translated strings returned by gettext() are statically allocated and shouldn't be modified. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Update copyright rangesLukas Fleischer2012-03-261-1/+1
| | | | | | Add 2012 to the copyright range for all source and documentation files. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Do not strncpy() strings returned by gettext()Lukas Fleischer2012-03-121-4/+5
| | | | | | | | Translated strings returned by gettext() are statically allocated. There's no need to copy them to a buffer, we can use the pointers returned by gettext() instead. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Use strcmp() instead of strncmp()Lukas Fleischer2012-03-121-1/+1
| | | | | | | | | strncmp() isn't intended to be a secure strcmp() replacement, it is designed to be used if you want to compare the first n characters of two strings. Since we always compare character pointers with string literals, switch to using strcmp() everywhere. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Avoid redundant virtual screen updatesLukas Fleischer2012-03-121-2/+0
| | | | | | | | | | Remove some redundant wnoutrefresh() invocations. There's no need to copy a window to the virtual screen unless doupdate() is invoked immediately afterwards. This reduces flicker when browsing in the calendar panel. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Fix POSIX complianceLukas Fleischer2012-02-191-0/+2
| | | | | | | | | | | * "WAIT_MYPGRP" isn't POSIX'ish. Relying on this caused compilation issues in certain environments (e.g. under Cygwin). As a workaround, define "WAIT_MYPGRP" explicitly if it's undefined. * "P_tmpdir" is an XSI extension. Don't try use it if it isn't available. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Mark is_all_digit() parameter constLukas Fleischer2011-12-091-1/+1
| | | | 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>
* 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>
* print_*(): Add format specifier to print notesLukas Fleischer2011-11-141-0/+61
| | | | | | | | | | | | * 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-141-0/+34
| | | | | | | | | | | | 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>
* Use a dynamic method to print recurrent items to stdoutLukas Fleischer2011-11-141-0/+27
| | | | | | | | | 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-141-0/+31
| | | | | | | | | | | | | 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-141-0/+49
| | | | | | | | | | | | | | | | | | 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>
* Remove parentheses from return statementsLukas Fleischer2011-11-021-9/+9
| | | | | | | | | | | | | | 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-021-2/+2
| | | | | | | | | | | | | | | 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-021-9/+9
| | | | | | | | | | | | | | | | | | | | 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>
* Avoid use of printf()/fprintf()Lukas Fleischer2011-11-021-1/+1
| | | | | | | | | | | | | | | | Use one of the following functions where appropriate: * puts() (whenever we print hard coded strings to stdout) * fputs() (whenever we print hard coded strings to a stream) * putchar() (whenever we print a single character to stdout) * fputc() (whenever we print a single character to a stream) * strncpy() (whenever we copy hard coded strings to a buffer) This removes the overhead introduced by the format string parser and reduces the number of false positive C-format strings spotted by xgettext(1)'s heuristics. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Support more powerful duration stringsLukas Fleischer2011-10-061-23/+100
| | | | | | | | | Add support for "1d23h42m"-like duration strings to parse_duration(). Also, switch to using a deterministic finite automaton to parse duration strings, as things tend to get unclear. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Remove check_time()Lukas Fleischer2011-10-061-31/+0
| | | | | | | Now that parse_time() and parse_duration() do all the validation work, this isn't used (nor needed) any longer. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Introduce parse_{time,duration}()Lukas Fleischer2011-10-061-0/+85
| | | | | | | | | These helpers can be used in a fashion similar to parse_date(). In addition to check_time(), parse_time() and parse_duration() support short forms such as "23:" (instead of "23:00") and ":45" (instead of "00:45"). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Mark input string of parse_date() constLukas Fleischer2011-10-061-4/+4
| | | | | | | We don't mess about with the date string here, so it should be declared const. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Do not unlink() note files on note removalLukas Fleischer2011-10-051-4/+4
| | | | | | | | | | Now that we use hash-based note file names, note files should never be unlinked as a note file might be shared. Also, remove the ERASE_FORCE_KEEP_NOTE flag that no longer makes any sense. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Refactor out note functionsLukas Fleischer2011-07-211-18/+0
| | | | | | | | | | * Add new note_edit() and note_view() helper functions. Use these instead of copy-pasted code in *_note_edit(). * Move all note-related functions (note_edit(), note_view(), note_erase()) to a new source file "note.c". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Merge branch 'maint'Lukas Fleischer2011-07-101-0/+15
|\
| * Honor "TMPDIR" environment variableLukas Fleischer2011-07-091-0/+15
| | | | | | | | | | | | | | | | | | Replace all hardcoded paths referring to "/tmp" with a new function that honors the "TMPDIR" environment variable as well as P_tmpdir and uses "/tmp" as a fallback. Thanks-to: Erik Saule <esaule@bmi.osu.edu> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Add press_any_key() functionLukas Fleischer2011-07-051-0/+12
| | | | | | | | | | | | | | Displays "Press any key to continue..." in shell terminal mode and waits for a key stroke. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Add shell_exec() functionLukas Fleischer2011-07-021-0/+8
| | | | | | | | | | | | Can be used to execute an external program in a shell. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Add child_wait() functionLukas Fleischer2011-07-021-0/+16
| | | | | | | | | | | | Can be used to wait for the termination of a child process. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Add fork_exec() functionLukas Fleischer2011-07-021-0/+71
| | | | | | | | | | | | | | Can be used to execute an external program. Provides the possibility to optionally create a pipe to the new process. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* | Split line editing functions into separate fileLukas Fleischer2011-06-291-183/+0
|/ | | | | | | Move getstring() related stuff into a separate file as a first step on our way to UTF-8 support for line editing helpers. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* src/utils.c: Make bell() staticLukas Fleischer2011-06-071-1/+1
| | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Update copyright notices in source files, documentation and "COPYING".Lukas Fleischer2011-04-221-1/+1
| | | | | | | | | * Update copyright dates (use 2004-2011 as date range everywhere). * Change copyright holder from "Frederic Culot" to "calcurse Development Team". Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Use mem_free() instead of xfree() in check_time().Lukas Fleischer2011-04-171-1/+1
| | | | | | | xfree() should never be used directly and only be called by one of the mem_*() wrappers. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Fix null pointer dereference in parse_date().Lukas Fleischer2011-04-121-9/+12
| | | | | | | | Passing a date in format "mm-dd-yy" where short forms are not allowed would lead to a null pointer dereference here. This one fixes that. Spotted by clang-analyzer. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Compare pointers to "NULL" instead of "0".Lukas Fleischer2011-04-051-3/+3
| | | | | | "bad_zero.cocci" spatch from http://coccinelle.lip6.fr/impact_linux.php. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Avoid assignment of undefined value in parse_date().Lukas Fleischer2011-04-031-4/+4
| | | | | | Spotted by clang-analyzer ("Assigned value is garbage or undefined"). Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Try to stick to the GNU coding standards for the sake of consistency.Lukas Fleischer2011-03-151-133/+170
| | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Use upper case for macro names.Lukas Fleischer2011-03-151-2/+2
| | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Overall indentation fixes.Lukas Fleischer2011-03-141-30/+30
| | | | | | | Use spaces instead of tabs for source code indentation only, strip trailing whitespaces from lines. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
* Clean up updatestring() in "utils.c".Lukas Fleischer2011-03-051-15/+18
| | | | Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>