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; }