2 * Copyright (C) 2018 Christian Browet
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "JNIXBMCFile.h"
11 #include "CompileInfo.h"
12 #include "utils/FileUtils.h"
13 #include "utils/log.h"
15 #include <androidjni/jutils-details.hpp>
21 static std::string s_className
= std::string(CCompileInfo::GetClass()) + "/XBMCFile";
23 CJNIXBMCFile::CJNIXBMCFile()
28 void CJNIXBMCFile::RegisterNatives(JNIEnv
*env
)
30 jclass cClass
= env
->FindClass(s_className
.c_str());
33 JNINativeMethod methods
[] =
35 {"_open", "(Ljava/lang/String;)Z", (void*)&CJNIXBMCFile::_open
},
36 {"_close", "()V", (void*)&CJNIXBMCFile::_close
},
37 {"_read", "()[B", (void*)&CJNIXBMCFile::_read
},
38 {"_eof", "()Z", (void*)&CJNIXBMCFile::_eof
},
41 env
->RegisterNatives(cClass
, methods
, sizeof(methods
)/sizeof(methods
[0]));
45 jboolean
CJNIXBMCFile::_open(JNIEnv
*env
, jobject thiz
, jstring path
)
47 std::string strPath
= jcast
<std::string
>(jhstring::fromJNI(path
));
49 if (find_instance(thiz
))
52 if (!XFILE::CFile::Exists(strPath
))
55 CJNIXBMCFile
* file
= new CJNIXBMCFile();
56 file
->m_file
.reset(new XFILE::CFile());
57 bool ret
= file
->m_file
->Open(strPath
);
64 jhobject jo
= jhobject::fromJNI(thiz
);
66 add_instance(jo
, file
);
71 void CJNIXBMCFile::_close(JNIEnv
*env
, jobject thiz
)
73 CJNIXBMCFile
*inst
= find_instance(thiz
);
76 inst
->m_file
->Close();
77 remove_instance(inst
);
82 jbyteArray
CJNIXBMCFile::_read(JNIEnv
*env
, jobject thiz
)
85 char buffer
[BUFFSIZE
];
87 CJNIXBMCFile
*inst
= find_instance(thiz
);
88 if (inst
&& inst
->m_file
)
90 sz
= inst
->m_file
->Read((void*)buffer
, BUFFSIZE
);
98 jbyteArray jba
= NULL
;
100 jba
= env
->NewByteArray(sz
);
101 if ((pArray
= (char*)env
->GetPrimitiveArrayCritical(jba
, NULL
)))
103 memcpy(pArray
, buffer
, sz
);
104 env
->ReleasePrimitiveArrayCritical(jba
, pArray
, 0);
110 jboolean
CJNIXBMCFile::_eof(JNIEnv
*env
, jobject thiz
)
112 CJNIXBMCFile
*inst
= find_instance(thiz
);