diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-10-05 13:16:25 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:58 +1000 |
commit | 352d450a94f89b4415c4d3ee56664d9815389b94 (patch) | |
tree | 9494757bb04e57df001e6cc09f27af1a9e4f13c4 /jim.c | |
parent | 22fc43c8dbca0205c854ae6e1c7f2c9c3c354125 (diff) | |
download | jimtcl-352d450a94f89b4415c4d3ee56664d9815389b94.zip jimtcl-352d450a94f89b4415c4d3ee56664d9815389b94.tar.gz jimtcl-352d450a94f89b4415c4d3ee56664d9815389b94.tar.bz2 |
Fix a concat bug
If a string ended in backslash-space, the trailing space was lost.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r-- | jim.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -5954,18 +5954,24 @@ Jim_Obj *Jim_ConcatObj(Jim_Interp *interp, int objc, Jim_Obj *const *objv) } if (objc) len += objc - 1; - /* Create the string rep, and a stinrg object holding it. */ + /* Create the string rep, and a string object holding it. */ p = bytes = Jim_Alloc(len + 1); for (i = 0; i < objc; i++) { const char *s = Jim_GetString(objv[i], &objLen); + /* Remove leading space */ while (objLen && (*s == ' ' || *s == '\t' || *s == '\n')) { s++; objLen--; len--; } + /* And trailing space */ while (objLen && (s[objLen - 1] == ' ' || s[objLen - 1] == '\n' || s[objLen - 1] == '\t')) { + /* Handle trailing backslash-space case */ + if (objLen > 1 && s[objLen - 2] == '\\') { + break; + } objLen--; len--; } |