---
name: "libiconv_iconvctl"
section: "3"
platform: "linux"
package: "libiconv"
version: "1.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libiconv_iconvctl"
---

# libiconv\_iconvctl(3)

control iconv behavior

## NAME

iconvctl - control iconv behavior

## SYNOPSIS

```
#include <iconv.h>

int iconvctl (iconv_t cd , int request, void * argument);
```

## DESCRIPTION

The argument *cd* must be a conversion descriptor created using the function **iconv\_open**.

**iconvctl** queries or adjusts the behavior of the **iconv** function, when invoked with the specified conversion descriptor, depending on the request value.

## REQUEST VALUES

The following are permissible values for the *request* parameter.

- **ICONV\_TRIVIALP**

  *argument* should be an **int \*** which will receive 1 if the conversion is trivial, or 0 otherwise.

- **ICONV\_GET\_TRANSLITERATE**

  *argument* should be an **int \*** which will receive 1 if  transliteration is enabled in the conversion, or 0 otherwise.

- **ICONV\_SET\_TRANSLITERATE**

  *argument* should be a **const int \***, pointing to an **int** value. A non-zero value is used to enable transliteration in the conversion. A zero value disables it.

- **ICONV\_GET\_DISCARD\_INVALID**

  *argument* should be an **int \*** which will receive 1 if "discard invalid multibyte sequence from the input and continue" is enabled in the conversion, or 0 otherwise.

- **ICONV\_SET\_DISCARD\_INVALID**

  *argument* should be a **const int \***, pointing to an **int** value. A non-zero value is used to enable "discard invalid multibyte sequence from the input and continue" in the conversion. A zero value disables it.

- **ICONV\_GET\_DISCARD\_NON\_IDENTICAL**

  *argument* should be an **int \*** which will receive 1 if "discard character that cannot be represented in the target character set and continue" is enabled in the conversion, or 0 otherwise.

- **ICONV\_SET\_DISCARD\_NON\_IDENTICAL**

  *argument* should be a **const int \***, pointing to an **int** value. A non-zero value is used to enable "discard character that cannot be represented in the target character set and continue" in the conversion. A zero value disables it.

- **ICONV\_GET\_DISCARD\_ILSEQ**

  *argument* should be an **int \*** which will receive 1 if both "discard" behaviours are enabled in the conversion, or 0 otherwise.

- **ICONV\_SET\_DISCARD\_ILSEQ**

  *argument* should be a **const int \***, pointing to an **int** value. A non-zero value is used to enable both "discard" behaviours in the conversion. A zero value disables them.

- **ICONV\_GET\_FROM\_SURFACE**

  *argument* should be an **unsigned int \*** which will receive the from-side (input side) surface of the conversion.

- **ICONV\_SET\_FROM\_SURFACE**

  *argument* should be a **const unsigned int \***, pointing to an **unsigned int** value.  This value is installed as the from-side (input side) surface of the conversion.  The value is a bit mask.  Zero denotes no surface.  The value **ICONV\_SURFACE\_EBCDIC\_ZOS\_UNIX** has an effect on EBCDIC encodings: The EBCDIC newline 0x15 will get mapped to LF instead of NEL.

- **ICONV\_GET\_TO\_SURFACE**

  *argument* should be an **unsigned int \*** which will receive the to-side (output side) surface of the conversion.

- **ICONV\_SET\_TO\_SURFACE**

  *argument* should be a **const unsigned int \***, pointing to an **unsigned int** value.  This value is installed as the to-side (output side) surface of the conversion.  The value is a bit mask.  Zero denotes no surface.  The value **ICONV\_SURFACE\_EBCDIC\_ZOS\_UNIX** has an effect on EBCDIC encodings: LF, instead of NEL, will get mapped to the EBCDIC newline 0x15.

## RETURN VALUE

The **iconvctl** function returns 0 if it succeeds. In case of error, it sets **errno** and returns -1.

## ERRORS

The following errors can occur, among others:

- **EINVAL**

  The request is invalid.

## CONFORMING TO

This function is implemented only in GNU libiconv and not in other **iconv** implementations. It is not backed by a standard. You can test for its presence through **(\_LIBICONV\_VERSION \>= 0x0108)**.

## SEE ALSO

[**iconv\_open**(3)](/iconv_open/3.md) [**iconv**(3)](/iconv/3.md)
