{
int opt;
uint16_t flags = 0;
- char *string;
+ char *string, *macName = MACCHARSET;
char *f = NULL, *t = NULL;
charset_t from, to, mac;
- while ((opt = getopt(argc, argv, ":o:f:t:")) != -1) {
+ while ((opt = getopt(argc, argv, "m::o:f:t:")) != -1) {
switch(opt) {
+ case 'm':
+ macName = strdup(optarg);
+ break;
case 'o':
for (int i = 0; i < sizeof(flag_map)/sizeof(struct flag_map) - 1; i++)
if ((strcmp(flag_map[i].flagname, optarg)) == 0)
flags |= flag_map[i].flag;
break;
case 'f':
- f = optarg;
+ f = strdup(optarg);
break;
case 't':
- t = optarg;
+ t = strdup(optarg);
break;
}
}
if ((optind + 1) != argc) {
- printf("Usage: test [-o <conversion option> [...]] [-f <from charset>] [-t <to charset>] <string>\n");
- printf("Defaults: -f: UTF8-MAC , -t: UTF8 \n");
+ printf("Usage: test [-o <conversion option> [...]] [-f <from charset>] [-t <to charset>] [-m legacy Mac charset] <string>\n");
+ printf("Defaults: -f: UTF8-MAC, -t: UTF8, -m MAC_ROMAN\n");
printf("Available conversion options:\n");
for (int i = 0; i < (sizeof(flag_map)/sizeof(struct flag_map) - 1); i++) {
printf("%s\n", flag_map[i].flagname);
string = argv[optind];
set_charset_name(CH_UNIX, "UTF8");
- set_charset_name(CH_MAC, "MAC_ROMAN");
+ set_charset_name(CH_MAC, macName);
if ( (charset_t) -1 == (from = add_charset(f ? f : "UTF8-MAC")) ) {
fprintf( stderr, "Setting codepage %s as from codepage failed\n", f ? f : "UTF8-MAC");
return (-1);
}
- if ( (charset_t) -1 == (mac = add_charset(MACCHARSET)) ) {
+ if ( (charset_t) -1 == (mac = add_charset(macName)) ) {
fprintf( stderr, "Setting codepage %s as Mac codepage failed\n", MACCHARSET);
return (-1);
}