From: Piotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics
Date: Wed, 18 Nov 2020 08:15:07 +0000 (+0100)
Subject: [Filesystem] Fix the position property when writing non-single-byte-signs
X-Git-Tag: submit/tizen/20201209.085808~6^2^2^2^2^2~1
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6809ac737ae8db2aedaeb6b4c279c306a7f16bfd;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Filesystem] Fix the position property when writing non-single-byte-signs
[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
---
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;
}