diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2006-05-23 12:47:33 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2006-05-23 12:47:33 +0000 |
commit | 9e7d23acce37814dd0e21b0acf80aee9bc5dc615 (patch) | |
tree | 6000b89232d45cefb615e96641f04756c40d5cd6 | |
parent | a087397f20d7c0c0294d9a612b872e65f89a9f8c (diff) | |
download | mailutils-9e7d23acce37814dd0e21b0acf80aee9bc5dc615.tar.gz mailutils-9e7d23acce37814dd0e21b0acf80aee9bc5dc615.tar.bz2 |
Allow to change encoding and charset at runtime
-rw-r--r-- | examples/encode2047.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/examples/encode2047.c b/examples/encode2047.c index 8a156f4c6..254859d2d 100644 --- a/examples/encode2047.c +++ b/examples/encode2047.c @@ -28,38 +28,72 @@ main (int argc, char *argv[]) { int c; char buf[256]; - char *charset = "iso-8859-1"; - char *encoding = "quoted-printable"; + char *charset = strdup ("iso-8859-1"); + char *encoding = strdup ("quoted-printable"); while ((c = getopt (argc, argv, "c:e:h")) != EOF) switch (c) { case 'c': - charset = optarg; + free (charset); + charset = strdup (optarg); break; + case 'e': - encoding = optarg; + free (encoding); + encoding = strdup (optarg); break; + case 'h': printf ("usage: %s [-c charset] [-e encoding]\n", argv[0]); exit (0); + default: exit (1); } while (fgets (buf, sizeof (buf), stdin)) { + int len; char *p = NULL; - int rc, len; - + len = strlen (buf); if (len > 0 && buf[len - 1] == '\n') buf[len - 1] = 0; - rc = mu_rfc2047_encode (charset, encoding, buf, &p); - printf ("%s=> %s\n", buf, mu_strerror (rc)); - if (p) + if (buf[0] == '\\') + { + if (buf[1] == 0) + { + fprintf (stderr, "Unfinished command\n"); + continue; + } + + for (p = buf + 2; *p && *p == ' '; p++) + ; + switch (buf[1]) + { + case 'c': + free (charset); + charset = strdup (p); + break; + + case 'e': + free (encoding); + encoding = strdup (p); + break; + + default: + fprintf (stderr, "Unknown command\n"); + } + } + else + { + int rc = mu_rfc2047_encode (charset, encoding, buf, &p); + printf ("%s=> %s\n", buf, mu_strerror (rc)); + if (p) printf ("%s\n", p); - free (p); + free (p); + } } return 0; } |