1#ifdef HAVE_CONFIG_H 2#include "config.h" 3#endif /* HAVE_CONFIG_H */ 4 5#include <unistd.h> 6#include <stdlib.h> 7#include <stdio.h> 8#include <string.h> 9#include <stdint.h> 10 11#include <atalk/unicode.h> 12 13#define MACCHARSET "MAC_ROMAN" 14 15#define flag(x) {x, #x} 16 17struct flag_map { 18 int flag; 19 const char *flagname; 20}; 21 22struct flag_map flag_map[] = { 23 flag(CONV_ESCAPEHEX), 24 flag(CONV_ALLOW_COLON), 25 flag(CONV_UNESCAPEHEX), 26 flag(CONV_ESCAPEDOTS), 27 flag(CONV_IGNORE), 28 flag(CONV_FORCE), 29 flag(CONV__EILSEQ), 30 flag(CONV_TOUPPER), 31 flag(CONV_TOLOWER), 32 flag(CONV_PRECOMPOSE), 33 flag(CONV_DECOMPOSE) 34}; 35 36char buffer[MAXPATHLEN +2]; 37 38int main(int argc, char **argv) 39{ 40 int opt; 41 uint16_t flags = 0; 42 char *string; 43 char *f = NULL, *t = NULL; 44 charset_t from, to, mac; 45 46 while ((opt = getopt(argc, argv, ":o:f:t:")) != -1) { 47 switch(opt) { 48 case 'o': 49 for (int i = 0; i < sizeof(flag_map)/sizeof(struct flag_map) - 1; i++) 50 if ((strcmp(flag_map[i].flagname, optarg)) == 0) 51 flags |= flag_map[i].flag; 52 break; 53 case 'f': 54 f = optarg; 55 break; 56 case 't': 57 t = optarg; 58 break; 59 } 60 } 61 62 if ((optind + 1) != argc) { 63 printf("Usage: test [-o <conversion option> [...]] [-f <from charset>] [-t <to charset>] <string>\n"); 64 printf("Defaults: -f: UTF8-MAC , -t: UTF8 \n"); 65 printf("Available conversion options:\n"); 66 for (int i = 0; i < (sizeof(flag_map)/sizeof(struct flag_map) - 1); i++) { 67 printf("%s\n", flag_map[i].flagname); 68 } 69 return 1; 70 } 71 string = argv[optind]; 72 73 if ( (charset_t) -1 == (from = add_charset(f ? f : "UTF8-MAC")) ) { 74 fprintf( stderr, "Setting codepage %s as from codepage failed\n", f ? f : "UTF8-MAC"); 75 return (-1); 76 } 77 78 if ( (charset_t) -1 == (to = add_charset(t ? t : "UTF8")) ) { 79 fprintf( stderr, "Setting codepage %s as to codepage failed\n", t ? t : "UTF8"); 80 return (-1); 81 } 82 83 if ( (charset_t) -1 == (mac = add_charset(MACCHARSET)) ) { 84 fprintf( stderr, "Setting codepage %s as Mac codepage failed\n", MACCHARSET); 85 return (-1); 86 } 87 88 89 if ((size_t)-1 == (convert_charset(from, to, mac, 90 string, strlen(string), 91 buffer, MAXPATHLEN, 92 &flags)) ) { 93 perror("Conversion error"); 94 return 1; 95 } 96 97 printf("from: %s\nto: %s\n", string, buffer); 98 99 return 0; 100} 101