diff libinterp/corefcn/input.cc @ 31149:f125ddb46055

dir_encoding: Use encoding from .oct-config file in current directory (bug #62761). * libinterp/corefcn/load-path.cc (load_path::read_dir_config), libinterp/corefcn/input.cc (input_system::dir_encoding): Use canonicalized path as key for the dir_encoding map. * test/file-encoding: Add tests for this feature. * test/Makefile.am: Add new folder to test suite.
author Markus Mützel <markus.muetzel@gmx.de>
date Wed, 13 Jul 2022 13:20:48 +0200
parents 670a0d878af1
children
line wrap: on
line diff
--- a/libinterp/corefcn/input.cc	Tue Jul 12 17:52:20 2022 +0200
+++ b/libinterp/corefcn/input.cc	Wed Jul 13 13:20:48 2022 +0200
@@ -44,6 +44,7 @@
 #include "file-ops.h"
 #include "iconv-wrappers.h"
 #include "localcharset-wrapper.h"
+#include "oct-env.h"
 #include "oct-string.h"
 #include "quit.h"
 #include "str-vec.h"
@@ -573,8 +574,10 @@
   std::string input_system::dir_encoding (const std::string& dir)
   {
     std::string enc = m_mfile_encoding;
+    // use canonicalized path as key
+    const std::string key = sys::canonicalize_file_name (dir);
 
-    auto enc_it = m_dir_encoding.find (load_path_dir (dir));
+    auto enc_it = m_dir_encoding.find (key);
     if (enc_it != m_dir_encoding.end ())
       enc = enc_it->second;