+
+// VS: glibc 2.1.3 is broken in that iconv() conversion to/from UCS4 fails with E2BIG
+// if output buffer is _exactly_ as big as needed. Such case is (unless there's
+// yet another bug in glibc) the only case when iconv() returns with (size_t)-1
+// (which means error) and says there are 0 bytes left in the input buffer --
+// when _real_ error occurs, bytes-left-in-input buffer is non-zero. Hence,
+// this alternative test for iconv() failure.
+// [This bug does not appear in glibc 2.2.]
+#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ <= 1
+#define ICONV_FAILED(cres, bufLeft) ((cres == (size_t)-1) && \
+ (errno != E2BIG || bufLeft != 0))
+#else
+#define ICONV_FAILED(cres, bufLeft) (cres == (size_t)-1)
+#endif
+