Skip to content

Commit

Permalink
ptex: Treat utf-8 filename on utf-8 locale (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
t-tk committed May 25, 2018
1 parent dea8920 commit bc7b6b2
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 11 deletions.
66 changes: 56 additions & 10 deletions source/texk/web2c/lib/openclose.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ boolean
open_input (FILE **f_ptr, int filefmt, const_string fopen_mode)
{
string fname = NULL;
#if defined(PTEX) && !defined(WIN32)
string fname0;
#endif
#ifdef FUNNY_CORE_DUMP
/* This only applies if a preloaded TeX/Metafont is being made;
it allows automatic creation of the core dump (typing ^\ loses
Expand All @@ -170,6 +173,17 @@ open_input (FILE **f_ptr, int filefmt, const_string fopen_mode)
absolute. This is because .aux and other such files will get
written to the output directory, and we have to be able to read
them from there. We only look for the name as-is. */

#if defined(PTEX) && !defined(WIN32)
fname0 = ptenc_from_internal_enc_string_to_utf8(nameoffile + 1);
if (fname0) {
free (nameoffile);
namelength = strlen (fname0);
nameoffile = xmalloc (namelength + 2);
strcpy (nameoffile + 1, fname0);
free (fname0);
}
#endif
if (output_directory && !kpse_absolute_p (nameoffile+1, false)) {
fname = concat3 (output_directory, DIR_SEP_STRING, nameoffile + 1);
*f_ptr = fopen (fname, fopen_mode);
Expand All @@ -183,6 +197,13 @@ open_input (FILE **f_ptr, int filefmt, const_string fopen_mode)
}
#endif
if (*f_ptr) {
#if defined(PTEX) && !defined(WIN32)
fname0 = ptenc_from_utf8_string_to_internal_enc(fname);
if (fname0) {
free (fname);
fname = fname0;
}
#endif
free (nameoffile);
namelength = strlen (fname);
nameoffile = xmalloc (namelength + 2);
Expand All @@ -205,7 +226,8 @@ open_input (FILE **f_ptr, int filefmt, const_string fopen_mode)
which we set `tex_input_type' to 0 in the change file. */
/* According to the pdfTeX people, pounding the disk for .vf files
is overkill as well. A more general solution would be nice. */
boolean must_exist = (filefmt != kpse_tex_format || texinputtype)
boolean must_exist;
must_exist = (filefmt != kpse_tex_format || texinputtype)
&& (filefmt != kpse_vf_format);
fname = kpse_find_file (nameoffile + 1,
(kpse_file_format_type)filefmt,
Expand All @@ -229,21 +251,28 @@ open_input (FILE **f_ptr, int filefmt, const_string fopen_mode)
fname[i] = 0;
}

/* kpse_find_file always returns a new string. */
free (nameoffile);
namelength = strlen (fname);
nameoffile = xmalloc (namelength + 2);
strcpy (nameoffile + 1, fname);
free (fname);

/* This fopen is not allowed to fail. */
#if defined(PTEX) && !defined(WIN32)
if (filefmt == kpse_tex_format ||
filefmt == kpse_bib_format) {
*f_ptr = nkf_open (nameoffile + 1, fopen_mode);
*f_ptr = nkf_open (fname, fopen_mode);
} else
#endif
*f_ptr = xfopen (nameoffile + 1, fopen_mode);
*f_ptr = xfopen (fname, fopen_mode);

/* kpse_find_file always returns a new string. */
#if defined(PTEX) && !defined(WIN32)
fname0 = ptenc_from_utf8_string_to_internal_enc(fname);
if (fname0) {
free (fname);
fname = fname0;
}
#endif
free (nameoffile);
namelength = strlen (fname);
nameoffile = xmalloc (namelength + 2);
strcpy (nameoffile + 1, fname);
free (fname);
}
}
}
Expand Down Expand Up @@ -281,6 +310,9 @@ boolean
open_output (FILE **f_ptr, const_string fopen_mode)
{
string fname;
#if defined(PTEX) && !defined(WIN32)
string fname0;
#endif
boolean absolute = kpse_absolute_p(nameoffile+1, false);

/* If we have an explicit output directory, use it. */
Expand All @@ -289,6 +321,13 @@ open_output (FILE **f_ptr, const_string fopen_mode)
} else {
fname = nameoffile + 1;
}
#if defined(PTEX) && !defined(WIN32)
fname0 = ptenc_from_internal_enc_string_to_utf8(fname);
if (fname0) {
free(fname);
fname = fname0;
}
#endif

/* Is the filename openable as given? */
*f_ptr = fopen (fname, fopen_mode);
Expand All @@ -307,6 +346,13 @@ open_output (FILE **f_ptr, const_string fopen_mode)
/* If this succeeded, change nameoffile accordingly. */
if (*f_ptr) {
if (fname != nameoffile + 1) {
#if defined(PTEX) && !defined(WIN32)
fname0 = ptenc_from_utf8_string_to_internal_enc(fname);
if (fname0) {
free(fname);
fname = fname0;
}
#endif
free (nameoffile);
namelength = strlen (fname);
nameoffile = xmalloc (namelength + 2);
Expand Down
5 changes: 4 additions & 1 deletion source/texk/web2c/lib/texmfmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -710,11 +710,14 @@ maininit (int ac, string *av)
enc = kpse_var_value("command_line_encoding");
get_command_line_args_utf8(enc, &argc, &argv);
#endif
#if IS_pTeX && !IS_upTeX && !defined(WIN32)
ptenc_get_command_line_args(&argc, &argv);
#endif

/* If the user says --help or --version, we need to notice early. And
since we want the --ini option, have to do it before getting into
the web (which would read the base file, etc.). */
#if (IS_upTeX || defined(XeTeX) || defined(pdfTeX)) && defined(WIN32)
#if (IS_upTeX || defined(XeTeX) || defined(pdfTeX)) && defined(WIN32) || (IS_pTeX && !IS_upTeX && !defined(WIN32))
parse_options (argc, argv);
#else
parse_options (ac, av);
Expand Down

0 comments on commit bc7b6b2

Please sign in to comment.