diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java index a49f5b6f..46385377 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java @@ -192,7 +192,7 @@ public int open_(String filename, int mode, int sharing) throws IOException { } } - if(mode == COB_OPEN_OUTPUT) { + if (mode == COB_OPEN_OUTPUT) { this.fp.setLength(0); this.fp.seek(0); } diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java index d5e33800..86916d50 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java @@ -135,6 +135,8 @@ public int readNext(int readOpts) { } } int size = ByteBuffer.wrap(sbuff).getInt(); + size = Math.max(size, this.record_min); + size = Math.min(size, this.record_max); this.record.setSize(size); } diff --git a/tests/Makefile.am b/tests/Makefile.am index c9653eba..0006440a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -261,7 +261,8 @@ misc_DEPENDENCIES = \ misc.src/fix-subtract.at \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ - misc.src/comp1-comp2.at + misc.src/comp1-comp2.at \ + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 9075bfd1..a37c42d2 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -800,7 +800,8 @@ misc_DEPENDENCIES = \ misc.src/fix-subtract.at \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ - misc.src/comp1-comp2.at + misc.src/comp1-comp2.at \ + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/misc.at b/tests/misc.at index c6a735ff..af958f71 100644 --- a/tests/misc.at +++ b/tests/misc.at @@ -56,3 +56,4 @@ m4_include([fix-subtract.at]) m4_include([display-numeric-NUMERIC-class.at]) m4_include([display-inspect-sign.at]) m4_include([comp1-comp2.at]) +m4_include([variable-length-file.at]) diff --git a/tests/misc.src/TEST_VAR_LENGTH.txt b/tests/misc.src/TEST_VAR_LENGTH.txt new file mode 100644 index 00000000..8ab1827b Binary files /dev/null and b/tests/misc.src/TEST_VAR_LENGTH.txt differ diff --git a/tests/misc.src/variable-length-file.at b/tests/misc.src/variable-length-file.at new file mode 100644 index 00000000..9192fc1f --- /dev/null +++ b/tests/misc.src/variable-length-file.at @@ -0,0 +1,51 @@ +AT_SETUP([READING VARIABLE LENGTH FILE]) + +AT_DATA([prog.cbl], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + ENVIRONMENT DIVISION. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT TEST-FILE + ASSIGN TO "../../misc.src/TEST_VAR_LENGTH.txt". + DATA DIVISION. + FILE SECTION. + FD TEST-FILE. + 01 REC-1 PIC X(18). + 01 REC-2 PIC X(54). + PROCEDURE DIVISION. + MAIN-PARA. + MOVE SPACES TO REC-1 REC-2. + PERFORM OPEN-FILE. + PERFORM READ-REC. + PERFORM CLOSE-FILE. + STOP RUN. + + OPEN-FILE. + OPEN INPUT TEST-FILE. + + READ-REC. + DISPLAY "REC-1: " REC-1. + DISPLAY "REC-2: " REC-2. + READ TEST-FILE. + DISPLAY "REC-1: " REC-1. + DISPLAY "REC-2: " REC-2. + + CLOSE-FILE. + CLOSE TEST-FILE. +]) + +// Checking the number of bytes +AT_CHECK([od -N 4 -t x1 -An ../../misc.src/TEST_VAR_LENGTH.txt], [0], +[ 00 00 03 0e +]) + +AT_CHECK([${COMPILE} prog.cbl], [0]) +AT_CHECK([${RUN_MODULE} prog], [0], +[REC-1: @&t@ +REC-2: @&t@ +REC-1: LLL5555555555555 5 +REC-2: LLL5555555555555 555555555555L555555555555555555555555 +]) + +AT_CLEANUP \ No newline at end of file