[Windows] Remove redundant DirectSound error codes
[xbmc.git] / xbmc / platform / android / activity / JNIXBMCFile.cpp
blobefff89a64e517f7a912b14c4ddd47c08c6a522e4
1 /*
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.
7 */
9 #include "JNIXBMCFile.h"
11 #include "CompileInfo.h"
12 #include "utils/FileUtils.h"
13 #include "utils/log.h"
15 #include <memory>
17 #include <androidjni/jutils-details.hpp>
19 #define BUFFSIZE 8192
21 using namespace jni;
23 static std::string s_className = std::string(CCompileInfo::GetClass()) + "/XBMCFile";
25 CJNIXBMCFile::CJNIXBMCFile()
26 : CJNIBase()
30 void CJNIXBMCFile::RegisterNatives(JNIEnv *env)
32 jclass cClass = env->FindClass(s_className.c_str());
33 if(cClass)
35 JNINativeMethod methods[] =
37 {"_open", "(Ljava/lang/String;)Z", (void*)&CJNIXBMCFile::_open},
38 {"_close", "()V", (void*)&CJNIXBMCFile::_close},
39 {"_read", "()[B", (void*)&CJNIXBMCFile::_read},
40 {"_eof", "()Z", (void*)&CJNIXBMCFile::_eof},
43 env->RegisterNatives(cClass, methods, sizeof(methods)/sizeof(methods[0]));
47 jboolean CJNIXBMCFile::_open(JNIEnv *env, jobject thiz, jstring path)
49 std::string strPath = jcast<std::string>(jhstring::fromJNI(path));
51 if (find_instance(thiz))
52 return false;
54 if (!XFILE::CFile::Exists(strPath))
55 return false;
57 CJNIXBMCFile* file = new CJNIXBMCFile();
58 file->m_file = std::make_unique<XFILE::CFile>();
59 bool ret = file->m_file->Open(strPath);
60 if (!ret)
62 delete file;
63 return false;
66 jhobject jo = jhobject::fromJNI(thiz);
67 jo.setGlobal();
68 add_instance(jo, file);
69 file->m_eof = false;
70 return true;
73 void CJNIXBMCFile::_close(JNIEnv *env, jobject thiz)
75 CJNIXBMCFile *inst = find_instance(thiz);
76 if (inst)
78 inst->m_file->Close();
79 remove_instance(inst);
80 delete inst;
84 jbyteArray CJNIXBMCFile::_read(JNIEnv *env, jobject thiz)
86 ssize_t sz = 0;
87 char buffer[BUFFSIZE];
89 CJNIXBMCFile *inst = find_instance(thiz);
90 if (inst && inst->m_file)
92 sz = inst->m_file->Read((void*)buffer, BUFFSIZE);
93 if (sz <= 0)
95 inst->m_eof = true;
96 sz = 0;
100 jbyteArray jba = NULL;
101 char* pArray;
102 jba = env->NewByteArray(sz);
103 if ((pArray = (char*)env->GetPrimitiveArrayCritical(jba, NULL)))
105 memcpy(pArray, buffer, sz);
106 env->ReleasePrimitiveArrayCritical(jba, pArray, 0);
109 return jba;
112 jboolean CJNIXBMCFile::_eof(JNIEnv *env, jobject thiz)
114 CJNIXBMCFile *inst = find_instance(thiz);
115 if (inst)
116 return inst->m_eof;
118 return true;