Библотека ICONV выдаёт ошибку: resource temporarily unavailable

Есть функция конвертации строки:

char* convertString(const char* inputString, const char* codePageFrom, const char* codePageTo, size_t &len)
{
	iconv_t iconvHandle = iconv_open(codePageTo, codePageFrom);

	if (iconvHandle == (iconv_t)-1)
	{
		fprintf(stderr, "iconv: cannot convert from %s to %s!\n", codePageFrom, codePageTo);
		return NULL;
	}

	size_t inputStringLength = strlen(inputString);
	size_t outputBufferSize = inputStringLength;

	char* inputBuffer = (char*)malloc(inputStringLength + 1);
	strcpy(inputBuffer, inputString);
	char* outputBuffer = (char*)malloc(outputBufferSize + 1);
	char* outBuf = outputBuffer;

	size_t errorCode = iconv(iconvHandle, &inputBuffer, &inputStringLength, &outBuf, &outputBufferSize);
	if (errorCode == -1ull)
	{
		fprintf(stderr, "iconv: conversion failed!\n");
		iconv_close(iconvHandle);
		return NULL;
	}

	if (errno != 0)
	{
		fprintf(stderr, "iconv: %s\n", strerror(errno));
		iconv_close(iconvHandle);
		return NULL;
	}

	iconv_close(iconvHandle);
	len = strlen(outputBuffer);
	return outputBuffer;
}

Вызываю так:

int main()
{
	size_t stringLength;
	char* chars = convertString("я", "UTF-8", "cp1251", stringLength);
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}

Работает, вроде, правильно.
Но если перед вызовом вызвать ещё glfwInit, то есть вот так:

int main()
{
	glfwInit();

	size_t stringLength;
	char* chars = convertString("я", "UTF-8", "cp1251", stringLength);
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}

Выдаёт ошибку:

iconv: Permission denied
Ошибка сегментирования (стек памяти сброшен на диск)

Если перенести вызов конвертации в одну из последующих функций (например, в функцию вывода текстурного шрифта), то выдаёт уже следующее:

iconv: Resource temporarily unavailable
Ошибка сегментирования (стек памяти сброшен на диск)

Есть подозрение, что в функции convertString я неправильно выделяю память :face_with_monocle: Но по-другому оно не работает :man_shrugging: Возвращает строку с нулями (ошибок в консоли при этом нет).
Код взял отсюда:

Если скопипастить код, ничего в нем не меняя, и вызвать вот так:


int main()
{
	glfwInit();

	char* chars = convert("я", "UTF-8", "cp1251");
	std::cout << "ok " << (int)chars[0] << std::endl;
	
	return 0;
}

выдаёт:

iconv: Permission denied
ok -1

То есть, выдаёт ошибку и правильный результат.
p.s. Это всё в линуксе.
p.p.s. " Ошибка сегментирования" это, видимо, потому что я обращаюсь к chars, который равен NULL. А вот другие ошибки непонятны :thinking:

Если перед вызовом iconv забить оба буфера нулями и убрать проверку errno - тогда работает. А с проверкой выдаёт Resource temporarily unavailable. Что это значит? :thinking:
Если предварительно сбросить errno в 0 - тогда ошибок нет.