1 /*******************************************************************************
2 
3     D binding for the POSIX iconv library.
4 
5     Defines external functions required to use iconv codeset conversion
6     function.
7 
8     iconv_open(3)   Allocates the descriptor for code conversion
9     iconv(3)        Performs the conversion
10     iconvctl(3)     Control iconv behavior
11     iconv_close(3)  Deallocates allocated resources
12 
13     Copyright:  Copyright (c) 2016 Sociomantic Labs. All rights reserved.
14     License:    $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
15     Authors:    Nemanja Boric
16     Standards:  POSIX.1-2001, POSIX.1-2008
17     See_Also:
18        http://pubs.opengroup.org/onlinepubs/009695399/functions/iconv_open.html
19 
20 *******************************************************************************/
21 
22 module core.sys.posix.iconv;
23 
24 enum
25 {
26     ICONV_TRIVIALP            = 0,  /* int *argument */
27     ICONV_GET_TRANSLITERATE   = 1,  /* int *argument */
28     ICONV_SET_TRANSLITERATE   = 2,  /* const int *argument */
29     ICONV_GET_DISCARD_ILSEQ   = 3,  /* int *argument */
30     ICONV_SET_DISCARD_ILSEQ   = 4,  /* const int *argument */
31 }
32 
33 version (Posix):
34 extern (C):
35 nothrow:
36 @nogc:
37 
38 
39 alias void* iconv_t;
40 
41 /// Allocate descriptor for code conversion from codeset FROMCODE to
42 /// codeset TOCODE.
43 iconv_t iconv_open (const scope char* tocode, const scope char* fromcode);
44 
45 /// Convert at most *INBYTESLEFT bytes from *INBUF according to the
46 /// code conversion algorithm specified by CD and place up to
47 /// *OUTBYTESLEFT bytes in buffer at *OUTBUF.
48 size_t iconv (iconv_t cd, const scope char** inbuf,
49          size_t* inbytesleft,
50          char** outbuf,
51          size_t* outbytesleft);
52 
53 /// iconvctl queries or adjusts the behavior of the iconv function,
54 /// when invoked with the specified conversion descriptor,
55 /// depending on the request value.
56 int iconvctl (iconv_t cd, int request, void* argument);
57 
58 /// Free resources allocated for descriptor CD for code conversion.
59 int iconv_close (iconv_t cd);