summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/ptexdir/ptex-base.ch
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-02-05 23:54:51 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-02-05 23:54:51 +0000
commite665a6c3a8f6b343142332c31758ca1e18159d4b (patch)
treeb2ef45236b8c32062e25be082dfed4cd3fc86408 /Build/source/texk/web2c/ptexdir/ptex-base.ch
parentff56ea3f9875d8a0b631c7b13248791da7266c86 (diff)
ptex: quote in \write18, non-JP file name (H. Kitagawa)
git-svn-id: svn://tug.org/texlive/trunk@61906 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/ptexdir/ptex-base.ch')
-rw-r--r--Build/source/texk/web2c/ptexdir/ptex-base.ch57
1 files changed, 55 insertions, 2 deletions
diff --git a/Build/source/texk/web2c/ptexdir/ptex-base.ch b/Build/source/texk/web2c/ptexdir/ptex-base.ch
index d6e205cecb3..6a85178de99 100644
--- a/Build/source/texk/web2c/ptexdir/ptex-base.ch
+++ b/Build/source/texk/web2c/ptexdir/ptex-base.ch
@@ -2854,6 +2854,59 @@ if #<>0 then
@y
@z
+@x [29.519]
+@d append_to_name(#)==begin c:=#; if not (c="""") then begin incr(k);
+ if k<=file_name_size then name_of_file[k]:=xchr[c];
+ end end
+@y
+@d append_to_name_char(#)==begin incr(k);
+ if k<=file_name_size then name_of_file[k]:=xchr[#];
+ end
+
+@d append_to_name_hex(#)==if (#)<10 then append_to_name_char((#)+"0")
+ else append_to_name_char((#)-10+"a")
+
+@d append_to_name(#)==begin c:=#; if not (c="""") then append_to_name_char(c); end
+
+@d append_to_name_str_pool(#)==begin
+ if (#)>=@"100 then begin
+ c:=(#)-@"100;
+ append_to_name_char(c);
+ end else begin
+ c:=#;
+ if (c>=@"80) and (not isinternalUPTEX) and isterminalUTF8 then begin
+ append_to_name_char("^");
+ append_to_name_char("^");
+ append_to_name_hex(c div 16);
+ append_to_name_hex(c mod 16);
+ end else if not (c="""") then
+ append_to_name_char(c);
+ end
+end
+@z
+
+@x l.10389
+name_of_file:= xmalloc_array (ASCII_code, length(a)+length(n)+length(e)+1);
+@y
+name_of_file:= xmalloc_array (ASCII_code, (length(a)+length(n)+length(e))*4+1);
+@z
+
+@x [29.519] pack_file_name
+for j:=str_start[a] to str_start[a+1]-1 do append_to_name(so(str_pool[j]));
+for j:=str_start[n] to str_start[n+1]-1 do append_to_name(so(str_pool[j]));
+for j:=str_start[e] to str_start[e+1]-1 do append_to_name(so(str_pool[j]));
+@y
+for j:=str_start[a] to str_start[a+1]-1 do append_to_name_str_pool(so(str_pool[j]));
+for j:=str_start[n] to str_start[n+1]-1 do append_to_name_str_pool(so(str_pool[j]));
+for j:=str_start[e] to str_start[e+1]-1 do append_to_name_str_pool(so(str_pool[j]));
+@z
+
+@x l.10444
+name_of_file := xmalloc_array (ASCII_code, n+(b-a+1)+format_ext_length+1);
+@y
+name_of_file := xmalloc_array (ASCII_code, (n+(b-a+1)+format_ext_length)*4+1);
+@z
+
@x [29.526] l.10668 - pTeX: scan file name
loop@+begin if (cur_cmd>other_char)or(cur_chr>255) then {not a character}
begin back_input; goto done;
@@ -6687,10 +6740,10 @@ end
str_pool[str_start[str_ptr]])));
@y
if name_of_file then libc_free(name_of_file);
- name_of_file := xmalloc(cur_length * 3 + 2);
+ name_of_file := xmalloc(cur_length*4+1);
k := 0;
for d:=0 to cur_length-1 do
- append_to_name(str_pool[str_start[str_ptr]+d]);
+ append_to_name_char(str_pool[str_start[str_ptr]+d]); {do not remove quote}
name_of_file[k+1] := 0;
runsystem_ret := runsystem(conststringcast(name_of_file+1));
@z