X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=cups%2Ftesti18n.c;h=45e1cab35d637195bbb03500a5225bcf9c5c42b5;hb=2064e071b09946c58b8c5ec4dd66a8813a10b4c8;hp=0ea419d3a7a8f55eec14c114c3aa602060d9818c;hpb=58dc193312e27d25c0394e4fcb7a6eed7301b1ec;p=thirdparty%2Fcups.git diff --git a/cups/testi18n.c b/cups/testi18n.c index 0ea419d3a..45e1cab35 100644 --- a/cups/testi18n.c +++ b/cups/testi18n.c @@ -1,37 +1,97 @@ /* - * "$Id: testi18n.c 7560 2008-05-13 06:34:04Z mike $" + * Internationalization test for CUPS. * - * Internationalization test for Common UNIX Printing System (CUPS). + * Copyright 2007-2014 by Apple Inc. + * Copyright 1997-2006 by Easy Software Products. * - * Copyright 2007-2008 by Apple Inc. - * Copyright 1997-2006 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * file is missing or damaged, see the license at "http://www.cups.org/". - * - * This file is subject to the Apple OS-Developed Software exception. - * - * Contents: - * - * main() - Main entry for internationalization test module. - * print_utf8() - Print UTF-8 string with (optional) message. + * Licensed under Apache License v2.0. See the file "LICENSE" for more information. */ /* * Include necessary headers... */ -#include +#include "string-private.h" +#include "language-private.h" #include -#include #include #include -#include "i18n.h" -#include "string.h" + +/* + * Local globals... + */ + +static const char * const lang_encodings[] = + { /* Encoding strings */ + "us-ascii", "iso-8859-1", + "iso-8859-2", "iso-8859-3", + "iso-8859-4", "iso-8859-5", + "iso-8859-6", "iso-8859-7", + "iso-8859-8", "iso-8859-9", + "iso-8859-10", "utf-8", + "iso-8859-13", "iso-8859-14", + "iso-8859-15", "windows-874", + "windows-1250", "windows-1251", + "windows-1252", "windows-1253", + "windows-1254", "windows-1255", + "windows-1256", "windows-1257", + "windows-1258", "koi8-r", + "koi8-u", "iso-8859-11", + "iso-8859-16", "mac-roman", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "windows-932", "windows-936", + "windows-949", "windows-950", + "windows-1361", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "unknown", "unknown", + "euc-cn", "euc-jp", + "euc-kr", "euc-tw", + "jis-x0213" + }; /* @@ -77,15 +137,53 @@ main(int argc, /* I - Argument Count */ cups_utf32_t utf32dest[1024]; /* UTF-32 destination string */ - /* - * Make sure we have a symbolic link from the data directory to a - * "charmaps" directory, and then point the library at it... - */ + if (argc > 1) + { + int i; /* Looping var */ + cups_encoding_t encoding; /* Source encoding */ - if (access("charmaps", 0)) - symlink("../data", "charmaps"); - putenv("CUPS_DATADIR=."); + if (argc != 3) + { + puts("Usage: ./testi18n [filename charset]"); + return (1); + } + + if ((fp = fopen(argv[1], "rb")) == NULL) + { + perror(argv[1]); + return (1); + } + + for (i = 0, encoding = CUPS_AUTO_ENCODING; + i < (int)(sizeof(lang_encodings) / sizeof(lang_encodings[0])); + i ++) + if (!_cups_strcasecmp(lang_encodings[i], argv[2])) + { + encoding = (cups_encoding_t)i; + break; + } + + if (encoding == CUPS_AUTO_ENCODING) + { + fprintf(stderr, "%s: Unknown character set!\n", argv[2]); + return (1); + } + + while (fgets(line, sizeof(line), fp)) + { + if (cupsCharsetToUTF8(utf8dest, line, sizeof(utf8dest), encoding) < 0) + { + fprintf(stderr, "%s: Unable to convert line: %s", argv[1], line); + return (1); + } + + fputs((char *)utf8dest, stdout); + } + + fclose(fp); + return (0); + } /* * Start with some conversion tests from a UTF-8 test file. @@ -93,7 +191,7 @@ main(int argc, /* I - Argument Count */ errors = 0; - if ((fp = fopen("utf8demo.txt", "r")) == NULL) + if ((fp = fopen("utf8demo.txt", "rb")) == NULL) { perror("utf8demo.txt"); return (1); @@ -148,62 +246,6 @@ main(int argc, /* I - Argument Count */ fclose(fp); - /* - * Test charmap load for ISO-8859-1... - */ - - fputs("_cupsCharmapGet(CUPS_ISO8859_1): ", stdout); - - if (!_cupsCharmapGet(CUPS_ISO8859_1)) - { - errors ++; - puts("FAIL"); - } - else - puts("PASS"); - - /* - * Test charmap load for Windows-932 (Shift-JIS)... - */ - - fputs("_cupsCharmapGet(CUPS_WINDOWS_932): ", stdout); - - if (!_cupsCharmapGet(CUPS_WINDOWS_932)) - { - errors ++; - puts("FAIL"); - } - else - puts("PASS"); - - /* - * Test VBCS charmap load for EUC-JP... - */ - - fputs("_cupsCharmapGet(CUPS_EUC_JP): ", stdout); - - if (!_cupsCharmapGet(CUPS_EUC_JP)) - { - errors ++; - puts("FAIL"); - } - else - puts("PASS"); - - /* - * Test VBCS charmap load for EUC-TW... - */ - - fputs("_cupsCharmapGet(CUPS_EUC_TW): ", stdout); - - if (!_cupsCharmapGet(CUPS_EUC_TW)) - { - errors ++; - puts("FAIL"); - } - else - puts("PASS"); - /* * Test UTF-8 to legacy charset (ISO 8859-1)... */ @@ -227,17 +269,17 @@ main(int argc, /* I - Argument Count */ fputs("cupsCharsetToUTF8(CUPS_ISO8859_1): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_1); - if (len != strlen((char *)utf8latin)) + if ((size_t)len != strlen((char *)utf8latin)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8latin)); print_utf8(" utf8latin", utf8latin); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8latin, utf8dest, len)) + else if (memcmp(utf8latin, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8latin", utf8latin); @@ -278,17 +320,17 @@ main(int argc, /* I - Argument Count */ fputs("cupsCharsetToUTF8(CUPS_ISO8859_7): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_ISO8859_7); - if (len != strlen((char *)utf8greek)) + if ((size_t)len != strlen((char *)utf8greek)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8greek)); print_utf8(" utf8greek", utf8greek); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8greek, utf8dest, len)) + else if (memcmp(utf8greek, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8greek", utf8greek); @@ -324,17 +366,17 @@ main(int argc, /* I - Argument Count */ fputs("cupsCharsetToUTF8(CUPS_WINDOWS_932): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_932); - if (len != strlen((char *)utf8japan)) + if ((size_t)len != strlen((char *)utf8japan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8japan)); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8japan, utf8dest, len)) + else if (memcmp(utf8japan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8japan", utf8japan); @@ -368,19 +410,20 @@ main(int argc, /* I - Argument Count */ puts("PASS"); } +#ifndef __linux fputs("cupsCharsetToUTF8(CUPS_EUC_JP): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_JP); - if (len != strlen((char *)utf8japan)) + if ((size_t)len != strlen((char *)utf8japan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8japan)); print_utf8(" utf8japan", utf8japan); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8japan, utf8dest, len)) + else if (memcmp(utf8japan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8japan", utf8japan); @@ -389,6 +432,7 @@ main(int argc, /* I - Argument Count */ } else puts("PASS"); +#endif /* !__linux */ /* * Test UTF-8 to/from legacy charset (Windows 950)... @@ -416,17 +460,17 @@ main(int argc, /* I - Argument Count */ fputs("cupsCharsetToUTF8(CUPS_WINDOWS_950): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_WINDOWS_950); - if (len != strlen((char *)utf8taiwan)) + if ((size_t)len != strlen((char *)utf8taiwan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8taiwan)); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8taiwan, utf8dest, len)) + else if (memcmp(utf8taiwan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8taiwan", utf8taiwan); @@ -462,17 +506,17 @@ main(int argc, /* I - Argument Count */ fputs("cupsCharsetToUTF8(CUPS_EUC_TW): ", stdout); - strcpy(legsrc, legdest); + strlcpy(legsrc, legdest, sizeof(legsrc)); len = cupsCharsetToUTF8(utf8dest, legsrc, 1024, CUPS_EUC_TW); - if (len != strlen((char *)utf8taiwan)) + if ((size_t)len != strlen((char *)utf8taiwan)) { printf("FAIL (len=%d, expected %d)\n", len, (int)strlen((char *)utf8taiwan)); print_utf8(" utf8taiwan", utf8taiwan); print_utf8(" utf8dest", utf8dest); errors ++; } - else if (memcmp(utf8taiwan, utf8dest, len)) + else if (memcmp(utf8taiwan, utf8dest, (size_t)len)) { puts("FAIL (results do not match)"); print_utf8(" utf8taiwan", utf8taiwan); @@ -496,7 +540,7 @@ main(int argc, /* I - Argument Count */ print_utf8(" utf8good ", utf8good); print_utf32(" utf32dest", utf32dest); } - memcpy (utf32src, utf32dest, (len + 1) * sizeof(cups_utf32_t)); + memcpy(utf32src, utf32dest, (len + 1) * sizeof(cups_utf32_t)); len = cupsUTF32ToUTF8(utf8dest, utf32src, 1024); if (len < 0) return (1); @@ -555,8 +599,3 @@ print_utf8(const char *msg, /* I - Message String */ putchar('\n'); } - - -/* - * End of "$Id: testi18n.c 7560 2008-05-13 06:34:04Z mike $" - */