Skip to content

Commit b76dc78

Browse files
authored
Merge pull request #41 from opensourcecobol/hotfix/move_to_national_error
Hotfix/move to national error
2 parents 289a5ee + 7227d36 commit b76dc78

File tree

3 files changed

+136
-16
lines changed

3 files changed

+136
-16
lines changed

libcob/move.c

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,19 +1859,6 @@ cob_move (cob_field *src_in, cob_field *dst)
18591859
return;
18601860
}
18611861

1862-
if (COB_FIELD_TYPE (src) != COB_TYPE_GROUP) {
1863-
if ((!(COB_FIELD_TYPE (src) == COB_TYPE_NATIONAL ||
1864-
COB_FIELD_TYPE (src) == COB_TYPE_NATIONAL_EDITED)) &&
1865-
(COB_FIELD_TYPE (dst) == COB_TYPE_NATIONAL ||
1866-
COB_FIELD_TYPE (dst) == COB_TYPE_NATIONAL_EDITED)) {
1867-
pTmp = judge_hankakujpn_exist (src, dst, &size);
1868-
if (pTmp != NULL) {
1869-
src->data = (unsigned char *)pTmp;
1870-
src->size = size;
1871-
}
1872-
}
1873-
}
1874-
18751862
/* Non-elementary move */
18761863
if (COB_FIELD_TYPE (src) == COB_TYPE_GROUP
18771864
|| COB_FIELD_TYPE (dst) == COB_TYPE_GROUP) {
@@ -1927,11 +1914,21 @@ cob_move (cob_field *src_in, cob_field *dst)
19271914
return;
19281915
}
19291916
case COB_TYPE_NATIONAL:
1917+
pTmp = judge_hankakujpn_exist (src, dst, &size);
1918+
if (pTmp != NULL) {
1919+
src->data = (unsigned char *)pTmp;
1920+
src->size = size;
1921+
}
19301922
cob_move_alphanum_to_national (src, dst);
1931-
break;
1923+
return;
19321924
case COB_TYPE_NATIONAL_EDITED:
1925+
pTmp = judge_hankakujpn_exist (src, dst, &size);
1926+
if (pTmp != NULL) {
1927+
src->data = (unsigned char *)pTmp;
1928+
src->size = size;
1929+
}
19331930
cob_move_alphanum_to_national_edited (src, dst);
1934-
break;
1931+
return;
19351932
default:
19361933
cob_move_display_to_alphanum (src, dst);
19371934
return;
@@ -2269,9 +2266,19 @@ cob_move (cob_field *src_in, cob_field *dst)
22692266
cob_move_alphanum_to_edited (src, dst);
22702267
return;
22712268
case COB_TYPE_NATIONAL_EDITED:
2269+
pTmp = judge_hankakujpn_exist (src, dst, &size);
2270+
if (pTmp != NULL) {
2271+
src->data = (unsigned char *)pTmp;
2272+
src->size = size;
2273+
}
22722274
cob_move_alphanum_to_national_edited (src, dst);
22732275
break;
22742276
case COB_TYPE_NATIONAL:
2277+
pTmp = judge_hankakujpn_exist (src, dst, &size);
2278+
if (pTmp != NULL) {
2279+
src->data = (unsigned char *)pTmp;
2280+
src->size = size;
2281+
}
22752282
cob_move_alphanum_to_national (src, dst);
22762283
break;
22772284
default:

tests/testsuite

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1907,6 +1907,7 @@ at_help_all="1;used_binaries.at:27;compiler help and information;runmisc cobc;
19071907
1309;i18n_sjis_pic-n.at:444;PIC N Move with half-width dakuten kana.;;
19081908
1310;i18n_sjis_pic-n.at:463;PIC N Move with half-width han-dakuten kana.;;
19091909
1311;i18n_sjis_pic-n.at:482;INITIALIZE PIC N.;;
1910+
1312;i18n_sjis_pic-n.at:501;PIC N Move with NUMERIC items.;;
19101911
"
19111912
# List of the all the test groups.
19121913
at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'`
@@ -1920,7 +1921,7 @@ at_fn_validate_ranges ()
19201921
for at_grp
19211922
do
19221923
eval at_value=\$$at_grp
1923-
if test $at_value -lt 1 || test $at_value -gt 1311; then
1924+
if test $at_value -lt 1 || test $at_value -gt 1312; then
19241925
$as_echo "invalid test group: $at_value" >&2
19251926
exit 1
19261927
fi
@@ -224606,3 +224607,77 @@ $at_traceon; }
224606224607
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
224607224608
read at_status <"$at_status_file"
224608224609
#AT_STOP_1311
224610+
#AT_START_1312
224611+
at_fn_group_banner 1312 'i18n_sjis_pic-n.at:501' \
224612+
"PIC N Move with NUMERIC items." " " 6
224613+
at_xfail=no
224614+
(
224615+
$as_echo "1312. $at_setup_line: testing $at_desc ..."
224616+
$at_traceon
224617+
224618+
224619+
cat >prog.cob <<'_ATEOF'
224620+
224621+
IDENTIFICATION DIVISION.
224622+
PROGRAM-ID. prog.
224623+
DATA DIVISION.
224624+
WORKING-STORAGE SECTION.
224625+
01 F0 PIC N(5).
224626+
01 F1 PIC 9(5).
224627+
01 F2 PIC S9(5).
224628+
01 F3 PIC 9(5) COMP-3.
224629+
01 F4 PIC S9(5) COMP.
224630+
PROCEDURE DIVISION.
224631+
MOVE 123 TO F1.
224632+
MOVE F1 TO F0.
224633+
DISPLAY F0.
224634+
MOVE -123 TO F2.
224635+
MOVE F2 TO F0.
224636+
DISPLAY F0.
224637+
MOVE 123 TO F3.
224638+
MOVE F3 TO F0.
224639+
DISPLAY F0.
224640+
MOVE -123 TO F4.
224641+
MOVE F4 TO F0.
224642+
DISPLAY F0.
224643+
STOP RUN.
224644+
_ATEOF
224645+
224646+
224647+
{ set +x
224648+
$as_echo "$at_srcdir/i18n_sjis_pic-n.at:529: \${COMPILE} -x prog.cob"
224649+
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "i18n_sjis_pic-n.at:529"
224650+
( $at_check_trace; ${COMPILE} -x prog.cob
224651+
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
224652+
at_status=$? at_failed=false
224653+
$at_check_filter
224654+
at_fn_diff_devnull "$at_stderr" || at_failed=:
224655+
at_fn_diff_devnull "$at_stdout" || at_failed=:
224656+
at_fn_check_status 0 $at_status "$at_srcdir/i18n_sjis_pic-n.at:529"
224657+
$at_failed && at_fn_log_failure
224658+
$at_traceon; }
224659+
224660+
{ set +x
224661+
$as_echo "$at_srcdir/i18n_sjis_pic-n.at:530: ./prog"
224662+
at_fn_check_prepare_trace "i18n_sjis_pic-n.at:530"
224663+
( $at_check_trace; ./prog
224664+
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
224665+
at_status=$? at_failed=false
224666+
$at_check_filter
224667+
at_fn_diff_devnull "$at_stderr" || at_failed=:
224668+
echo >>"$at_stdout"; $as_echo "�O�O�P�Q�R
224669+
�O�O�P�Q��
224670+
�O�O�P�Q�R
224671+
�O�O�P�Q��
224672+
" | \
224673+
$at_diff - "$at_stdout" || at_failed=:
224674+
at_fn_check_status 0 $at_status "$at_srcdir/i18n_sjis_pic-n.at:530"
224675+
$at_failed && at_fn_log_failure
224676+
$at_traceon; }
224677+
224678+
224679+
set +x
224680+
$at_times_p && times >"$at_times_file"
224681+
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
224682+
read at_status <"$at_status_file"
224683+
#AT_STOP_1312

tests/testsuite.src/i18n_sjis_pic-n.at

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,3 +497,41 @@ AT_CHECK([${COMPILE} -x prog.cob], [0])
497497
AT_CHECK([./prog], [0], [�@�@�@�@�@])
498498

499499
AT_CLEANUP
500+
501+
AT_SETUP([PIC N Move with NUMERIC items.])
502+
503+
AT_DATA([prog.cob], [
504+
IDENTIFICATION DIVISION.
505+
PROGRAM-ID. prog.
506+
DATA DIVISION.
507+
WORKING-STORAGE SECTION.
508+
01 F0 PIC N(5).
509+
01 F1 PIC 9(5).
510+
01 F2 PIC S9(5).
511+
01 F3 PIC 9(5) COMP-3.
512+
01 F4 PIC S9(5) COMP.
513+
PROCEDURE DIVISION.
514+
MOVE 123 TO F1.
515+
MOVE F1 TO F0.
516+
DISPLAY F0.
517+
MOVE -123 TO F2.
518+
MOVE F2 TO F0.
519+
DISPLAY F0.
520+
MOVE 123 TO F3.
521+
MOVE F3 TO F0.
522+
DISPLAY F0.
523+
MOVE -123 TO F4.
524+
MOVE F4 TO F0.
525+
DISPLAY F0.
526+
STOP RUN.
527+
])
528+
529+
AT_CHECK([${COMPILE} -x prog.cob], [0])
530+
AT_CHECK([./prog], [0],
531+
[�O�O�P�Q�R
532+
�O�O�P�Q��
533+
�O�O�P�Q�R
534+
�O�O�P�Q��
535+
])
536+
537+
AT_CLEANUP

0 commit comments

Comments
 (0)