• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/netatalk-3.0.5/bin/misc/
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_UNESCAPEHEX),
25    flag(CONV_ESCAPEDOTS),
26    flag(CONV_IGNORE),
27    flag(CONV_FORCE),
28    flag(CONV__EILSEQ),
29    flag(CONV_TOUPPER),
30    flag(CONV_TOLOWER),
31    flag(CONV_PRECOMPOSE),
32    flag(CONV_DECOMPOSE)
33};
34
35char buffer[MAXPATHLEN +2];
36
37int main(int argc, char **argv)
38{
39    int opt;
40    uint16_t flags = 0;
41    char *string, *macName = MACCHARSET;
42    char *f = NULL, *t = NULL;
43    charset_t from, to, mac;
44
45    while ((opt = getopt(argc, argv, "m:o:f:t:")) != -1) {
46        switch(opt) {
47        case 'm':
48            macName = strdup(optarg);
49            break;
50        case 'o':
51            for (int i = 0; i < sizeof(flag_map)/sizeof(struct flag_map) - 1; i++)
52                if ((strcmp(flag_map[i].flagname, optarg)) == 0)
53                    flags |= flag_map[i].flag;
54            break;
55        case 'f':
56            f = strdup(optarg);
57            break;
58        case 't':
59            t = strdup(optarg);
60            break;
61        }
62    }
63
64    if ((optind + 1) != argc) {
65        printf("Usage: test [-o <conversion option> [...]] [-f <from charset>] [-t <to charset>] [-m legacy Mac charset] <string>\n");
66        printf("Defaults: -f: UTF8-MAC, -t: UTF8, -m MAC_ROMAN\n");
67        printf("Available conversion options:\n");
68        for (int i = 0; i < (sizeof(flag_map)/sizeof(struct flag_map) - 1); i++) {
69            printf("%s\n", flag_map[i].flagname);
70        }
71        return 1;
72    }
73    string = argv[optind];
74
75    set_charset_name(CH_UNIX, "UTF8");
76    set_charset_name(CH_MAC, macName);
77
78    if ( (charset_t) -1 == (from = add_charset(f ? f : "UTF8-MAC")) ) {
79        fprintf( stderr, "Setting codepage %s as from codepage failed\n", f ? f : "UTF8-MAC");
80        return (-1);
81    }
82
83    if ( (charset_t) -1 == (to = add_charset(t ? t : "UTF8")) ) {
84        fprintf( stderr, "Setting codepage %s as to codepage failed\n", t ? t : "UTF8");
85        return (-1);
86    }
87
88    if ( (charset_t) -1 == (mac = add_charset(macName)) ) {
89        fprintf( stderr, "Setting codepage %s as Mac codepage failed\n", MACCHARSET);
90        return (-1);
91    }
92
93
94    if ((size_t)-1 == (convert_charset(from, to, mac,
95                                       string, strlen(string),
96                                       buffer, MAXPATHLEN,
97                                       &flags)) ) {
98        perror("Conversion error");
99        return 1;
100    }
101
102    printf("from: %s\nto: %s\n", string, buffer);
103
104    return 0;
105}
106