[Filesystem] Fix the position property when writing non-single-byte-signs 18/247918/3
authorPiotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics <p.kosko@samsung.com>
Wed, 18 Nov 2020 08:15:07 +0000 (09:15 +0100)
committerPiotr Kosko <p.kosko@samsung.com>
Wed, 18 Nov 2020 10:57:13 +0000 (10:57 +0000)
[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
src/filesystem/js/file_stream.js

index dc698bb8aa3a2bfc94df74309791cb5defc72628..2fb8ea6dee4e93aa56717a6cdcc16e867a6685a1 100644 (file)
@@ -411,18 +411,18 @@ void FilesystemInstance::FileWriteString(const picojson::value& args, picojson::
       std::vector<std::uint8_t> 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) {
index 7703a887adaed255cbc8cf28b15a5f10791dc2d8..ae21bd4e58bbbabd777070ae737a403143ebb4bb 100644 (file)
@@ -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;
 }