/* * 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; }