/*
 * Class:     fr_umlv_unitex_jni_UnitexJni
 * Method:    writeUnitexFile
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
 */
JNIEXPORT jboolean JNICALL Java_fr_umlv_unitex_jni_UnitexJni_writeUnitexFile__Ljava_lang_String_2Ljava_lang_String_2
  (JNIEnv *env, jclass, jstring filename, jstring filecontent)
{
	jstringToCUtf jstc_filename;
	jstc_filename.initJString(env,filename);

	jsize stringSize = env->GetStringLength(filecontent);
	void* buffString = (void*)malloc(sizeof(jchar)*(stringSize+1));
	unsigned char*buffBom = (unsigned char*)buffString;
	*(buffBom++)=0xff;
	*(buffBom++)=0xfe;
	jchar* bufContent = (jchar*)buffBom;
	env->GetStringRegion(filecontent,0,stringSize,bufContent);

	if (!(is_little_endian()))
	{
		for (jsize j=0;j<stringSize;j++)
		{
			jchar c=*(bufContent+j);
			*(((unsigned char*)(bufContent+j))+0) = (unsigned char)(c & 0xff);
			*(((unsigned char*)(bufContent+j))+1) = (unsigned char)(c >> 8);
		}
	}
	jboolean ret= (WriteUnitexFile(jstc_filename.getJString(),buffString,sizeof(jchar)*(stringSize+1),NULL,0) == 0);
	free(buffString);
	return ret;
}
/**
 * Write an Unitex file content (to system filesystem or filespace)
 * it write from two buffer (prefix and suffix). This is useful for writing both header and footer (or BOM and text...)
 */
    UNITEX_FUNC int UNITEX_CALL WriteUnicodeUnitexFile(const char*filename, icu::UnicodeString const& uString)
    {
        UChar uBom = 0xfeff;

        const UChar * uBuffer = uString.getBuffer();
        int32_t uLength = uString.length();

        bool result = WriteUnitexFile(filename, &uBom, sizeof(UChar), uBuffer, uLength * sizeof(UChar)) == 0;

        return result;
    }
/*
 * Class:     fr_umlv_unitex_jni_UnitexJni
 * Method:    writeUnitexFile
 * Signature: (Ljava/lang/String;[B)Z
 */
JNIEXPORT jboolean JNICALL Java_fr_umlv_unitex_jni_UnitexJni_writeUnitexFile__Ljava_lang_String_2_3B
  (JNIEnv *env, jclass, jstring filename, jbyteArray filedata)
{
	jstringToCUtf jstc_filename;
	jstc_filename.initJString(env,filename);
	jsize len = env->GetArrayLength(filedata);
	jbyte * buffer=env->GetByteArrayElements(filedata,NULL);
	
	jboolean retValue= (WriteUnitexFile(jstc_filename.getJString(),buffer,len,NULL,0) == 0);
	env->ReleaseByteArrayElements(filedata,buffer,0);
	return retValue;
}
static jboolean doWriteUnitexFileUtf(JNIEnv* env,jstring filename,jstring filecontent,jboolean hasBom)
{
	jstringToCUtf jstc_filename;
	jstc_filename.initJString(env,filename);

	
	jstringToCUtf jstc_content;
	jstc_content.initJString(env,filecontent);

	const unsigned char UTF8BOM[3] = { 0xef,0xbb,0xbf };

	jboolean ret= (WriteUnitexFile(jstc_filename.getJString(),UTF8BOM,hasBom ? 3:0,
									jstc_content.getJString(),strlen(jstc_content.getJString())) == 0);
	return ret;
}