Annotation of embedaddon/libiconv/tests/test-shiftseq.c, revision 1.1
1.1 ! misho 1: /* Copyright (C) 2008 Free Software Foundation, Inc.
! 2: This file is part of the GNU LIBICONV Library.
! 3:
! 4: The GNU LIBICONV Library is free software; you can redistribute it
! 5: and/or modify it under the terms of the GNU Library General Public
! 6: License as published by the Free Software Foundation; either version 2
! 7: of the License, or (at your option) any later version.
! 8:
! 9: The GNU LIBICONV Library is distributed in the hope that it will be
! 10: useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 12: Library General Public License for more details.
! 13:
! 14: You should have received a copy of the GNU Library General Public
! 15: License along with the GNU LIBICONV Library; see the file COPYING.LIB.
! 16: If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
! 17: Fifth Floor, Boston, MA 02110-1301, USA. */
! 18:
! 19: #include "config.h"
! 20:
! 21: #include <stdlib.h>
! 22: #include <iconv.h>
! 23: #include <errno.h>
! 24:
! 25: /* This test checks that the behaviour of iconv() in the situation of an
! 26: invalid multibyte character after a shift sequence is consistent whether
! 27: the entire buffer is passed at once, or whether it is passed in two
! 28: subsequent calls. Based on a bug report from
! 29: Roman Rybalko <roman_rybalko@users.sourceforge.net>
! 30: at <http://savannah.gnu.org/bugs/?24216>. */
! 31:
! 32: void main1 (void)
! 33: {
! 34: static const char input[] = "+2D/YQNhB";
! 35: iconv_t cd;
! 36: char buf[20];
! 37:
! 38: const char * inptr;
! 39: size_t inleft;
! 40: char * outptr;
! 41: size_t outleft;
! 42:
! 43: cd = iconv_open ("UTF-8", "UTF-7");
! 44: {
! 45: size_t r;
! 46:
! 47: inptr = input;
! 48: inleft = 9;
! 49: outptr = buf;
! 50: outleft = sizeof (buf);
! 51: r = iconv (cd, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft);
! 52: /*
! 53: printf ("r = %d errno = %d inconsumed = %d outproduced = %d\n",
! 54: r, errno, inptr - input, outptr - buf);
! 55: // glibc:
! 56: // r = -1 errno = 84 inconsumed = 4 outproduced = 0
! 57: // libiconv:
! 58: // r = -1 errno = 84 inconsumed = 1 outproduced = 0
! 59: */
! 60: if (!(r == (size_t)(-1) && errno == EILSEQ
! 61: && inptr - input == 1 && outptr - buf == 0))
! 62: abort();
! 63: }
! 64: }
! 65:
! 66: void main2 (void)
! 67: {
! 68: static const char input[] = "+2D/YQNhB";
! 69: iconv_t cd;
! 70: char buf[20];
! 71:
! 72: const char * inptr;
! 73: size_t inleft;
! 74: char * outptr;
! 75: size_t outleft;
! 76:
! 77: cd = iconv_open ("UTF-8", "UTF-7");
! 78: {
! 79: size_t r;
! 80:
! 81: inptr = input;
! 82: inleft = 5;
! 83: outptr = buf;
! 84: outleft = sizeof (buf);
! 85: r = iconv (cd, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft);
! 86: /*
! 87: printf ("r = %d errno = %d inconsumed = %d outproduced = %d\n",
! 88: r, errno, inptr - input, outptr - buf);
! 89: // glibc:
! 90: // r = -1 errno = 84 (EILSEQ) inconsumed = 4 outproduced = 0
! 91: // libiconv:
! 92: // r = -1 errno = 22 (EINVAL) inconsumed = 1 outproduced = 0
! 93: */
! 94: if (!(r == (size_t)(-1) && errno == EINVAL
! 95: && inptr - input == 1 && outptr - buf == 0))
! 96: abort();
! 97:
! 98: inleft = input + 20 - inptr;
! 99: r = iconv (cd, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft);
! 100: /*
! 101: printf ("r = %d errno = %d inconsumed = %d outproduced = %d\n",
! 102: r, errno, inptr - input, outptr - buf);
! 103: // glibc:
! 104: // r = -1 errno = 84 (EILSEQ) inconsumed = 4 outproduced = 0
! 105: // libiconv:
! 106: // r = -1 errno = 84 (EILSEQ) inconsumed = 1 outproduced = 0
! 107: */
! 108: if (!(r == (size_t)(-1) && errno == EILSEQ
! 109: && inptr - input == 1 && outptr - buf == 0))
! 110: abort();
! 111: }
! 112: }
! 113:
! 114: int main ()
! 115: {
! 116: main1 ();
! 117: main2 ();
! 118: return 0;
! 119: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>