From 6809ac737ae8db2aedaeb6b4c279c306a7f16bfd Mon Sep 17 00:00:00 2001
From: "Piotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics"
Date: Wed, 18 Nov 2020 09:15:07 +0100
Subject: [PATCH] [Filesystem] Fix the position property when writing
non-single-byte-signs
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit
[Bug] When FileStream object writes non-single-byte-signs, position members
was not properly updated.
[Verification] TCT filesystem - 100%
Below code:
(function writeKoreanOldAPI(fileName) {
var dirPath = "documents/";
var fullPath = dirPath + fileName;
console.log("fullPath : " + fullPath);
console.log("fileName : " + fileName);
tizen.filesystem.resolve(fullPath, function (fileResult) {
fileResult.openStream("w", function (fileStream) {
fileStream.write("íê¸ íì¸ íì¼ì
ëë¤\n");
fileStream.write("íê¸111 íì¸ íì¼ì
ëë¤\n");
fileStream.write("íê¸22222 íì¸ íì¼ì
ëë¤\n");
fileStream.write("íê¸ íì¸ íì¼ì
ëë¤\n");
fileStream.write("íê¸ íì¸111 íì¼ì
ëë¤\n");
fileStream.write("íê¸ íì¸22222 íì¼ì
ëë¤\n");
fileStream.write("íê¸ íì¸ íì¼ì
ëë¤\n");
fileStream.write("íê¸ íì¸ íì¼ì
ëë¤111\n");
fileStream.write("íê¸ íì¸ íì¼ì
ëë¤22222\n");
fileStream.write("ê²\n");
fileStream.write("ë\n");
fileStream.close();
},
function (e) {
console.log("Error " + e.message);
}, "UTF-8");
fileResult.readAsText(
function (str) {
console.log("The file content:\n" + str);
oldAPIResult = str;
},
function (e) {
console.log("Error " + e.message);
},
"UTF-8");
},
function (e) {
console.log("Error:" + e + " Create a file.");
tizen.filesystem.resolve(dirPath, (dir) => { newFile = dir.createFile(fileName); });
writeKoreanOldAPI(fileName);
}, "rw");
})("test")
creates file with size of 302 bytes and content:
íê¸ íì¸ íì¼ì
ëë¤
íê¸111 íì¸ íì¼ì
ëë¤
íê¸22222 íì¸ íì¼ì
ëë¤
íê¸ íì¸ íì¼ì
ëë¤
íê¸ íì¸111 íì¼ì
ëë¤
íê¸ íì¸22222 íì¼ì
ëë¤
íê¸ íì¸ íì¼ì
ëë¤
íê¸ íì¸ íì¼ì
ëë¤111
íê¸ íì¸ íì¼ì
ëë¤22222
ê²
ë
Change-Id: I8ff3c158ed2b284e1cdeaa93c339952fef6915b0
---
src/filesystem/filesystem_instance.cc | 4 ++--
src/filesystem/js/file_stream.js | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/filesystem/filesystem_instance.cc b/src/filesystem/filesystem_instance.cc
index dc698bb8..2fb8ea6d 100644
--- a/src/filesystem/filesystem_instance.cc
+++ b/src/filesystem/filesystem_instance.cc
@@ -411,18 +411,18 @@ void FilesystemInstance::FileWriteString(const picojson::value& args, picojson::
std::vector data;
latin1::from_utf8(str, data);
write_file(data.data(), data.size(), location, offset, rewrite);
+ ReportSuccess(picojson::value{(double)data.size()}, out);
} else { // default: UTF-8
const std::uint8_t* buf = (const std::uint8_t*)str.c_str();
std::size_t len = str.length();
write_file(buf, len, location, offset, rewrite);
+ ReportSuccess(picojson::value{(double)str.size()}, out);
}
} catch (std::runtime_error& e) {
LoggerE("Cannot write to file %s, cause: %s", location.c_str(), e.what());
PrepareError(FilesystemError::Other, out);
return;
}
-
- ReportSuccess(out);
}
void FilesystemInstance::FileWriteBytes(const picojson::value& args, picojson::object& out) {
diff --git a/src/filesystem/js/file_stream.js b/src/filesystem/js/file_stream.js
index 7703a887..ae21bd4e 100644
--- a/src/filesystem/js/file_stream.js
+++ b/src/filesystem/js/file_stream.js
@@ -291,7 +291,8 @@ function write() {
throw new WebAPIException(WebAPIException.IO_ERR, 'Could not write');
}
can_change_size = true;
- this.position = this.position + args.stringData.length;
+ var written_bytes = native_.getResultObject(result);
+ this.position = this.position + written_bytes;
can_change_size = false;
this._rewrite = false;
}
--
2.34.1