1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker * 5*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*8d67ca89SAndroid Build Coastguard Worker * are met: 8*8d67ca89SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 9*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in 12*8d67ca89SAndroid Build Coastguard Worker * the documentation and/or other materials provided with the 13*8d67ca89SAndroid Build Coastguard Worker * distribution. 14*8d67ca89SAndroid Build Coastguard Worker * 15*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16*8d67ca89SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17*8d67ca89SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18*8d67ca89SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19*8d67ca89SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21*8d67ca89SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22*8d67ca89SAndroid Build Coastguard Worker * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23*8d67ca89SAndroid Build Coastguard Worker * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24*8d67ca89SAndroid Build Coastguard Worker * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25*8d67ca89SAndroid Build Coastguard Worker * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 27*8d67ca89SAndroid Build Coastguard Worker */ 28*8d67ca89SAndroid Build Coastguard Worker 29*8d67ca89SAndroid Build Coastguard Worker #pragma once 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker /** 32*8d67ca89SAndroid Build Coastguard Worker * @file iconv.h 33*8d67ca89SAndroid Build Coastguard Worker * @brief Character encoding conversion. 34*8d67ca89SAndroid Build Coastguard Worker */ 35*8d67ca89SAndroid Build Coastguard Worker 36*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 37*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 38*8d67ca89SAndroid Build Coastguard Worker 39*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 40*8d67ca89SAndroid Build Coastguard Worker 41*8d67ca89SAndroid Build Coastguard Worker /* If we just use void* in the typedef, the compiler exposes that in error messages. */ 42*8d67ca89SAndroid Build Coastguard Worker struct __iconv_t; 43*8d67ca89SAndroid Build Coastguard Worker 44*8d67ca89SAndroid Build Coastguard Worker /** 45*8d67ca89SAndroid Build Coastguard Worker * The `iconv_t` type that represents an instance of a converter. 46*8d67ca89SAndroid Build Coastguard Worker */ 47*8d67ca89SAndroid Build Coastguard Worker typedef struct __iconv_t* iconv_t; 48*8d67ca89SAndroid Build Coastguard Worker 49*8d67ca89SAndroid Build Coastguard Worker /** 50*8d67ca89SAndroid Build Coastguard Worker * [iconv_open(3)](https://man7.org/linux/man-pages/man3/iconv_open.3.html) allocates a new converter 51*8d67ca89SAndroid Build Coastguard Worker * from `__src_encoding` to `__dst_encoding`. 52*8d67ca89SAndroid Build Coastguard Worker * 53*8d67ca89SAndroid Build Coastguard Worker * Android supports the `utf8`, `ascii`, `usascii`, `utf16be`, `utf16le`, `utf32be`, `utf32le`, 54*8d67ca89SAndroid Build Coastguard Worker * and `wchart` encodings for both source and destination. 55*8d67ca89SAndroid Build Coastguard Worker * 56*8d67ca89SAndroid Build Coastguard Worker * Android supports the GNU `//IGNORE` and `//TRANSLIT` extensions for the 57*8d67ca89SAndroid Build Coastguard Worker * destination encoding. 58*8d67ca89SAndroid Build Coastguard Worker * 59*8d67ca89SAndroid Build Coastguard Worker * Returns a new `iconv_t` on success and returns `((iconv_t) -1)` and sets `errno` on failure. 60*8d67ca89SAndroid Build Coastguard Worker * 61*8d67ca89SAndroid Build Coastguard Worker * Available since API level 28. 62*8d67ca89SAndroid Build Coastguard Worker */ 63*8d67ca89SAndroid Build Coastguard Worker 64*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28) 65*8d67ca89SAndroid Build Coastguard Worker iconv_t _Nonnull iconv_open(const char* _Nonnull __dst_encoding, const char* _Nonnull __src_encoding) __INTRODUCED_IN(28); 66*8d67ca89SAndroid Build Coastguard Worker 67*8d67ca89SAndroid Build Coastguard Worker /** 68*8d67ca89SAndroid Build Coastguard Worker * [iconv(3)](https://man7.org/linux/man-pages/man3/iconv.3.html) converts characters from one 69*8d67ca89SAndroid Build Coastguard Worker * encoding to another. 70*8d67ca89SAndroid Build Coastguard Worker * 71*8d67ca89SAndroid Build Coastguard Worker * Returns the number of characters converted on success and returns `((size_t) -1)` and 72*8d67ca89SAndroid Build Coastguard Worker * sets `errno` on failure. 73*8d67ca89SAndroid Build Coastguard Worker * 74*8d67ca89SAndroid Build Coastguard Worker * Available since API level 28. 75*8d67ca89SAndroid Build Coastguard Worker */ 76*8d67ca89SAndroid Build Coastguard Worker size_t iconv(iconv_t _Nonnull __converter, char* _Nullable * _Nullable __src_buf, size_t* __BIONIC_COMPLICATED_NULLNESS __src_bytes_left, char* _Nullable * _Nullable __dst_buf, size_t* __BIONIC_COMPLICATED_NULLNESS __dst_bytes_left) __INTRODUCED_IN(28); 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker /** 79*8d67ca89SAndroid Build Coastguard Worker * [iconv_close(3)](https://man7.org/linux/man-pages/man3/iconv_close.3.html) deallocates a converter 80*8d67ca89SAndroid Build Coastguard Worker * returned by iconv_open(). 81*8d67ca89SAndroid Build Coastguard Worker * 82*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success and returns -1 and sets `errno` on failure. 83*8d67ca89SAndroid Build Coastguard Worker * 84*8d67ca89SAndroid Build Coastguard Worker * Available since API level 28. 85*8d67ca89SAndroid Build Coastguard Worker */ 86*8d67ca89SAndroid Build Coastguard Worker int iconv_close(iconv_t _Nonnull __converter) __INTRODUCED_IN(28); 87*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */ 88*8d67ca89SAndroid Build Coastguard Worker 89*8d67ca89SAndroid Build Coastguard Worker 90*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 91