1 /* Conversion to UTF-8/UTF-16/UTF-32 from legacy encodings. 2 Copyright (C) 2002, 2006-2007, 2009-2021 Free Software Foundation, Inc. 3 4 This file is free software: you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as 6 published by the Free Software Foundation; either version 2.1 of the 7 License, or (at your option) any later version. 8 9 This file is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public License 15 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 16 17 UNIT * 18 FUNC (const char *string, /* */ 19 const char *fromcode, 20 enum iconv_ilseq_handler handler) 21 { 22 UNIT *result; 23 size_t length; 24 25 result = 26 U_CONV_FROM_ENCODING (fromcode, handler, 27 string, strlen (string) + 1, NULL, 28 NULL, &length); 29 if (result == NULL) 30 return NULL; 31 /* Verify the result has exactly one NUL unit, at the end. */ 32 if (!(length > 0 && result[length-1] == 0 33 && U_STRLEN (result) == length-1)) 34 { 35 free (result); 36 errno = EILSEQ; 37 return NULL; 38 } 39 return result; 40 }