diff options
author | Chris Hall <chris.hall@highwayman.com> | 2011-07-21 19:53:02 +0100 |
---|---|---|
committer | Chris Hall <chris.hall@highwayman.com> | 2011-07-21 19:53:02 +0100 |
commit | 56da2a1c9b6361e302b7a39fe2740561a9012d88 (patch) | |
tree | 6b6543532133a0c618d0f4ec70a87cf3f96caf30 /lib/qstring.h | |
parent | e535bc959729262480a9702e71334002edee3f8c (diff) | |
download | quagga-56da2a1c9b6361e302b7a39fe2740561a9012d88.tar.bz2 quagga-56da2a1c9b6361e302b7a39fe2740561a9012d88.tar.xz |
Update pipework and improve memory reporting.
Improve error handling for all new pipework inputs and outputs.
Change behaviour of ^C from VTY Terminal, so that will interrupt
output and terminate all running pipes -- including running
shell commands.
In pipe commands, recognise "~/..." and "~user/..." home directory
forms.
Changed "~/" to mean the usual home for the current user. "~~/"
now means the configuration file directory.
Introduced "shdir DIR" command to show what is (currently) what.
Changed "<|" so that if the command has a path, it is expanded
using Quagga's rules (including "~~/" and "~./") and the
"here" directory is set to that path.
Fixed collection of stderr output from all pipes so that is
separate from stdout output, and is always sent to the base
output (eg VTY Terminal).
Increase amount of information about the heap that "show mem"
shows -- particularly if the "memory_tracker" is enabled.
Tested and applied resulting fixes.
Diffstat (limited to 'lib/qstring.h')
-rw-r--r-- | lib/qstring.h | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/qstring.h b/lib/qstring.h index 536105d0..b9813bc7 100644 --- a/lib/qstring.h +++ b/lib/qstring.h @@ -518,16 +518,16 @@ qs_make_string(qstring qs) /*------------------------------------------------------------------------------ * Return pointer to string value. * - * If possible, writes '\0' at 'len' in order to return a terminated string. + * Writes '\0' at 'len' in order to return a terminated string, if required. * * If qs == NULL or body == NULL, or 'len' == 0 returns pointer to constant * empty '\0' terminated string (ie ""). * * NB: if 'len' is beyond the current 'size' of the of the qstring, then - * does NOT write '\0' (does NOT extend the string). + * will extend the string. * - * NB: if string is an alias, this returns its address, whether it is - * terminated or not. + * NB: if string is an alias, and that is not '\0' terminated, will make a + * copy, before writing '\0' at end. * * NB: In any event, the string should not be changed or reset until this * pointer has been discarded ! @@ -542,8 +542,16 @@ qs_string(qstring qs) || ((p = qs_char_nn(qs)) == NULL) ) return "" ; - if (len < qs->size) /* for alias, qs_size == 0 */ - *(p + len) = '\0' ; + if (len >= qs->size) /* for alias, qs_size == 0 */ + { + if (qs->alias && (*(p + len) == '\0')) + return p ; + + qs_make_to_size(qs, len, len) ; /* extend and/or copy alias */ + p = qs_char_nn(qs) ; + } ; + + *(p + len) = '\0' ; return p ; } ; |