comparison libinterp/corefcn/load-path.cc @ 31144: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 0f93c3a756f7
comparison
equal deleted inserted replaced
31143:52b8b0c1baf9 31144:f125ddb46055
1202 } 1202 }
1203 1203
1204 void 1204 void
1205 load_path::read_dir_config (const std::string& dir) const 1205 load_path::read_dir_config (const std::string& dir) const
1206 { 1206 {
1207 // use canonicalized path as key
1208 const std::string key = sys::canonicalize_file_name (dir);
1209
1207 // read file with directory configuration 1210 // read file with directory configuration
1208 std::string conf_file = dir + sys::file_ops::dir_sep_str () 1211 const std::string
1209 + ".oct-config"; 1212 conf_file = key + sys::file_ops::dir_sep_str () + ".oct-config";
1210 1213
1211 FILE* cfile = sys::fopen (conf_file, "rb"); 1214 FILE* cfile = sys::fopen (conf_file, "rb");
1212 1215
1213 if (! cfile) 1216 if (! cfile)
1214 { 1217 {
1215 // reset directory encoding 1218 // reset directory encoding
1216 input_system& input_sys = __get_input_system__ (); 1219 input_system& input_sys = __get_input_system__ ();
1217 1220
1218 std::string enc_val = "delete"; 1221 std::string enc_val = "delete";
1219 input_sys.set_dir_encoding (dir, enc_val); 1222 input_sys.set_dir_encoding (key, enc_val);
1220 return; 1223 return;
1221 } 1224 }
1222 1225
1223 unwind_action close_file ([cfile] (void) { fclose (cfile); }); 1226 unwind_action close_file ([cfile] (void) { fclose (cfile); });
1224 1227
1255 if (enc_val.empty ()) 1258 if (enc_val.empty ())
1256 continue; 1259 continue;
1257 1260
1258 // set encoding for this directory in input system 1261 // set encoding for this directory in input system
1259 input_system& input_sys = __get_input_system__ (); 1262 input_system& input_sys = __get_input_system__ ();
1260 input_sys.set_dir_encoding (dir, enc_val); 1263 input_sys.set_dir_encoding (key, enc_val);
1261 return; 1264 return;
1262 } 1265 }
1263 } 1266 }
1264 1267
1265 // reset directory encoding 1268 // reset directory encoding