summaryrefslogtreecommitdiff
path: root/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-11-04 20:59:39 +0100
committerJosJuice <josjuice@gmail.com>2020-12-20 13:24:54 +0100
commit99ffee9a0acc3200f8c8af7b3fc58af2d38fb614 (patch)
treea15ca74f13513c29041ab7e0ba7f7c62e9d0f643 /Source/Android/jni/AndroidCommon/AndroidCommon.cpp
parent64afe97491c1b713c18a79e4cd18a0cca732ade1 (diff)
Android: Add content provider support to File::OpenFStream
Diffstat (limited to 'Source/Android/jni/AndroidCommon/AndroidCommon.cpp')
-rw-r--r--Source/Android/jni/AndroidCommon/AndroidCommon.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
index 310db6b1f7..2870044ac9 100644
--- a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
+++ b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
@@ -4,6 +4,7 @@
#include "jni/AndroidCommon/AndroidCommon.h"
+#include <ios>
#include <string>
#include <string_view>
#include <vector>
@@ -66,6 +67,28 @@ std::string OpenModeToAndroid(std::string mode)
return mode;
}
+std::string OpenModeToAndroid(std::ios_base::openmode mode)
+{
+ std::string result;
+
+ if (mode & std::ios_base::in)
+ result += 'r';
+
+ if (mode & (std::ios_base::out | std::ios_base::app))
+ result += 'w';
+
+ if (mode & std::ios_base::app)
+ result += 'a';
+
+ constexpr std::ios_base::openmode t = std::ios_base::in | std::ios_base::trunc;
+ if ((mode & t) == t)
+ result += 't';
+
+ // The 'b' specifier is not supported. Since we're on POSIX, it's fine to just skip it.
+
+ return result;
+}
+
int OpenAndroidContent(const std::string& uri, const std::string& mode)
{
JNIEnv* env = IDCache::GetEnvForThread();