Skip to content

Commit 68c2074

Browse files
Handle Japanese characters in file identifiers correctly (#540)
1 parent 9c39c37 commit 68c2074

File tree

5 files changed

+37
-4
lines changed

5 files changed

+37
-4
lines changed

cobj/tree.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,13 @@ static char *to_cname(const char *s) {
124124
unsigned char *p;
125125

126126
copy = strdup(s);
127-
for (p = (unsigned char *)copy; *p; p++) {
128-
*p = (*p == '-') ? '_' : (unsigned char)toupper(*p);
127+
for (p = (unsigned char *)copy; *p;) {
128+
if ((0x81 <= *p && *p <= 0x9F) || (0xE0 <= *p && *p <= 0xFC)) {
129+
p += 2;
130+
} else {
131+
*p = (*p == '-') ? '_' : (unsigned char)toupper(*p);
132+
p++;
133+
}
129134
}
130135
return copy;
131136
}

tests/Makefile.am

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ misc_DEPENDENCIES = \
219219
misc.src/read_prev_after_start.at \
220220
misc.src/japanese-char-section-var.at \
221221
misc.src/evaluate-switch.at \
222-
misc.src/fserial-variable.at
222+
misc.src/fserial-variable.at \
223+
misc.src/file-handler-japanese.at
223224

224225
EXTRA_DIST = $(srcdir)/package.m4 \
225226
$(TESTS) \

tests/Makefile.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,7 +758,8 @@ misc_DEPENDENCIES = \
758758
misc.src/read_prev_after_start.at \
759759
misc.src/japanese-char-section-var.at \
760760
misc.src/evaluate-switch.at \
761-
misc.src/fserial-variable.at
761+
misc.src/fserial-variable.at \
762+
misc.src/file-handler-japanese.at
762763

763764
EXTRA_DIST = $(srcdir)/package.m4 \
764765
$(TESTS) \

tests/misc.at

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,4 @@ m4_include([read_prev_after_start.at])
4949
m4_include([japanese-char-section-var.at])
5050
m4_include([evaluate-switch.at])
5151
m4_include([fserial-variable.at])
52+
m4_include([file-handler-japanese.at])
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
AT_SETUP([file-handler-japanese])
2+
3+
# This test verifies that Issue 539 is fixed.
4+
5+
AT_DATA([prog.cbl], [
6+
IDENTIFICATION DIVISION.
7+
PROGRAM-ID. prog.
8+
ENVIRONMENT DIVISION.
9+
INPUT-OUTPUT SECTION.
10+
FILE-CONTROL.
11+
SELECT �e�X�g�t�@�C��
12+
ORGANIZATION IS SEQUENTIAL.
13+
DATA DIVISION.
14+
FILE SECTION.
15+
FD �e�X�g�t�@�C��.
16+
01 REC PIC X(10).
17+
PROCEDURE DIVISION.
18+
STOP RUN.
19+
])
20+
21+
AT_CHECK([${COBJ} prog.cbl])
22+
AT_CHECK([grep 'h_�e�X�g�t�@�C��' prog.java > /dev/null])
23+
AT_CHECK([grep 'h_�E�X�G�T�@�C��' prog.java], [1])
24+
25+
AT_CLEANUP

0 commit comments

Comments
 (0)