summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2006-05-23 12:47:33 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2006-05-23 12:47:33 +0000
commit9e7d23acce37814dd0e21b0acf80aee9bc5dc615 (patch)
tree6000b89232d45cefb615e96641f04756c40d5cd6
parenta087397f20d7c0c0294d9a612b872e65f89a9f8c (diff)
downloadmailutils-9e7d23acce37814dd0e21b0acf80aee9bc5dc615.tar.gz
mailutils-9e7d23acce37814dd0e21b0acf80aee9bc5dc615.tar.bz2
Allow to change encoding and charset at runtime
-rw-r--r--examples/encode2047.c54
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;
}

Return to:

Send suggestions and report system problems to the System administrator.