From 56c14a647354b6b77fdc0c2f6c5e2f1c433ec410 Mon Sep 17 00:00:00 2001 From: Mark Whitley Date: Fri, 20 Apr 2001 23:41:44 +0000 Subject: [PATCH] Fixed a buglet where an extra newline was being added after an insert command in some cases. --- editors/sed.c | 17 ++++++++++------- sed.c | 17 ++++++++++------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/editors/sed.c b/editors/sed.c index 07e3a3e30..1342a6643 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -333,17 +333,20 @@ static int parse_edit_cmd(struct sed_cmd *sed_cmd, const char *editstr) } out: - ptr[idx] = '\n'; - ptr[idx+1] = 0; - /* this accounts for discrepancies between the modified string and the * original string passed in to this function */ idx += slashes_eaten; - /* this accounts for the fact that A) we started at index 3, not at index - * 0 and B) that we added an extra '\n' at the end (if you think the next - * line should read 'idx += 4' remember, arrays are zero-based) */ - idx += 3; + /* figure out if we need to add a newline */ + if (ptr[idx-1] != '\n') { + ptr[idx] = '\n'; + idx++; + } + + /* terminate string */ + ptr[idx]= 0; + /* adjust for opening 2 chars [aic]\ */ + idx += 2; return idx; } diff --git a/sed.c b/sed.c index 07e3a3e30..1342a6643 100644 --- a/sed.c +++ b/sed.c @@ -333,17 +333,20 @@ static int parse_edit_cmd(struct sed_cmd *sed_cmd, const char *editstr) } out: - ptr[idx] = '\n'; - ptr[idx+1] = 0; - /* this accounts for discrepancies between the modified string and the * original string passed in to this function */ idx += slashes_eaten; - /* this accounts for the fact that A) we started at index 3, not at index - * 0 and B) that we added an extra '\n' at the end (if you think the next - * line should read 'idx += 4' remember, arrays are zero-based) */ - idx += 3; + /* figure out if we need to add a newline */ + if (ptr[idx-1] != '\n') { + ptr[idx] = '\n'; + idx++; + } + + /* terminate string */ + ptr[idx]= 0; + /* adjust for opening 2 chars [aic]\ */ + idx += 2; return idx; }