aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/sed.c17
-rw-r--r--sed.c17
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;
}