aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2023-04-09 19:24:30 +0200
committerThomas Voss <mail@thomasvoss.com> 2023-04-09 19:28:29 +0200
commit6f12d32de35ab1d0589db157e0fbc8e56727e138 (patch)
tree6f0243654f9eae076035556d231477712ebd470f
parentee68a0baf2f8ec82b758d1dcaf3d71cb5b633b3d (diff)
Let the replacement file be stdin
-rw-r--r--fsub.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fsub.c b/fsub.c
index 4bc394f..d1863a7 100644
--- a/fsub.c
+++ b/fsub.c
@@ -46,7 +46,7 @@ static void fsub(char *, pcre2_match_data *, pcre2_code *, char *);
int
main(int argc, char *argv[])
{
- int fd, fd2, ec, opt;
+ int fd = 0, fd2, ec, opt;
char *needle, *haystack, *repl,
*argv0 = argv[0],
*optstr = "dim",
@@ -89,7 +89,10 @@ main(int argc, char *argv[])
}
needle = argv[0];
- fd = loadfile(&repl, argv[1]);
+ if (streq(argv[1], "-"))
+ repl = stdio_to_string();
+ else
+ fd = loadfile(&repl, argv[1]);
rx = pcre2_compile((PCRE2_SPTR) needle, PCRE2_ZERO_TERMINATED,
rx_opts, &ec, &eo, NULL);
if (rx == NULL) {
@@ -115,7 +118,9 @@ main(int argc, char *argv[])
pcre2_match_data_free(mdata);
pcre2_code_free(rx);
- close(fd);
+
+ if (!streq(argv[1], "-"))
+ close(fd);
return rv;
}