aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/sed.c137
1 files changed, 59 insertions, 78 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 5dd5b2654..d90d63e43 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -165,7 +165,7 @@ static void destroy_cmd_strs(void)
* a backslash ('\').
*/
static int index_of_next_unescaped_regexp_delim(const char delimiter,
- const char *str)
+ const char *str)
{
int bracket = -1;
int escaped = 0;
@@ -174,8 +174,8 @@ static int index_of_next_unescaped_regexp_delim(const char delimiter,
for (; (ch = str[idx]); idx++) {
if (bracket != -1) {
- if (ch == ']' && !(bracket == idx - 1 ||
- (bracket == idx - 2 && str[idx - 1] == '^')))
+ if (ch == ']' && !(bracket == idx - 1 || (bracket == idx - 2
+ && str[idx - 1] == '^')))
bracket = -1;
} else if (escaped)
escaped = 0;
@@ -392,7 +392,7 @@ static int parse_edit_cmd(sed_cmd_t * sed_cmd, const char *editstr)
/* store the edit line text */
sed_cmd->editline = xmalloc(strlen(&editstr[2]) + 2);
for (i = 2, j = 0;
- editstr[i] != '\0' && strchr("\r\n", editstr[i]) == NULL; i++, j++) {
+ editstr[i] != '\0' && strchr("\r\n", editstr[i]) == NULL; i++, j++) {
if ((editstr[i] == '\\') && strchr("\n\r", editstr[i + 1]) != NULL) {
sed_cmd->editline[j] = '\n';
i++;
@@ -449,7 +449,7 @@ static int parse_file_cmd(sed_cmd_t * sed_cmd, const char *filecmdstr)
/*
* Process the commands arguments
*/
-static char *parse_cmd_str(sed_cmd_t *sed_cmd, char *cmdstr)
+static char *parse_cmd_str(sed_cmd_t * sed_cmd, char *cmdstr)
{
/* handle (s)ubstitution command */
if (sed_cmd->cmd == 's') {
@@ -536,7 +536,7 @@ static char *add_cmd(sed_cmd_t * sed_cmd, char *cmdstr)
idx = get_address(cmdstr, &sed_cmd->end_line, &sed_cmd->end_match);
if (idx == 0) {
bb_error_msg_and_die("get_address: no address found in string\n"
- "\t(you probably didn't check the string you passed me)");
+ "\t(you probably didn't check the string you passed me)");
}
cmdstr += idx;
}
@@ -637,8 +637,8 @@ static void load_cmd_file(char *filename)
while ((line = bb_get_line_from_file(cmdfile)) != NULL) {
/* if a line ends with '\' it needs the next line appended to it */
while (((e = last_char_is(line, '\n')) != NULL)
- && (e > line) && (e[-1] == '\\')
- && ((nextline = bb_get_line_from_file(cmdfile)) != NULL)) {
+ && (e > line) && (e[-1] == '\\')
+ && ((nextline = bb_get_line_from_file(cmdfile)) != NULL)) {
line = xrealloc(line, (e - line) + 1 + strlen(nextline) + 1);
strcat(line, nextline);
free(nextline);
@@ -686,9 +686,7 @@ void pipe_putc(struct pipeline *const pipeline, char c)
#endif
static void print_subst_w_backrefs(const char *line, const char *replace,
- regmatch_t * regmatch,
- struct pipeline *const pipeline,
- int matches)
+ regmatch_t * regmatch, struct pipeline *const pipeline, int matches)
{
int i;
@@ -707,7 +705,7 @@ static void print_subst_w_backrefs(const char *line, const char *replace,
/* print out the text held in regmatch[backref] */
if (backref <= matches && regmatch[backref].rm_so != -1)
for (j = regmatch[backref].rm_so; j < regmatch[backref].rm_eo;
- j++)
+ j++)
pipeputc(line[j]);
}
@@ -723,6 +721,7 @@ static void print_subst_w_backrefs(const char *line, const char *replace,
* purpose...) */
else if (replace[i] == '&') {
int j;
+
for (j = regmatch[0].rm_so; j < regmatch[0].rm_eo; j++)
pipeputc(line[j]);
}
@@ -766,9 +765,9 @@ static int do_subst_command(sed_cmd_t * sed_cmd, char **line)
/* and now, as long as we've got a line to try matching and if we can match
* the search string, we make substitutions */
- while ((*hackline || !altered) && (regexec(current_regex, hackline,
- sed_cmd->num_backrefs + 1,
- regmatch, 0) != REG_NOMATCH)) {
+ while ((*hackline || !altered)
+ && (regexec(current_regex, hackline, sed_cmd->num_backrefs + 1,
+ regmatch, 0) != REG_NOMATCH)) {
int i;
/* print everything before the match */
@@ -776,8 +775,8 @@ static int do_subst_command(sed_cmd_t * sed_cmd, char **line)
pipeputc(hackline[i]);
/* then print the substitution string */
- print_subst_w_backrefs(hackline, sed_cmd->replace, regmatch,
- pipeline, sed_cmd->num_backrefs);
+ print_subst_w_backrefs(hackline, sed_cmd->replace, regmatch, pipeline,
+ sed_cmd->num_backrefs);
/* advance past the match */
hackline += regmatch[0].rm_eo;
@@ -805,6 +804,7 @@ static int do_subst_command(sed_cmd_t * sed_cmd, char **line)
static sed_cmd_t *branch_to(const char *label)
{
sed_cmd_t *sed_cmd;
+
for (sed_cmd = sed_cmd_head.next; sed_cmd; sed_cmd = sed_cmd->next) {
if ((sed_cmd->label) && (strcmp(sed_cmd->label, label) == 0)) {
break;
@@ -843,31 +843,26 @@ static void process_file(FILE * file)
force_print = 0;
/* for every line, go through all the commands */
- for (sed_cmd = sed_cmd_head.next; sed_cmd;
- sed_cmd = sed_cmd->next) {
+ for (sed_cmd = sed_cmd_head.next; sed_cmd; sed_cmd = sed_cmd->next) {
int deleted = 0;
/*
* entry point into sedding...
*/
int matched = (
- /* no range necessary */
- (sed_cmd->beg_line == 0
- && sed_cmd->end_line == 0
- && sed_cmd->beg_match == NULL
- && sed_cmd->end_match == NULL) ||
- /* this line number is the first address we're looking for */
- (sed_cmd->beg_line
- && (sed_cmd->beg_line == linenum)) ||
- /* this line matches our first address regex */
- (sed_cmd->beg_match
- &&
- (regexec
- (sed_cmd->beg_match, pattern_space, 0, NULL,
- 0) == 0)) ||
- /* we are currently within the beginning & ending address range */
- still_in_range || ((sed_cmd->beg_line == -1)
- && (next_line == NULL))
+ /* no range necessary */
+ (sed_cmd->beg_line == 0 && sed_cmd->end_line == 0
+ && sed_cmd->beg_match == NULL
+ && sed_cmd->end_match == NULL) ||
+ /* this line number is the first address we're looking for */
+ (sed_cmd->beg_line && (sed_cmd->beg_line == linenum)) ||
+ /* this line matches our first address regex */
+ (sed_cmd->beg_match
+ && (regexec(sed_cmd->beg_match, pattern_space, 0, NULL,
+ 0) == 0)) ||
+ /* we are currently within the beginning & ending address range */
+ still_in_range || ((sed_cmd->beg_line == -1)
+ && (next_line == NULL))
);
if (sed_cmd->invert ^ matched) {
@@ -927,7 +922,7 @@ static void process_file(FILE * file)
pattern_space =
xrealloc(pattern_space,
- strlen(pattern_space) + 2);
+ strlen(pattern_space) + 2);
tmp = strchr(pattern_space + offset, '\n');
memmove(tmp + 1, tmp, strlen(tmp) + 1);
tmp[0] = '\\';
@@ -952,8 +947,7 @@ static void process_file(FILE * file)
#endif
altered |= substituted;
if (!be_quiet && altered && ((sed_cmd->next == NULL)
- || (sed_cmd->next->cmd !=
- 's'))) {
+ || (sed_cmd->next->cmd != 's'))) {
force_print = 1;
}
@@ -979,10 +973,8 @@ static void process_file(FILE * file)
/* multi-address case */
/* - matching text */
|| (sed_cmd->end_match
- &&
- (regexec
- (sed_cmd->end_match, pattern_space, 0, NULL,
- 0) == 0))
+ && (regexec(sed_cmd->end_match, pattern_space, 0,
+ NULL, 0) == 0))
/* - matching line numbers */
|| (sed_cmd->end_line > 0
&& sed_cmd->end_line == linenum)) {
@@ -994,11 +986,17 @@ static void process_file(FILE * file)
case 'r':{
FILE *outfile;
+
outfile = fopen(sed_cmd->filename, "r");
if (outfile) {
char *line;
- while ((line = bb_get_chomped_line_from_file(outfile)) != NULL) {
- pattern_space = xrealloc(pattern_space, strlen(line) + strlen(pattern_space) + 2);
+
+ while ((line =
+ bb_get_chomped_line_from_file(outfile)) !=
+ NULL) {
+ pattern_space =
+ xrealloc(pattern_space,
+ strlen(line) + strlen(pattern_space) + 2);
strcat(pattern_space, "\n");
strcat(pattern_space, line);
}
@@ -1023,8 +1021,7 @@ static void process_file(FILE * file)
if (next_line) {
pattern_space =
realloc(pattern_space,
- strlen(pattern_space) +
- strlen(next_line) + 2);
+ strlen(pattern_space) + strlen(next_line) + 2);
strcat(pattern_space, "\n");
strcat(pattern_space, next_line);
next_line = bb_get_chomped_line_from_file(file);
@@ -1077,39 +1074,23 @@ static void process_file(FILE * file)
*/
if (matched) {
if (
- /* this is a single-address command or... */
- (sed_cmd->end_line == 0 && sed_cmd->end_match == NULL)
- || (
- /* If only one address */
- /* we were in the middle of our address range (this
- * isn't the first time through) and.. */
- (still_in_range == 1) && (
- /* this line number is the last address we're looking for or... */
- (sed_cmd->
- end_line
- && (sed_cmd->
- end_line ==
- linenum))
- ||
- /* this line matches our last address regex */
- (sed_cmd->
- end_match
- &&
- (regexec
- (sed_cmd->
- end_match,
- pattern_space,
- 0, NULL,
- 0) == 0))
- )
- )
- ) {
+ /* this is a single-address command or... */
+ (sed_cmd->end_line == 0 && sed_cmd->end_match == NULL)
+ /* If only one address */
+ /* we were in the middle of our address range (this
+ * isn't the first time through) and.. */
+ || ((still_in_range == 1)
+ /* this line number is the last address we're looking for or... */
+ && ((sed_cmd->end_line
+ && (sed_cmd->end_line == linenum))
+ /* this line matches our last address regex */
+ || (sed_cmd->end_match
+ && (regexec(sed_cmd->end_match, pattern_space,
+ 0, NULL, 0) == 0))))) {
/* we're out of our address range */
still_in_range = 0;
- }
-
- /* didn't hit the exit? then we're still in the middle of an address range */
- else {
+ } else {
+ /* didn't hit the exit? then we're still in the middle of an address range */
still_in_range = 1;
}
}