]> arthur.barton.de Git - netatalk.git/commitdiff
New util netacnv for testing libunicode
authorfranklahm <franklahm>
Sun, 15 Nov 2009 16:39:03 +0000 (16:39 +0000)
committerfranklahm <franklahm>
Sun, 15 Nov 2009 16:39:03 +0000 (16:39 +0000)
bin/misc/.cvsignore [new file with mode: 0644]
bin/misc/Makefile.am [new file with mode: 0644]
bin/misc/netacnv.c [new file with mode: 0644]
configure.in

diff --git a/bin/misc/.cvsignore b/bin/misc/.cvsignore
new file mode 100644 (file)
index 0000000..378ebf6
--- /dev/null
@@ -0,0 +1,5 @@
+Makefile
+Makefile.in
+netacnv
+.deps
+.libs
diff --git a/bin/misc/Makefile.am b/bin/misc/Makefile.am
new file mode 100644 (file)
index 0000000..ada4e49
--- /dev/null
@@ -0,0 +1,6 @@
+# Makefile.am for bin/aecho/
+
+bin_PROGRAMS = netacnv
+
+netacnv_SOURCES = netacnv.c
+netacnv_LDADD = $(top_builddir)/libatalk/libatalk.la
diff --git a/bin/misc/netacnv.c b/bin/misc/netacnv.c
new file mode 100644 (file)
index 0000000..6e3107c
--- /dev/null
@@ -0,0 +1,95 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include <atalk/unicode.h>
+
+#define MACCHARSET "MAC_ROMAN"
+
+#define flag(x) x, #x
+
+struct flag_map {
+    int flag;
+    const char *flagname;
+};
+
+struct flag_map flag_map[] = {
+    flag(CONV_ESCAPEHEX),
+    flag(CONV_UNESCAPEHEX),    
+    flag(CONV_ESCAPEDOTS),
+    flag(CONV_IGNORE),
+    flag(CONV_FORCE),
+    flag(CONV__EILSEQ),
+    flag(CONV_TOUPPER),
+    flag(CONV_TOLOWER),
+    flag(CONV_PRECOMPOSE),
+    flag(CONV_DECOMPOSE)
+};
+
+char buffer[MAXPATHLEN +2];
+
+int main(int argc, char **argv)
+{
+    int opt;
+    uint16_t flags = 0;
+    char *string;
+    char *f = NULL, *t = NULL;
+    charset_t from, to, mac;
+
+    while ((opt = getopt(argc, argv, ":o:f:t:")) != -1) {
+        switch(opt) {
+        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;
+            break;
+        case 't':
+            t = 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("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);
+        }
+        return 1;
+    }
+    string = argv[optind];
+
+    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 == (to = add_charset(t ? t : "UTF8")) ) {
+        fprintf( stderr, "Setting codepage %s as to codepage failed\n", t ? t : "UTF8");
+        return (-1);
+    }
+
+    if ( (charset_t) -1 == (mac = add_charset(MACCHARSET)) ) {
+        fprintf( stderr, "Setting codepage %s as Mac codepage failed\n", MACCHARSET);
+        return (-1);
+    }
+
+
+    if ((size_t)-1 == (convert_charset(from, to, mac,
+                                       string, strlen(string),
+                                       buffer, MAXPATHLEN,
+                                       &flags)) ) {
+        fprintf( stderr, "Conversion error");
+        return 1;
+    }
+
+    printf("from: %s\nto: %s\n", string, buffer);
+
+    return 0;
+}
index 5e114e24da0b9e10912958c784b05ac0554ae376..9732bc4c9fa153abe025c7344b4523bcca86df70 100644 (file)
@@ -1,4 +1,4 @@
-dnl $Id: configure.in,v 1.224 2009-11-13 13:03:29 didg Exp $
+dnl $Id: configure.in,v 1.225 2009-11-15 16:39:03 franklahm Exp $
 dnl configure.in for netatalk
 
 AC_INIT(etc/afpd/main.c)
@@ -1161,6 +1161,7 @@ AC_OUTPUT([Makefile
        bin/cnid/cnid2_create
        bin/getzones/Makefile
        bin/megatron/Makefile
+    bin/misc/Makefile
        bin/nbp/Makefile
        bin/pap/Makefile
        bin/psorder/Makefile