mirror of
https://github.com/sheumann/hush.git
synced 2025-01-13 21:31:51 +00:00
sed: unbreak multiple -e, -f option handling (my fault)
This commit is contained in:
parent
bb119d059a
commit
b97c9842a5
@ -189,7 +189,7 @@ int od_main(int argc, char **argv)
|
|||||||
|
|
||||||
odoffset(argc, &argv);
|
odoffset(argc, &argv);
|
||||||
|
|
||||||
return(bb_dump_dump(argv));
|
return bb_dump_dump(argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
|
@ -1087,8 +1087,8 @@ static void add_cmd_block(char *cmdstr)
|
|||||||
int sed_main(int argc, char **argv)
|
int sed_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
unsigned long opt;
|
unsigned long opt;
|
||||||
char *opt_e, *opt_f;
|
llist_t *opt_e, *opt_f;
|
||||||
int status = EXIT_SUCCESS, getpat = 1;
|
int status = EXIT_SUCCESS;
|
||||||
|
|
||||||
bbg.sed_cmd_tail=&bbg.sed_cmd_head;
|
bbg.sed_cmd_tail=&bbg.sed_cmd_head;
|
||||||
|
|
||||||
@ -1102,6 +1102,8 @@ int sed_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* do normal option parsing */
|
/* do normal option parsing */
|
||||||
|
opt_e = opt_f = NULL;
|
||||||
|
bb_opt_complementally = "e::f::"; /* can occur multiple times */
|
||||||
opt = bb_getopt_ulflags(argc, argv, "irne:f:", &opt_e, &opt_f);
|
opt = bb_getopt_ulflags(argc, argv, "irne:f:", &opt_e, &opt_f);
|
||||||
if (opt & 0x1) { // -i
|
if (opt & 0x1) { // -i
|
||||||
bbg.in_place++;
|
bbg.in_place++;
|
||||||
@ -1110,23 +1112,30 @@ int sed_main(int argc, char **argv)
|
|||||||
if (opt & 0x2) bbg.regex_type|=REG_EXTENDED; // -r
|
if (opt & 0x2) bbg.regex_type|=REG_EXTENDED; // -r
|
||||||
if (opt & 0x4) bbg.be_quiet++; // -n
|
if (opt & 0x4) bbg.be_quiet++; // -n
|
||||||
if (opt & 0x8) { // -e
|
if (opt & 0x8) { // -e
|
||||||
add_cmd_block(opt_e);
|
while (opt_e) {
|
||||||
getpat=0;
|
llist_t *cur = opt_e;
|
||||||
|
add_cmd_block(cur->data);
|
||||||
|
opt_e = cur->link;
|
||||||
|
free(cur);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (opt & 0x10) { // -f
|
if (opt & 0x10) { // -f
|
||||||
|
while (opt_f) {
|
||||||
|
llist_t *cur = opt_f;
|
||||||
FILE *cmdfile;
|
FILE *cmdfile;
|
||||||
char *line;
|
char *line;
|
||||||
cmdfile = xfopen(opt_f, "r");
|
cmdfile = xfopen(cur->data, "r");
|
||||||
while ((line = bb_get_chomped_line_from_file(cmdfile)) != NULL) {
|
while ((line = bb_get_chomped_line_from_file(cmdfile)) != NULL) {
|
||||||
add_cmd(line);
|
add_cmd(line);
|
||||||
getpat=0;
|
|
||||||
free(line);
|
free(line);
|
||||||
}
|
}
|
||||||
xprint_and_close_file(cmdfile);
|
xprint_and_close_file(cmdfile);
|
||||||
|
opt_f = cur->link;
|
||||||
|
free(cur);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we didn't get a pattern from -e or -f, use argv[optind] */
|
/* if we didn't get a pattern from -e or -f, use argv[optind] */
|
||||||
if(getpat) {
|
if(!(opt & 0x18)) {
|
||||||
if (argv[optind] == NULL)
|
if (argv[optind] == NULL)
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
else
|
else
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
/* get_line_from_file() - This function reads an entire line from a text file,
|
/* get_line_from_file() - This function reads an entire line from a text file,
|
||||||
* up to a newline or NUL byte. It returns a malloc'ed char * which must be
|
* up to a newline or NUL byte. It returns a malloc'ed char * which must be
|
||||||
* stored and free'ed by the caller. If end is null '\n' isn't considered
|
* stored and free'ed by the caller. If end is null '\n' isn't considered
|
||||||
* and of line. If end isn't null, length of the chunk read is stored in it. */
|
* end of line. If end isn't null, length of the chunk read is stored in it. */
|
||||||
|
|
||||||
char *bb_get_chunk_from_file(FILE * file, int *end)
|
char *bb_get_chunk_from_file(FILE * file, int *end)
|
||||||
{
|
{
|
||||||
@ -46,7 +46,7 @@ char *bb_get_chunk_from_file(FILE * file, int *end)
|
|||||||
return linebuf;
|
return linebuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get line, including trailing /n if any */
|
/* Get line, including trailing \n if any */
|
||||||
char *bb_get_line_from_file(FILE * file)
|
char *bb_get_line_from_file(FILE * file)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -54,7 +54,7 @@ char *bb_get_line_from_file(FILE * file)
|
|||||||
return bb_get_chunk_from_file(file, &i);
|
return bb_get_chunk_from_file(file, &i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get line. Remove trailing /n */
|
/* Get line. Remove trailing \n */
|
||||||
char *bb_get_chomped_line_from_file(FILE * file)
|
char *bb_get_chomped_line_from_file(FILE * file)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user