Skip to content

Commit 4a9c368

Browse files
Too lazy to env->(Get,Release)StringUTFChars. Let RAII do it.
1 parent 48e3973 commit 4a9c368

1 file changed

Lines changed: 33 additions & 19 deletions

File tree

pdf2htmlEX/src/main/cpp/pdf2htmlEX.cc

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,26 @@
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.
3252
void vector_to_char_pp(const std::vector<const std::string> & input, int * argc, char *** argv) {
@@ -56,11 +76,10 @@ JNIEXPORT void JNICALL
5676
Java_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

6685
extern "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

Comments
 (0)