Mercurial > octave
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 |