git: aad4fd549589 - main - Add a quoted-printable encoder/decoder
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 24 Apr 2022 06:24:25 UTC
The branch main has been updated by pstef:
URL: https://cgit.FreeBSD.org/src/commit/?id=aad4fd5495895bf1aa501037bb1e5df4e116a018
commit aad4fd5495895bf1aa501037bb1e5df4e116a018
Author: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
AuthorDate: 2022-04-15 13:25:30 +0000
Commit: Piotr Pawel Stefaniak <pstef@FreeBSD.org>
CommitDate: 2022-04-24 06:20:27 +0000
Add a quoted-printable encoder/decoder
As an example:
printf 'We don=27t know what to do with other=20worlds.=0D=0A' \
| bintrans qp -u
Differential Revision: https://reviews.freebsd.org/D34933
Reviewed by: debdrup (manpage)
---
usr.bin/bintrans/Makefile | 2 +-
usr.bin/bintrans/bintrans.1 | 13 +++++++++++++
usr.bin/bintrans/bintrans.c | 12 +++++++++---
usr.bin/bintrans/{mmencode.c => quoted-printable.c} | 16 ++++++++++++----
4 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/usr.bin/bintrans/Makefile b/usr.bin/bintrans/Makefile
index 49acec470d76..a83c820bd660 100644
--- a/usr.bin/bintrans/Makefile
+++ b/usr.bin/bintrans/Makefile
@@ -4,7 +4,7 @@
.include <src.opts.mk>
PROG= bintrans
-SRCS= bintrans.c uuencode.c uudecode.c
+SRCS= bintrans.c uuencode.c uudecode.c quoted-printable.c
MAN= bintrans.1 uuencode.format.5
LINKS+= ${BINDIR}/bintrans ${BINDIR}/uuencode
LINKS+= ${BINDIR}/bintrans ${BINDIR}/b64encode
diff --git a/usr.bin/bintrans/bintrans.1 b/usr.bin/bintrans/bintrans.1
index f489eb6fc258..24ce553d94e7 100644
--- a/usr.bin/bintrans/bintrans.1
+++ b/usr.bin/bintrans/bintrans.1
@@ -225,6 +225,19 @@ Wrap encoded output after
.Nm
is a generic utility that can run
any of the aforementioned encoders and decoders.
+It can also run algorithms that are not available
+through a dedicated program:
+.Pp
+.Nm qp
+is a quoted-printable converter
+and accepts the following options:
+.Bl -tag -width ident
+.It Fl u
+Decode.
+.It Fl o Ar output_file
+Output to
+.Ar output_file
+instead of standard output.
.Sh EXAMPLES
The following example packages up a source tree, compresses it,
uuencodes it and mails it to a user on another system.
diff --git a/usr.bin/bintrans/bintrans.c b/usr.bin/bintrans/bintrans.c
index 435f982ac520..04b3b10d84c8 100644
--- a/usr.bin/bintrans/bintrans.c
+++ b/usr.bin/bintrans/bintrans.c
@@ -38,6 +38,7 @@ extern int main_decode(int, char *[]);
extern int main_encode(int, char *[]);
extern int main_base64_decode(const char *);
extern int main_base64_encode(const char *, const char *);
+extern int main_quotedprintable(int, char*[]);
static int search(const char *const);
static void usage_base64(bool);
@@ -45,7 +46,7 @@ static void version_base64(void);
static void base64_encode_or_decode(int, char *[]);
enum coders {
- uuencode, uudecode, b64encode, b64decode, base64
+ uuencode, uudecode, b64encode, b64decode, base64, qp
};
int
@@ -71,11 +72,15 @@ main(int argc, char *argv[])
case base64:
base64_encode_or_decode(argc, argv);
break;
+ case qp:
+ main_quotedprintable(argc, argv);
+ break;
default:
(void)fprintf(stderr,
"usage: %1$s <uuencode | uudecode> ...\n"
" %1$s <b64encode | b64decode> ...\n"
- " %1$s <base64> ...\n",
+ " %1$s <base64> ...\n"
+ " %1$s <qp> ...\n",
progname);
exit(EX_USAGE);
}
@@ -90,7 +95,8 @@ search(const char *const progname)
DESIGNATE(uudecode),
DESIGNATE(b64encode),
DESIGNATE(b64decode),
- DESIGNATE(base64)
+ DESIGNATE(base64),
+ DESIGNATE(qp)
};
for (size_t i = 0; i < nitems(known); i++)
diff --git a/usr.bin/bintrans/mmencode.c b/usr.bin/bintrans/quoted-printable.c
similarity index 95%
rename from usr.bin/bintrans/mmencode.c
rename to usr.bin/bintrans/quoted-printable.c
index a391f4d7e1d4..b0e35509a2d9 100644
--- a/usr.bin/bintrans/mmencode.c
+++ b/usr.bin/bintrans/quoted-printable.c
@@ -18,6 +18,8 @@ WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
#include <string.h>
#include <ctype.h>
+extern int main_quotedprintable(int, char *[]);
+
static int
PendingBoundary(char *s, char **Boundaries, int *BoundaryCt)
{
@@ -211,8 +213,15 @@ fromqp(FILE *infile, FILE *outfile, char **boundaries, int *boundaryct)
}
}
+static void
+usage(void)
+{
+ fprintf(stderr,
+ "usage: bintrans qp [-u] [-o outputfile] [file name]\n");
+}
+
int
-main(int argc, char *argv[])
+main_quotedprintable(int argc, char *argv[])
{
int i;
bool encode = true;
@@ -224,7 +233,7 @@ main(int argc, char *argv[])
switch (argv[i][1]) {
case 'o':
if (++i >= argc) {
- fprintf(stderr, "mimencode: -o requires a file name.\n");
+ fprintf(stderr, "qp: -o requires a file name.\n");
exit(EXIT_FAILURE);
}
fpo = fopen(argv[i], "w");
@@ -237,8 +246,7 @@ main(int argc, char *argv[])
encode = false;
break;
default:
- fprintf(stderr,
- "Usage: mmencode [-u] [-o outputfile] [file name]\n");
+ usage();
exit(EXIT_FAILURE);
}
} else {