Allow to change encoding and charset at runtime
Showing
1 changed file
with
40 additions
and
6 deletions
... | @@ -28,38 +28,72 @@ main (int argc, char *argv[]) | ... | @@ -28,38 +28,72 @@ main (int argc, char *argv[]) |
28 | { | 28 | { |
29 | int c; | 29 | int c; |
30 | char buf[256]; | 30 | char buf[256]; |
31 | char *charset = "iso-8859-1"; | 31 | char *charset = strdup ("iso-8859-1"); |
32 | char *encoding = "quoted-printable"; | 32 | char *encoding = strdup ("quoted-printable"); |
33 | 33 | ||
34 | while ((c = getopt (argc, argv, "c:e:h")) != EOF) | 34 | while ((c = getopt (argc, argv, "c:e:h")) != EOF) |
35 | switch (c) | 35 | switch (c) |
36 | { | 36 | { |
37 | case 'c': | 37 | case 'c': |
38 | charset = optarg; | 38 | free (charset); |
39 | charset = strdup (optarg); | ||
39 | break; | 40 | break; |
41 | |||
40 | case 'e': | 42 | case 'e': |
41 | encoding = optarg; | 43 | free (encoding); |
44 | encoding = strdup (optarg); | ||
42 | break; | 45 | break; |
46 | |||
43 | case 'h': | 47 | case 'h': |
44 | printf ("usage: %s [-c charset] [-e encoding]\n", argv[0]); | 48 | printf ("usage: %s [-c charset] [-e encoding]\n", argv[0]); |
45 | exit (0); | 49 | exit (0); |
50 | |||
46 | default: | 51 | default: |
47 | exit (1); | 52 | exit (1); |
48 | } | 53 | } |
49 | 54 | ||
50 | while (fgets (buf, sizeof (buf), stdin)) | 55 | while (fgets (buf, sizeof (buf), stdin)) |
51 | { | 56 | { |
57 | int len; | ||
52 | char *p = NULL; | 58 | char *p = NULL; |
53 | int rc, len; | ||
54 | 59 | ||
55 | len = strlen (buf); | 60 | len = strlen (buf); |
56 | if (len > 0 && buf[len - 1] == '\n') | 61 | if (len > 0 && buf[len - 1] == '\n') |
57 | buf[len - 1] = 0; | 62 | buf[len - 1] = 0; |
58 | rc = mu_rfc2047_encode (charset, encoding, buf, &p); | 63 | if (buf[0] == '\\') |
64 | { | ||
65 | if (buf[1] == 0) | ||
66 | { | ||
67 | fprintf (stderr, "Unfinished command\n"); | ||
68 | continue; | ||
69 | } | ||
70 | |||
71 | for (p = buf + 2; *p && *p == ' '; p++) | ||
72 | ; | ||
73 | switch (buf[1]) | ||
74 | { | ||
75 | case 'c': | ||
76 | free (charset); | ||
77 | charset = strdup (p); | ||
78 | break; | ||
79 | |||
80 | case 'e': | ||
81 | free (encoding); | ||
82 | encoding = strdup (p); | ||
83 | break; | ||
84 | |||
85 | default: | ||
86 | fprintf (stderr, "Unknown command\n"); | ||
87 | } | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | int rc = mu_rfc2047_encode (charset, encoding, buf, &p); | ||
59 | printf ("%s=> %s\n", buf, mu_strerror (rc)); | 92 | printf ("%s=> %s\n", buf, mu_strerror (rc)); |
60 | if (p) | 93 | if (p) |
61 | printf ("%s\n", p); | 94 | printf ("%s\n", p); |
62 | free (p); | 95 | free (p); |
63 | } | 96 | } |
97 | } | ||
64 | return 0; | 98 | return 0; |
65 | } | 99 | } | ... | ... |
-
Please register or sign in to post a comment