+++ /dev/null
-/*
-** Copyright 2011 Double Precision, Inc.
-** See COPYING for distribution information.
-**
-*/
-
-#include "unicode_config.h"
-#include "unicode.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-
-struct collect_buf {
- char *ptr;
- size_t cnt;
- size_t size;
-};
-
-static int save_output(const char *p, size_t n, void *ptr)
-{
- struct collect_buf *cb=(struct collect_buf *)ptr;
-
- while (n)
- {
- if (cb->cnt < cb->size)
- cb->ptr[cb->cnt++]=*p;
- ++p;
- --n;
- }
- return 0;
-}
-
-static void test1()
-{
- static const char teststr[]= {
- 0x00, 0x00, 0x00, 0x41,
- 0x00, 0x00, 0x04, 0x14,
- 0x00, 0x00, 0x04, 0x30,
- 0x00, 0x00, 0x00, 0x42};
- char outputbuf[12];
- struct collect_buf cb;
- libmail_u_convert_handle_t h;
- int checkflag;
-
- cb.ptr=outputbuf;
- cb.cnt=0;
- cb.size=sizeof(outputbuf);
-
- if ((h=libmail_u_convert_init("UCS-4BE", "ISO-8859-1",
- save_output, &cb)) == NULL)
- {
- perror("libmail_u_convert_init");
- exit(1);
- }
-
- libmail_u_convert(h, teststr, sizeof(teststr));
-
- if (libmail_u_convert_deinit(h, &checkflag))
- {
- perror("libmail_u_convert_deinit");
- exit(1);
- }
- if (cb.cnt != 2 || memcmp(cb.ptr, "AB", 2) || !checkflag)
- {
- fprintf(stderr, "Unexpected result from convert()\n");
- exit(1);
- }
-}
-
-static void test2()
-{
- unicode_char *ucptr;
- size_t ucsize;
- libmail_u_convert_handle_t h=
- libmail_u_convert_tou_init("utf-8", &ucptr, &ucsize, 1);
- char *cptr;
- size_t csize;
-
- if (h)
- {
- size_t i;
-
- for (i=0; i<1024/32; ++i)
- libmail_u_convert(h, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- 32);
-
- if (libmail_u_convert_deinit(h, NULL) == 0 &&
- ucsize == 1024+1)
- {
- for (i=0; i<1024; i++)
- if (ucptr[i] != 'A')
- break;
-
- if (i == 1024)
- {
- h=libmail_u_convert_fromu_init("utf-8",
- &cptr, &csize,
- 1);
-
- if (h)
- {
- libmail_u_convert_uc(h, ucptr, 1024);
- if (libmail_u_convert_deinit(h, NULL)
- == 0 && csize == 1024+1)
- {
- for (i=0; i<1024; i++)
- if (cptr[i] != 'A')
- break;
-
- free(ucptr);
- free(cptr);
- if (i == 1024)
- return;
- }
- }
- }
- }
- fprintf(stderr, "test2: failed");
- errno=EINVAL;
- }
- perror("test2");
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- const char *chset=unicode_x_imap_modutf7;
- int argn=1;
-
- if (argn < argc && strcmp(argv[argn], "--smap") == 0)
- {
- chset=unicode_x_imap_modutf7 " ./~:";
- ++argn;
- }
-
- if (argn < argc && strcmp(argv[argn], "--totitle") == 0)
- {
- ++argn;
-
- if (argn < argc)
- {
- char *p=libmail_u_convert_tocase(argv[argn],
- "utf-8",
- unicode_tc,
- unicode_lc);
-
- if (p)
- {
- printf("%s\n", p);
- free(p);
- exit(0);
- }
- }
- exit(1);
- }
-
- if (argn < argc)
- {
- int errflag;
- char *p=libmail_u_convert_tobuf(argv[argn],
- "utf-8",
- chset,
- &errflag);
- char *q;
-
- if (!p)
- {
- perror("libmail_u_convert");
- exit(1);
- }
-
- if (errflag)
- {
- fprintf(stderr, "Conversion error?\n");
- exit(1);
- }
-
- q=libmail_u_convert_tobuf(p, chset, "utf-8", &errflag);
- if (!q)
- {
- perror("libmail_u_convert");
- exit(1);
- }
-
- if (errflag)
- {
- fprintf(stderr, "Conversion error?\n");
- exit(1);
- }
- if (strcmp(q, argv[argn]))
- {
- fprintf(stderr, "Round trip error\n");
- exit(1);
- }
- printf("%s\n", p);
- free(p);
- free(q);
- }
- else
- {
- test1();
- test2();
- }
- return 0;
-}