2727#include < sys/wait.h>
2828#include " pdf2htmlEX.h"
2929
30+ class CCharGC {
31+ private:
32+ JNIEnv *env;
33+ jstring input;
34+ const char * cstr;
35+
36+ public:
37+ CCharGC (JNIEnv *env, jstring input) : env(env), input(input) {
38+ this ->cstr = env->GetStringUTFChars (input, nullptr );
39+ }
40+
41+ const char * c_str () const {
42+ return this ->cstr ;
43+ }
44+
45+ ~CCharGC () {
46+ env->ReleaseStringUTFChars (this ->input , this ->cstr );
47+ }
48+ };
49+
3050// Creating char ** by hand is rather annoying.
3151// I'll rather take vector<string> and convert it before calling.
3252void vector_to_char_pp (const std::vector<const std::string> & input, int * argc, char *** argv) {
@@ -56,11 +76,10 @@ JNIEXPORT void JNICALL
5676Java_com_viliussutkus89_android_pdf2htmlex_pdf2htmlEX_set_1environment_1value (JNIEnv *env, jobject,
5777 jstring key_,
5878 jstring value_) {
59- const char * key = env->GetStringUTFChars (key_, nullptr );
60- const char * value = env->GetStringUTFChars (value_, nullptr );
61- setenv (key, value, 1 );
62- env->ReleaseStringUTFChars (key_, key);
63- env->ReleaseStringUTFChars (value_, value);
79+ CCharGC key (env, key_);
80+ CCharGC value (env, value_);
81+ setenv (key.c_str (), value.c_str (), 1 );
82+ }
6483}
6584
6685extern " C"
@@ -70,18 +89,18 @@ Java_com_viliussutkus89_android_pdf2htmlex_pdf2htmlEX_call_1pdf2htmlEX(JNIEnv *e
7089 jstring popplerDir_, jstring tmpDir_,
7190 jstring inputFile_,
7291 jstring outputFile_) {
73- const char * dataDir = env-> GetStringUTFChars (dataDir_, nullptr );
74- const char * popplerDir = env-> GetStringUTFChars (popplerDir_, nullptr );
75- const char * tmpDir = env-> GetStringUTFChars (tmpDir_, nullptr );
76- const char * inputFile = env-> GetStringUTFChars (inputFile_, nullptr );
77- const char * outputFile = env-> GetStringUTFChars (outputFile_, nullptr );
92+ CCharGC dataDir (env, dataDir_ );
93+ CCharGC popplerDir (env, popplerDir_ );
94+ CCharGC tmpDir (env, tmpDir_ );
95+ CCharGC inputFile (env, inputFile_ );
96+ CCharGC outputFile (env, outputFile_ );
7897
7998 std::vector<const std::string> args = {
8099 " libpdf2htmlEX" ,
81- " --data-dir" , dataDir,
82- " --poppler-data-dir" , popplerDir,
83- " --tmp-dir" , tmpDir,
84- inputFile, outputFile
100+ " --data-dir" , dataDir. c_str () ,
101+ " --poppler-data-dir" , popplerDir. c_str () ,
102+ " --tmp-dir" , tmpDir. c_str () ,
103+ inputFile. c_str () , outputFile. c_str ()
85104 };
86105
87106 int argc;
@@ -112,10 +131,5 @@ Java_com_viliussutkus89_android_pdf2htmlex_pdf2htmlEX_call_1pdf2htmlEX(JNIEnv *e
112131 }
113132 delete argv;
114133
115- env->ReleaseStringUTFChars (dataDir_, dataDir);
116- env->ReleaseStringUTFChars (popplerDir_, popplerDir);
117- env->ReleaseStringUTFChars (tmpDir_, tmpDir);
118- env->ReleaseStringUTFChars (inputFile_, inputFile);
119- env->ReleaseStringUTFChars (outputFile_, outputFile);
120134 return retVal;
121135}
0 commit comments