Fixed a buglet where an extra newline was being added after an insert command
authorMark Whitley <markw@lineo.com>
Fri, 20 Apr 2001 23:41:44 +0000 (23:41 -0000)
committerMark Whitley <markw@lineo.com>
Fri, 20 Apr 2001 23:41:44 +0000 (23:41 -0000)
in some cases.

editors/sed.c
sed.c

index 07e3a3e30ed1c43e3675ab8a336c30fc602500b2..1342a66433554a7bf9dce8fb02cfaee22ac2427f 100644 (file)
@@ -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 07e3a3e30ed1c43e3675ab8a336c30fc602500b2..1342a66433554a7bf9dce8fb02cfaee22ac2427f 100644 (file)
--- 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;
 }