Index: sed-4.8/sed/debug.c =================================================================== --- sed-4.8.orig/sed/debug.c +++ sed-4.8/sed/debug.c @@ -36,37 +36,37 @@ debug_print_char (char c) { if (ISPRINT (c) && c != '\\') { - putchar (c); + putc (c, stderr); return; } - putchar ('\\'); + putc ('\\', stderr); switch (c) { case '\a': - putchar ('a'); + putc ('a', stderr); break; case '\f': - putchar ('f'); + putc ('f', stderr); break; case '\r': - putchar ('r'); + putc ('r', stderr); break; case '\t': - putchar ('t'); + putc ('t', stderr); break; case '\v': - putchar ('v'); + putc ('v', stderr); break; case '\n': - putchar ('n'); + putc ('n', stderr); break; case '\\': - putchar ('\\'); + putc ('\\', stderr); break; default: - printf ("o%03o", (unsigned int) c); + fprintf (stderr, "o%03o", (unsigned int) c); } } @@ -77,7 +77,7 @@ debug_print_regex_pattern (const char *p while (len--) { if (*p == '/') - fputs ("\\/", stdout); + fputs ("\\/", stderr); else debug_print_char (*p); ++p; @@ -92,15 +92,15 @@ debug_print_regex_flags (const struct re #ifdef REG_PERL if (r->flags & REG_DOTALL) /* REG_PERL */ - putchar ('s'); + putc ('s', stderr); if (r->flags & REG_EXTENDED) /* REG_PERL */ - putchar ('x'); + putc ('x', stderr); #endif if (r->flags & REG_ICASE) - putchar (addr ? 'I' : 'i'); + putc (addr ? 'I' : 'i', stderr); if (r->flags & REG_NEWLINE) - putchar (addr ? 'M' : 'm'); + putc (addr ? 'M' : 'm', stderr); } static void @@ -109,13 +109,13 @@ debug_print_regex (const struct regex *r if (!r) { /* Previous Regex */ - fputs ("//", stdout); + fputs ("//", stderr); return; } - putchar ('/'); + putc ('/', stderr); debug_print_regex_pattern (r->re, r->sz); - putchar ('/'); + putc ('/', stderr); } static void @@ -126,26 +126,26 @@ debug_print_addr (const struct addr *a) switch (a->addr_type) { case ADDR_IS_NULL: - fputs ("[ADDR-NULL]", stdout); + fputs ("[ADDR-NULL]", stderr); break; case ADDR_IS_REGEX: debug_print_regex (a->addr_regex); debug_print_regex_flags (a->addr_regex, true); break; case ADDR_IS_NUM: - printf ("%lu", a->addr_number); + fprintf (stderr, "%lu", a->addr_number); break; case ADDR_IS_NUM_MOD: - printf ("%lu~%lu", a->addr_number, a->addr_step); + fprintf (stderr, "%lu~%lu", a->addr_number, a->addr_step); break; case ADDR_IS_STEP: - printf ("+%lu", a->addr_step); + fprintf (stderr, "+%lu", a->addr_step); break; case ADDR_IS_STEP_MOD: - printf ("~%lu", a->addr_step); + fprintf (stderr, "~%lu", a->addr_step); break; case ADDR_IS_LAST: - putchar ('$'); + putc ('$', stderr); break; } } @@ -166,30 +166,30 @@ debug_print_subst_replacement (const str /* Special GNU replacements \E\U\u\L\l should be printed BEFORE the 'prefix' .... the 'prefix' refers to being before the backreference. */ - putchar ('\\'); + putc ('\\', stderr); if (p->repl_type == 0) - putchar ('E'); + putc ('E', stderr); else if (p->repl_type == REPL_UPPERCASE) - putchar ('U'); + putc ('U', stderr); else if (p->repl_type == REPL_LOWERCASE) - putchar ('L'); + putc ('L', stderr); else if ((p->repl_type & REPL_MODIFIERS) == REPL_UPPERCASE_FIRST) - putchar ('u'); + putc ('u', stderr); else if ((p->repl_type & REPL_MODIFIERS) == REPL_LOWERCASE_FIRST) - putchar ('l'); + putc ('l', stderr); last_repl_type = p->repl_type; } if (p->prefix_length) - fwrite (p->prefix, 1, p->prefix_length, stdout); + fwrite (p->prefix, 1, p->prefix_length, stderr); if (p->subst_id != -1) { if (p->subst_id == 0) - putchar ('&'); + putc ('&', stderr); else - printf ("\\%d", p->subst_id); + fprintf (stderr, "\\%d", p->subst_id); } p = p->next; @@ -202,7 +202,7 @@ debug_print_output_file (const struct ou if (!o) return; - fputs (o->name, stdout); + fputs (o->name, stderr); } static void @@ -213,21 +213,21 @@ debug_print_subst (const struct subst *s debug_print_regex (s->regx); debug_print_subst_replacement (s->replacement); - putchar ('/'); + putc ('/', stderr); debug_print_regex_flags (s->regx, false); if (s->global) - putchar ('g'); + putc ('g', stderr); if (s->eval) - putchar ('e'); + putc ('e', stderr); if (s->print) - putchar ('p'); + putc ('p', stderr); if (s->numb) - printf ("%lu", s->numb); + fprintf (stderr, "%lu", s->numb); if (s->outf) { - putchar ('w'); + putc ('w', stderr); debug_print_output_file (s->outf); } } @@ -240,26 +240,26 @@ debug_print_translation (const struct se if (mb_cur_max > 1) { /* multibyte translation */ - putchar ('/'); + putc ('/', stderr); for (i = 0; sc->x.translatemb[2 * i] != NULL; i++) - fputs (sc->x.translatemb[2 * i], stdout); - putchar ('/'); + fputs (sc->x.translatemb[2 * i], stderr); + putc ('/', stderr); for (i = 0; sc->x.translatemb[2 * i] != NULL; i++) - fputs (sc->x.translatemb[2 * i + 1], stdout); - putchar ('/'); + fputs (sc->x.translatemb[2 * i + 1], stderr); + putc ('/', stderr); } else { /* unibyte translation */ - putchar ('/'); + putc ('/', stderr); for (i = 0; i < 256; ++i) if (sc->x.translate[i] != (unsigned char) i) putchar ((unsigned char) i); - putchar ('/'); + putc ('/', stderr); for (i = 0; i < 256; ++i) if (sc->x.translate[i] != (unsigned char) i) - putchar (sc->x.translate[i]); - putchar ('/'); + putc (sc->x.translate[i], stderr); + putc ('/', stderr); } } @@ -269,7 +269,7 @@ debug_print_function (const struct vecto if (!sc) return; - putchar (sc->cmd); + putc (sc->cmd, stderr); switch (sc->cmd) /* LCOV_EXCL_BR */ { @@ -277,7 +277,7 @@ debug_print_function (const struct vecto break; case ':': - printf ("%s", sc->x.label_name); + fprintf (stderr, "%s", sc->x.label_name); break; case '{': @@ -293,9 +293,9 @@ debug_print_function (const struct vecto case 'a': case 'c': case 'i': - fputs ("\\", stdout); + fputs ("\\", stderr); if (sc->x.cmd_txt.text_length) - fwrite (sc->x.cmd_txt.text, 1, sc->x.cmd_txt.text_length, stdout); + fwrite (sc->x.cmd_txt.text, 1, sc->x.cmd_txt.text_length, stderr); break; case 'b': @@ -306,7 +306,7 @@ debug_print_function (const struct vecto { const char *label_name = program->v[sc->x.jump_index].x.label_name; if (label_name) - printf (" %s", label_name); + fprintf (stderr, " %s", label_name); } } break; @@ -318,8 +318,8 @@ debug_print_function (const struct vecto break; case 'e': - putchar (' '); - fwrite (sc->x.cmd_txt.text, 1, sc->x.cmd_txt.text_length, stdout); + putc (' ', stderr); + fwrite (sc->x.cmd_txt.text, 1, sc->x.cmd_txt.text_length, stderr); break; case 'F': @@ -344,7 +344,7 @@ debug_print_function (const struct vecto case 'q': case 'Q': if (sc->x.int_arg != -1) - printf (" %d", sc->x.int_arg); + fprintf (stderr, " %d", sc->x.int_arg); break; case 'n': @@ -362,13 +362,13 @@ debug_print_function (const struct vecto /* 'q','Q' are lumped above with 'L' and 'l' */ case 'r': - putchar (' '); - fputs (sc->x.fname, stdout); + putc (' ', stderr); + fputs (sc->x.fname, stderr); break; case 'R': - putchar (' '); - fputs (sc->x.inf->name, stdout); + putc (' ', stderr); + fputs (sc->x.inf->name, stderr); break; case 's': @@ -408,6 +408,7 @@ debug_print_function (const struct vecto void debug_print_command (const struct vector *program, const struct sed_cmd *sc) { + bool addr_bang; if (!program) return; @@ -416,11 +417,11 @@ debug_print_command (const struct vector --block_level; for (int j = 0; j < block_level; ++j) - fputs (" ", stdout); + fputs (" ", stderr); debug_print_addr (sc->a1); if (sc->a2) - putchar (','); + putc (',', stderr); debug_print_addr (sc->a2); addr_bang = sc->addr_bang; @@ -429,14 +430,14 @@ debug_print_command (const struct vector if (sc->cmd == '{') addr_bang = !addr_bang; if (addr_bang) - putchar ('!'); + putc ('!', stderr); if (sc->a1 || sc->a2) - putchar (' '); + putc (' ', stderr); debug_print_function (program, sc); - putchar ('\n'); + putc ('\n', stderr); if (sc->cmd == '{') ++block_level; @@ -449,7 +450,7 @@ debug_print_program (const struct vector return; block_level = 1; - puts ("SED PROGRAM:"); + fputs ("SED PROGRAM:", stderr); for (size_t i = 0; i < program->v_length; ++i) debug_print_command (program, &program->v[i]); block_level = 0; Index: sed-4.8/sed/execute.c =================================================================== --- sed-4.8.orig/sed/execute.c +++ sed-4.8/sed/execute.c @@ -1019,21 +1019,21 @@ do_subst (struct subst *sub) if (debug) { if (regs.num_regs>0 && regs.start[0] != -1) - puts ("MATCHED REGEX REGISTERS"); + fputs ("MATCHED REGEX REGISTERS", stderr); for (int i = 0; i < regs.num_regs; ++i) { if (regs.start[i] == -1) break; - printf (" regex[%d] = %d-%d '", i, + fprintf (stderr, " regex[%d] = %d-%d '", i, (int)regs.start[i], (int)regs.end[i]); if (regs.start[i] != regs.end[i]) fwrite (line.active + regs.start[i], regs.end[i] -regs.start[i], - 1, stdout); + 1, stderr); - puts ("'"); + fputs ("'", stderr); } } @@ -1243,7 +1243,7 @@ translate_mb (char *const *trans) static void debug_print_end_of_cycle (void) { - puts ("END-OF-CYCLE:"); + fputs ("END-OF-CYCLE:", stderr); } static void @@ -1251,7 +1251,7 @@ debug_print_input (const struct input *i { bool is_stdin = (input->fp && fileno (input->fp) == 0); - printf ("INPUT: '%s' line %lu\n", + fprintf (stderr, "INPUT: '%s' line %lu\n", is_stdin?"STDIN":input->in_file_name, input->line_number); } @@ -1263,10 +1263,10 @@ debug_print_line (struct line *ln) size_t l = ln->length; const char *p = src; - fputs ( (ln == &hold) ? "HOLD: ":"PATTERN: ", stdout); + fputs ( (ln == &hold) ? "HOLD: ":"PATTERN: ", stderr); while (l--) debug_print_char (*p++); - putchar ('\n'); + putc ('\n', stderr); } /* Execute the program `vec' on the current input line. @@ -1283,7 +1283,7 @@ execute_program (struct vector *vec, str { if (debug) { - fputs ("COMMAND: ", stdout); + fputs ("COMMAND: ", stderr); debug_print_command (vec, cur_cmd); }