HP-UX Reference (11i v2 04/09) - 3 Library Functions A-M (vol 6)
i
iconv(3C) iconv(3C)
EXAMPLES
The following example shows how the iconv(3C) interfaces maybe used for conversions.
#include <iconv.h>
#include <errno.h>
main()
{
...
convert("roman8", "iso88591", fd);
...
}
int
convert(tocode, fromcode, Input)
char *tocode; /* tocode name */
char *fromcode /* fromcode name */
int Input; /* input file descriptor */
{
extern void error(); /* local error message */
iconv_t cd; /* conversion descriptor */
unsigned char *table; /* ptr to translation table */
int bytesread; /* num bytes read into input buffer */
unsigned char inbuf[BUFSIZ]; /* input buffer */
unsigned char *inchar; /* ptr to input character */
int inbytesleft; /* num bytes left in input buffer */
unsigned char outbuf[BUFSIZ]; /* output buffer */
unsigned char *outchar; /* ptr to output character */
int outbytesleft; /* num bytes left in output buffer */
size_t ret_val; /* number of conversions */
/* Initiate conversion -- get conversion descriptor */
if ((cd = iconv_open(tocode, fromcode)) == (iconv_t)-1) {
error(FATAL, BAD_OPEN);
}
inbytesleft = 0; /* no. of bytes converted */
/* translate the characters */
for ( ;; ) {
/*
* if any bytes are leftover, they will be in the
* beginning of the buffer on the next read().
*/
inchar = inbuf; /* points to input buffer */
outchar = outbuf; /* points to output buffer */
outbytesleft = BUFSIZ; /* no of bytes to be converted */
if ((bytesread = read(Input, inbuf+inbytesleft,
(size_t)BUFSIZ-inbytesleft)) < 0) {
perror("prog");
return BAD;
}
if (!(inbytesleft += bytesread)) {
break; /* end of conversions */
}
ret_val = iconv(cd, &inchar, &inbytesleft,
&outchar, &outbytesleft);
if (write(1, outbuf, (size_t)BUFSIZ-outbytesleft) < 0) {
perror("prog");
return BAD;
HP-UX 11i Version 2: September 2004 − 3 − Hewlett-Packard Company Section 3−−525