int ByteOrderToX(int byteOrder) { if (byteOrder == BYTE_ORDER_NATIVE) byteOrder = platformByteOrder(); switch (byteOrder) { case BYTE_ORDER_LSBFIRST: return LSBFirst; case BYTE_ORDER_MSBFIRST: return MSBFirst; default: return -1; } }
/* Could use npt but decided to cut down on linked code size */ char* SplashConvertStringAlloc(const char* in, int* size) { const char *codeset; const char *codeset_out; iconv_t cd; size_t rc; char *buf = NULL, *out; size_t bufSize, inSize, outSize; const char* old_locale; if (!in) { return NULL; } old_locale = setlocale(LC_ALL, ""); codeset = nl_langinfo(CODESET); if ( codeset == NULL || codeset[0] == 0 ) { goto done; } /* we don't need BOM in output so we choose native BE or LE encoding here */ codeset_out = (platformByteOrder()==BYTE_ORDER_MSBFIRST) ? "UCS-2BE" : "UCS-2LE"; cd = iconv_open(codeset_out, codeset); if (cd == (iconv_t)-1 ) { goto done; } inSize = strlen(in); buf = SAFE_SIZE_ARRAY_ALLOC(malloc, inSize, 2); if (!buf) { return NULL; } bufSize = inSize*2; // need 2 bytes per char for UCS-2, this is // 2 bytes per source byte max out = buf; outSize = bufSize; /* linux iconv wants char** source and solaris wants const char**... cast to void* */ rc = iconv(cd, (void*)&in, &inSize, &out, &outSize); iconv_close(cd); if (rc == (size_t)-1) { free(buf); buf = NULL; } else { if (size) { *size = (bufSize-outSize)/2; /* bytes to wchars */ } } done: setlocale(LC_ALL, old_locale); return buf; }