diff --git a/guile-add-test-ja_JP.sjis.patch b/guile-add-test-ja_JP.sjis.patch new file mode 100644 index 0000000..0f32238 --- /dev/null +++ b/guile-add-test-ja_JP.sjis.patch @@ -0,0 +1,58 @@ +diff --git a/test-suite/standalone/Makefile.am b/test-suite/standalone/Makefile.am +index 3a9d8d9da..327b57262 100644 +--- a/test-suite/standalone/Makefile.am ++++ b/test-suite/standalone/Makefile.am +@@ -172,6 +172,10 @@ TESTS += test-mb-regexp + check_SCRIPTS += test-use-srfi + TESTS += test-use-srfi + ++# test-ja_JP.sjis ++check_SCRIPTS += test-ja_JP.sjis ++TESTS += test-ja_JP.sjis ++ + # test-scm-c-read + test_scm_c_read_SOURCES = test-scm-c-read.c + test_scm_c_read_CFLAGS = ${test_cflags} +diff --git a/test-suite/standalone/test-ja_JP.sjis b/test-suite/standalone/test-ja_JP.sjis +new file mode 100755 +index 000000000..2aa5ee690 +--- /dev/null ++++ b/test-suite/standalone/test-ja_JP.sjis +@@ -0,0 +1,7 @@ ++#!/bin/sh ++# Test whether guile can run initialization code using ja_JP.sjis locale ++# (bug #33044). ++export LC_CTYPE ++LC_CTYPE=ja_JP.sjis ++exec guile -q -s "$0" "$@" ++!# +diff --git a/test-suite/standalone/Makefile.in b/test-suite/standalone/Makefile.in +index 0f7ef8250..2478a7cc7 100644 +--- a/test-suite/standalone/Makefile.in ++++ b/test-suite/standalone/Makefile.in +@@ -96,7 +96,8 @@ TESTS = test-system-cmds test-bad-identifiers test-require-extension \ + test-list$(EXEEXT) test-unwind$(EXEEXT) \ + test-conversion$(EXEEXT) test-loose-ends$(EXEEXT) \ + test-fast-slot-ref test-mb-regexp test-use-srfi \ +- test-scm-c-read$(EXEEXT) test-scm-take-locale-symbol$(EXEEXT) \ ++ test-ja_JP.sjis test-scm-c-read$(EXEEXT) \ ++ test-scm-take-locale-symbol$(EXEEXT) \ + test-scm-take-u8vector$(EXEEXT) \ + test-scm-to-latin1-string$(EXEEXT) test-scm-values$(EXEEXT) \ + test-scm-c-bind-keyword-arguments$(EXEEXT) \ +@@ -1876,12 +1877,14 @@ noinst_LTLIBRARIES = $(am__append_1) + # test-mb-regexp + + # test-use-srfi ++ ++# test-ja_JP.sjis + check_SCRIPTS = test-system-cmds test-bad-identifiers \ + test-require-extension test-guile-snarf test-import-order \ + test-command-line-encoding test-command-line-encoding2 \ + test-language test-guild-compile $(am__append_3) \ + test-fast-slot-ref test-mb-regexp test-use-srfi \ +- $(am__append_5) ++ test-ja_JP.sjis $(am__append_5) + BUILT_SOURCES = $(am__append_2) + EXTRA_DIST = test-import-order-a.scm test-import-order-b.scm \ + test-import-order-c.scm test-import-order-d.scm \ diff --git a/guile-use-utf8.patch b/guile-use-utf8.patch new file mode 100644 index 0000000..4820955 --- /dev/null +++ b/guile-use-utf8.patch @@ -0,0 +1,552 @@ +diff --git a/libguile/debug-malloc.c b/libguile/debug-malloc.c +index fa3612de2..4dd2b5d40 100644 +--- a/libguile/debug-malloc.c ++++ b/libguile/debug-malloc.c +@@ -221,7 +221,7 @@ SCM_DEFINE (scm_malloc_stats, "malloc-stats", 0, 0, 0, + int i; + for (i = 0; i < malloc_type_size + N_SEEK; ++i) + if (malloc_type[i].key) +- res = scm_acons (scm_from_locale_string ((char *) malloc_type[i].key), ++ res = scm_acons (scm_from_utf8_string ((char *) malloc_type[i].key), + scm_from_int ((int) malloc_type[i].data), + res); + return res; +diff --git a/libguile/deprecation.c b/libguile/deprecation.c +index aa50eaf8c..110884ed5 100644 +--- a/libguile/deprecation.c ++++ b/libguile/deprecation.c +@@ -117,7 +117,7 @@ SCM_DEFINE(scm_issue_deprecation_warning, + print_summary = 1; + else + { +- SCM nl = scm_from_locale_string ("\n"); ++ SCM nl = scm_from_utf8_string ("\n"); + SCM msgs_nl = SCM_EOL; + char *c_msgs; + while (scm_is_pair (msgs)) +diff --git a/libguile/error.c b/libguile/error.c +index 7971046ce..c9ce0b927 100644 +--- a/libguile/error.c ++++ b/libguile/error.c +@@ -58,8 +58,8 @@ scm_error (SCM key, const char *subr, const char *message, SCM args, SCM rest) + { + scm_error_scm + (key, +- (subr == NULL) ? SCM_BOOL_F : scm_from_locale_string (subr), +- (message == NULL) ? SCM_BOOL_F : scm_from_locale_string (message), ++ (subr == NULL) ? SCM_BOOL_F : scm_from_utf8_string (subr), ++ (message == NULL) ? SCM_BOOL_F : scm_from_utf8_string (message), + args, rest); + } + +@@ -239,7 +239,7 @@ scm_error_num_args_subr (const char *subr) + scm_error (scm_args_number_key, + NULL, + "Wrong number of arguments to ~A", +- scm_list_1 (scm_from_locale_string (subr)), ++ scm_list_1 (scm_from_utf8_string (subr)), + SCM_BOOL_F); + } + +@@ -262,8 +262,8 @@ scm_i_wrong_type_arg_symbol (SCM symbol, int pos, SCM bad_value) + { + scm_error_scm (scm_arg_type_key, + scm_symbol_to_string (symbol), +- (pos == 0) ? scm_from_locale_string ("Wrong type: ~S") +- : scm_from_locale_string ("Wrong type argument in position ~A: ~S"), ++ (pos == 0) ? scm_from_utf8_string ("Wrong type: ~S") ++ : scm_from_utf8_string ("Wrong type argument in position ~A: ~S"), + (pos == 0) ? scm_list_1 (bad_value) + : scm_list_2 (scm_from_int (pos), bad_value), + scm_list_1 (bad_value)); +@@ -273,7 +273,7 @@ scm_i_wrong_type_arg_symbol (SCM symbol, int pos, SCM bad_value) + void + scm_wrong_type_arg_msg (const char *subr, int pos, SCM bad_value, const char *szMessage) + { +- SCM msg = scm_from_locale_string (szMessage); ++ SCM msg = scm_from_utf8_string (szMessage); + if (pos == 0) + { + scm_error (scm_arg_type_key, +diff --git a/libguile/eval.c b/libguile/eval.c +index 815f7c7a7..f1c80887c 100644 +--- a/libguile/eval.c ++++ b/libguile/eval.c +@@ -164,15 +164,15 @@ static void error_used_before_defined (void) + + static void error_invalid_keyword (SCM proc, SCM obj) + { +- scm_error_scm (scm_from_latin1_symbol ("keyword-argument-error"), proc, +- scm_from_locale_string ("Invalid keyword"), SCM_EOL, ++ scm_error_scm (scm_from_utf8_symbol ("keyword-argument-error"), proc, ++ scm_from_utf8_string ("Invalid keyword"), SCM_EOL, + scm_list_1 (obj)); + } + + static void error_unrecognized_keyword (SCM proc, SCM kw) + { +- scm_error_scm (scm_from_latin1_symbol ("keyword-argument-error"), proc, +- scm_from_locale_string ("Unrecognized keyword"), SCM_EOL, ++ scm_error_scm (scm_from_utf8_symbol ("keyword-argument-error"), proc, ++ scm_from_utf8_string ("Unrecognized keyword"), SCM_EOL, + scm_list_1 (kw)); + } + +@@ -190,9 +190,9 @@ truncate_values (SCM x) + return scm_car (l); + else + { +- scm_ithrow (scm_from_latin1_symbol ("vm-run"), +- scm_list_3 (scm_from_latin1_symbol ("vm-run"), +- scm_from_locale_string ++ scm_ithrow (scm_from_utf8_symbol ("vm-run"), ++ scm_list_3 (scm_from_utf8_symbol ("vm-run"), ++ scm_from_utf8_string + ("Too few values returned to continuation"), + SCM_EOL), + 1); +diff --git a/libguile/expand.c b/libguile/expand.c +index 546b1e4de..c2d87da0f 100644 +--- a/libguile/expand.c ++++ b/libguile/expand.c +@@ -217,7 +217,7 @@ SCM_KEYWORD (kw_rest, "rest"); + static void + syntax_error (const char* const msg, const SCM form, const SCM expr) + { +- SCM msg_string = scm_from_locale_string (msg); ++ SCM msg_string = scm_from_utf8_string (msg); + SCM filename = SCM_BOOL_F; + SCM linenr = SCM_BOOL_F; + const char *format; +@@ -470,7 +470,7 @@ expand_cond_clauses (SCM clause, SCM rest, int elp, int alp, SCM env) + && scm_is_eq (CADR (clause), scm_sym_arrow) + && alp) + { +- SCM tmp = scm_gensym (scm_from_locale_string ("cond ")); ++ SCM tmp = scm_gensym (scm_from_utf8_string ("cond ")); + SCM new_env = scm_acons (tmp, tmp, env); + ASSERT_SYNTAX (length > 2, s_missing_recipient, clause); + ASSERT_SYNTAX (length == 3, s_extra_expression, clause); +@@ -1203,7 +1203,7 @@ make_exp_vtable (size_t n) + + layout = scm_string_to_symbol + (scm_string_append (scm_make_list (scm_from_size_t (exp_nfields[n]), +- scm_from_locale_string ("pw")))); ++ scm_from_utf8_string ("pw")))); + printer = SCM_BOOL_F; + name = scm_from_locale_symbol (exp_names[n]); + code = scm_from_size_t (n); +@@ -1245,7 +1245,7 @@ scm_init_expand () + DEFINE_NAMES (DYNLET); + + scm_exp_vtable_vtable = +- scm_make_vtable (scm_from_locale_string (SCM_VTABLE_BASE_LAYOUT "pwuwpw"), ++ scm_make_vtable (scm_from_utf8_string (SCM_VTABLE_BASE_LAYOUT "pwuwpw"), + SCM_BOOL_F); + + for (n = 0; n < SCM_NUM_EXPANDED_TYPES; n++) +diff --git a/libguile/extensions.c b/libguile/extensions.c +index 1c3d28f4a..2a649107c 100644 +--- a/libguile/extensions.c ++++ b/libguile/extensions.c +@@ -90,9 +90,9 @@ load_extension (SCM lib, SCM init) + + scm_dynwind_begin (0); + +- clib = scm_to_locale_string (lib); ++ clib = scm_to_utf8_string (lib); + scm_dynwind_free (clib); +- cinit = scm_to_locale_string (init); ++ cinit = scm_to_utf8_string (init); + scm_dynwind_free (cinit); + + for (ext = head; ext; ext = ext->next) +@@ -123,7 +123,7 @@ load_extension (SCM lib, SCM init) + void + scm_c_load_extension (const char *lib, const char *init) + { +- load_extension (scm_from_locale_string (lib), scm_from_locale_string (init)); ++ load_extension (scm_from_utf8_string (lib), scm_from_utf8_string (init)); + } + + SCM_DEFINE (scm_load_extension, "load-extension", 2, 0, 0, +diff --git a/libguile/filesys.c b/libguile/filesys.c +index e6e37b040..3407a47ff 100644 +--- a/libguile/filesys.c ++++ b/libguile/filesys.c +@@ -1923,7 +1923,7 @@ scm_init_filesys () + scm_c_define ("X_OK", scm_from_int (X_OK)); + scm_c_define ("F_OK", scm_from_int (F_OK)); + +- scm_dot_string = scm_from_locale_string ("."); ++ scm_dot_string = scm_from_utf8_string ("."); + + #include "libguile/filesys.x" + } +diff --git a/libguile/init.c b/libguile/init.c +index adab2b5d6..2f930f5f8 100644 +--- a/libguile/init.c ++++ b/libguile/init.c +@@ -242,7 +242,7 @@ scm_load_startup_files () + SCM_SITE_DIR and SCM_LIBRARY_DIR when searching for the site init + file, so we do this before loading Ice-9. */ + SCM init_path = +- scm_sys_search_load_path (scm_from_locale_string ("init.scm")); ++ scm_sys_search_load_path (scm_from_utf8_string ("init.scm")); + + /* Load Ice-9. */ + if (!scm_ice_9_already_loaded) +diff --git a/libguile/load.c b/libguile/load.c +index c2ee5093a..27389fe3e 100644 +--- a/libguile/load.c ++++ b/libguile/load.c +@@ -148,7 +148,7 @@ SCM_DEFINE (scm_sys_package_data_dir, "%package-data-dir", 0, 0, 0, + "@samp{/usr/local/share/guile}.") + #define FUNC_NAME s_scm_sys_package_data_dir + { +- return scm_from_locale_string (SCM_PKGDATA_DIR); ++ return scm_from_utf8_string (SCM_PKGDATA_DIR); + } + #undef FUNC_NAME + #endif /* SCM_PKGDATA_DIR */ +@@ -160,7 +160,7 @@ SCM_DEFINE (scm_sys_library_dir, "%library-dir", 0,0,0, + "E.g., may return \"/usr/share/guile/1.3.5\".") + #define FUNC_NAME s_scm_sys_library_dir + { +- return scm_from_locale_string (SCM_LIBRARY_DIR); ++ return scm_from_utf8_string (SCM_LIBRARY_DIR); + } + #undef FUNC_NAME + #endif /* SCM_LIBRARY_DIR */ +@@ -186,7 +186,7 @@ SCM_DEFINE (scm_sys_global_site_dir, "%global-site-dir", 0,0,0, + "E.g., may return \"/usr/share/guile/site\".") + #define FUNC_NAME s_scm_sys_global_site_dir + { +- return scm_from_locale_string (SCM_GLOBAL_SITE_DIR); ++ return scm_from_utf8_string (SCM_GLOBAL_SITE_DIR); + } + #undef FUNC_NAME + #endif /* SCM_GLOBAL_SITE_DIR */ +@@ -199,7 +199,7 @@ SCM_DEFINE (scm_sys_site_ccache_dir, "%site-ccache-dir", 0,0,0, + "E.g., may return \"/usr/lib/guile/" SCM_EFFECTIVE_VERSION "/site-ccache\".") + #define FUNC_NAME s_scm_sys_site_ccache_dir + { +- return scm_from_locale_string (SCM_SITE_CCACHE_DIR); ++ return scm_from_utf8_string (SCM_SITE_CCACHE_DIR); + } + #undef FUNC_NAME + #endif /* SCM_SITE_CCACHE_DIR */ +@@ -304,6 +304,9 @@ scm_i_mirror_backslashes (char *path) + + while (*p) + { ++ /* FIXME: When the locale encoding is Shift_JIS, backslash '\' ++ has a multibyte representation, so this code will ++ misbehave. */ + if (*p == '\\') + *p = '/'; + p++; +@@ -333,10 +336,10 @@ scm_init_load_path () + else if (env) + path = scm_parse_path (scm_from_locale_string (env), path); + else +- path = scm_list_4 (scm_from_locale_string (SCM_LIBRARY_DIR), +- scm_from_locale_string (SCM_SITE_DIR), +- scm_from_locale_string (SCM_GLOBAL_SITE_DIR), +- scm_from_locale_string (SCM_PKGDATA_DIR)); ++ path = scm_list_4 (scm_from_utf8_string (SCM_LIBRARY_DIR), ++ scm_from_utf8_string (SCM_SITE_DIR), ++ scm_from_utf8_string (SCM_GLOBAL_SITE_DIR), ++ scm_from_utf8_string (SCM_PKGDATA_DIR)); + + env = scm_i_mirror_backslashes (getenv ("GUILE_SYSTEM_COMPILED_PATH")); + if (env && strcmp (env, "") == 0) +@@ -346,8 +349,8 @@ scm_init_load_path () + cpath = scm_parse_path (scm_from_locale_string (env), cpath); + else + { +- cpath = scm_list_2 (scm_from_locale_string (SCM_CCACHE_DIR), +- scm_from_locale_string (SCM_SITE_CCACHE_DIR)); ++ cpath = scm_list_2 (scm_from_utf8_string (SCM_CCACHE_DIR), ++ scm_from_utf8_string (SCM_SITE_CCACHE_DIR)); + } + + #endif /* SCM_LIBRARY_DIR */ +@@ -954,7 +957,7 @@ SCM_DEFINE (scm_search_path, "search-path", 2, 0, 1, + { + require_exts = SCM_CADR (rest); + if (SCM_UNLIKELY (!scm_is_null (SCM_CDDR (rest)))) +- scm_wrong_num_args (scm_from_locale_string (FUNC_NAME)); ++ scm_wrong_num_args (scm_from_utf8_string (FUNC_NAME)); + } + } + else +@@ -1280,10 +1283,10 @@ scm_init_eval_in_scheme (void) + int found_stale_eval_go = 0; + + eval_scm = search_path (*scm_loc_load_path, +- scm_from_locale_string ("ice-9/eval.scm"), ++ scm_from_utf8_string ("ice-9/eval.scm"), + SCM_EOL, SCM_BOOL_F, &stat_source); + eval_thunk = +- load_thunk_from_path (scm_from_locale_string ("ice-9/eval.go"), ++ load_thunk_from_path (scm_from_utf8_string ("ice-9/eval.go"), + eval_scm, &stat_source, &found_stale_eval_go); + + if (scm_is_true (eval_thunk)) +@@ -1340,13 +1343,13 @@ scm_init_load () + scm_loc_load_path = SCM_VARIABLE_LOC (scm_c_define ("%load-path", SCM_EOL)); + scm_loc_load_extensions + = SCM_VARIABLE_LOC (scm_c_define ("%load-extensions", +- scm_list_2 (scm_from_locale_string (".scm"), ++ scm_list_2 (scm_from_utf8_string (".scm"), + scm_nullstr))); + scm_loc_load_compiled_path + = SCM_VARIABLE_LOC (scm_c_define ("%load-compiled-path", SCM_EOL)); + scm_loc_load_compiled_extensions + = SCM_VARIABLE_LOC (scm_c_define ("%load-compiled-extensions", +- scm_list_1 (scm_from_locale_string (".go")))); ++ scm_list_1 (scm_from_utf8_string (".go")))); + scm_loc_load_hook = SCM_VARIABLE_LOC (scm_c_define ("%load-hook", SCM_BOOL_F)); + + scm_loc_compile_fallback_path +diff --git a/libguile/modules.c b/libguile/modules.c +index 7b42a3d43..fb8c9f61c 100644 +--- a/libguile/modules.c ++++ b/libguile/modules.c +@@ -893,7 +893,7 @@ scm_post_boot_init_modules () + default_duplicate_binding_procedures_var = + scm_c_lookup ("default-duplicate-binding-procedures"); + module_public_interface_var = scm_c_lookup ("module-public-interface"); +- k_ensure = scm_from_locale_keyword ("ensure"); ++ k_ensure = scm_from_utf8_keyword ("ensure"); + + scm_module_system_booted_p = 1; + } +diff --git a/libguile/pairs.c b/libguile/pairs.c +index 7d7e68c4f..ca7098fec 100644 +--- a/libguile/pairs.c ++++ b/libguile/pairs.c +@@ -55,7 +55,7 @@ verify (SCM_BITS_DIFFER_IN_EXACTLY_ONE_BIT_POSITION \ + void scm_error_pair_access (SCM non_pair) + { + static unsigned int running = 0; +- SCM message = scm_from_locale_string ("Non-pair accessed with SCM_C[AD]R: `~S'\n"); ++ SCM message = scm_from_utf8_string ("Non-pair accessed with SCM_C[AD]R: `~S'\n"); + + if (!running) + { +diff --git a/libguile/posix.c b/libguile/posix.c +index 1443a9ead..c5e1a2867 100644 +--- a/libguile/posix.c ++++ b/libguile/posix.c +@@ -370,11 +370,11 @@ SCM_DEFINE (scm_getpwuid, "getpw", 0, 1, 0, + SCM_SIMPLE_VECTOR_SET(result, 3, scm_from_ulong (entry->pw_gid)); + SCM_SIMPLE_VECTOR_SET(result, 4, scm_from_locale_string (entry->pw_gecos)); + if (!entry->pw_dir) +- SCM_SIMPLE_VECTOR_SET(result, 5, scm_from_locale_string ("")); ++ SCM_SIMPLE_VECTOR_SET(result, 5, scm_from_utf8_string ("")); + else + SCM_SIMPLE_VECTOR_SET(result, 5, scm_from_locale_string (entry->pw_dir)); + if (!entry->pw_shell) +- SCM_SIMPLE_VECTOR_SET(result, 6, scm_from_locale_string ("")); ++ SCM_SIMPLE_VECTOR_SET(result, 6, scm_from_utf8_string ("")); + else + SCM_SIMPLE_VECTOR_SET(result, 6, scm_from_locale_string (entry->pw_shell)); + return result; +diff --git a/libguile/print.c b/libguile/print.c +index a5b2a845b..5201b63f8 100644 +--- a/libguile/print.c ++++ b/libguile/print.c +@@ -1681,9 +1681,9 @@ scm_init_print () + + scm_gc_register_root (&print_state_pool); + scm_gc_register_root (&scm_print_state_vtable); +- type = scm_make_vtable (scm_from_locale_string (SCM_PRINT_STATE_LAYOUT), ++ type = scm_make_vtable (scm_from_utf8_string (SCM_PRINT_STATE_LAYOUT), + SCM_BOOL_F); +- scm_set_struct_vtable_name_x (type, scm_from_latin1_symbol ("print-state")); ++ scm_set_struct_vtable_name_x (type, scm_from_utf8_symbol ("print-state")); + scm_print_state_vtable = type; + + /* Don't want to bind a wrapper class in GOOPS, so pass 0 as arg1. */ +@@ -1694,9 +1694,9 @@ scm_init_print () + + scm_init_opts (scm_print_options, scm_print_opts); + scm_print_opts[SCM_PRINT_HIGHLIGHT_PREFIX_I].val = +- SCM_UNPACK (scm_from_locale_string ("{")); ++ SCM_UNPACK (scm_from_utf8_string ("{")); + scm_print_opts[SCM_PRINT_HIGHLIGHT_SUFFIX_I].val = +- SCM_UNPACK (scm_from_locale_string ("}")); ++ SCM_UNPACK (scm_from_utf8_string ("}")); + scm_print_opts[SCM_PRINT_KEYWORD_STYLE_I].val = SCM_UNPACK (sym_reader); + } + +diff --git a/libguile/random.c b/libguile/random.c +index 4051d1f34..e63b3de83 100644 +--- a/libguile/random.c ++++ b/libguile/random.c +@@ -374,7 +374,10 @@ make_rstate (scm_t_rstate *state) + * Scheme level interface. + */ + +-SCM_GLOBAL_VARIABLE_INIT (scm_var_random_state, "*random-state*", scm_seed_to_random_state (scm_from_locale_string ("URL:http://stat.fsu.edu/~geo/diehard.html"))); ++SCM_GLOBAL_VARIABLE_INIT (scm_var_random_state, "*random-state*", ++ scm_seed_to_random_state ++ (scm_from_utf8_string ++ ("URL:http://stat.fsu.edu/~geo/diehard.html"))); + + SCM_DEFINE (scm_random, "random", 1, 1, 0, + (SCM n, SCM state), +diff --git a/libguile/read.c b/libguile/read.c +index 136e74819..aa05509fc 100644 +--- a/libguile/read.c ++++ b/libguile/read.c +@@ -142,21 +142,21 @@ scm_i_input_error (char const *function, + { + SCM fn = (scm_is_string (SCM_FILENAME(port)) + ? SCM_FILENAME(port) +- : scm_from_locale_string ("#")); ++ : scm_from_utf8_string ("#")); + + SCM string_port = scm_open_output_string (); + SCM string = SCM_EOL; + scm_simple_format (string_port, +- scm_from_locale_string ("~A:~S:~S: ~A"), ++ scm_from_utf8_string ("~A:~S:~S: ~A"), + scm_list_4 (fn, + scm_from_long (SCM_LINUM (port) + 1), + scm_from_int (SCM_COL (port) + 1), +- scm_from_locale_string (message))); ++ scm_from_utf8_string (message))); + + string = scm_get_output_string (string_port); + scm_close_output_port (string_port); +- scm_error_scm (scm_from_latin1_symbol ("read-error"), +- function? scm_from_locale_string (function) : SCM_BOOL_F, ++ scm_error_scm (scm_from_utf8_symbol ("read-error"), ++ function? scm_from_utf8_string (function) : SCM_BOOL_F, + string, + arg, + SCM_BOOL_F); +@@ -2226,7 +2226,10 @@ SCM_DEFINE (scm_file_encoding, "file-encoding", 1, 0, 0, + return SCM_BOOL_F; + else + { +- s_enc = scm_from_locale_string (enc); ++ /* It's not obvious what encoding to use here, but latin1 has the ++ advantage of never causing a decoding error, and a valid ++ encoding name should be ASCII anyway. */ ++ s_enc = scm_from_latin1_string (enc); + return s_enc; + } + +diff --git a/libguile/regex-posix.c b/libguile/regex-posix.c +index bec0f89fb..3750e1597 100644 +--- a/libguile/regex-posix.c ++++ b/libguile/regex-posix.c +@@ -173,7 +173,7 @@ SCM_DEFINE (scm_make_regexp, "make-regexp", 1, 0, 1, + SCM errmsg = scm_regexp_error_msg (status, rx); + scm_gc_free (rx, sizeof(regex_t), "regex"); + scm_error_scm (scm_regexp_error_key, +- scm_from_locale_string (FUNC_NAME), ++ scm_from_utf8_string (FUNC_NAME), + errmsg, + SCM_BOOL_F, + scm_list_1 (pat)); +@@ -315,7 +315,7 @@ SCM_DEFINE (scm_regexp_exec, "regexp-exec", 2, 2, 0, + + if (status != 0 && status != REG_NOMATCH) + scm_error_scm (scm_regexp_error_key, +- scm_from_locale_string (FUNC_NAME), ++ scm_from_utf8_string (FUNC_NAME), + scm_regexp_error_msg (status, SCM_RGX (rx)), + SCM_BOOL_F, SCM_BOOL_F); + return mvec; +diff --git a/libguile/snarf.h b/libguile/snarf.h +index 1655e2c8d..42378a775 100644 +--- a/libguile/snarf.h ++++ b/libguile/snarf.h +@@ -219,11 +219,11 @@ SCM_SNARF_INIT(c_name = scm_from_locale_symbol (scheme_name)) + + #define SCM_KEYWORD(c_name, scheme_name) \ + SCM_SNARF_HERE(static SCM c_name) \ +-SCM_SNARF_INIT(c_name = scm_from_locale_keyword (scheme_name)) ++SCM_SNARF_INIT(c_name = scm_from_utf8_keyword (scheme_name)) + + #define SCM_GLOBAL_KEYWORD(c_name, scheme_name) \ + SCM_SNARF_HERE(SCM c_name) \ +-SCM_SNARF_INIT(c_name = scm_from_locale_keyword (scheme_name)) ++SCM_SNARF_INIT(c_name = scm_from_utf8_keyword (scheme_name)) + + #define SCM_VARIABLE(c_name, scheme_name) \ + SCM_SNARF_HERE(static SCM c_name) \ +diff --git a/libguile/srfi-13.c b/libguile/srfi-13.c +index 5c30dfe20..1c065194f 100644 +--- a/libguile/srfi-13.c ++++ b/libguile/srfi-13.c +@@ -405,7 +405,7 @@ SCM_DEFINE (scm_string_join, "string-join", 1, 2, 0, + /* Validate the delimiter and record its length. */ + if (SCM_UNBNDP (delimiter)) + { +- delimiter = scm_from_locale_string (" "); ++ delimiter = scm_from_utf8_string (" "); + delimiter_len = 1; + } + else +diff --git a/libguile/stacks.c b/libguile/stacks.c +index 37a9161cd..439a97d21 100644 +--- a/libguile/stacks.c ++++ b/libguile/stacks.c +@@ -388,10 +388,10 @@ scm_init_stacks () + scm_sys_stacks = scm_make_fluid (); + scm_c_define ("%stacks", scm_sys_stacks); + +- scm_stack_type = scm_make_vtable (scm_from_locale_string (SCM_STACK_LAYOUT), ++ scm_stack_type = scm_make_vtable (scm_from_utf8_string (SCM_STACK_LAYOUT), + SCM_UNDEFINED); + scm_set_struct_vtable_name_x (scm_stack_type, +- scm_from_latin1_symbol ("stack")); ++ scm_from_utf8_symbol ("stack")); + #include "libguile/stacks.x" + } + +diff --git a/libguile/stime.c b/libguile/stime.c +index a5421d716..21ed6905f 100644 +--- a/libguile/stime.c ++++ b/libguile/stime.c +@@ -695,7 +695,7 @@ SCM_DEFINE (scm_strftime, "strftime", 2, 0, 0, + some OSs, e.g., Solaris. */ + SCM zone = + scm_string_append (scm_list_2 (zone_spec, +- scm_from_locale_string ("0"))); ++ scm_from_utf8_string ("0"))); + + have_zone = 1; + SCM_CRITICAL_SECTION_START; +diff --git a/libguile/strports.c b/libguile/strports.c +index 18f1970b5..d8dc461d5 100644 +--- a/libguile/strports.c ++++ b/libguile/strports.c +@@ -544,7 +544,7 @@ static void + init_eval_string_var_and_k_module (void) + { + eval_string_var = scm_c_public_variable ("ice-9 eval-string", "eval-string"); +- k_module = scm_from_locale_keyword ("module"); ++ k_module = scm_from_utf8_keyword ("module"); + } + + SCM_DEFINE (scm_eval_string_in_module, "eval-string", 1, 1, 0, +diff --git a/libguile/values.c b/libguile/values.c +index ef27cadd1..82a784fe1 100644 +--- a/libguile/values.c ++++ b/libguile/values.c +@@ -142,7 +142,7 @@ scm_init_values (void) + { + SCM print = scm_c_define_gsubr ("%print-values", 2, 0, 0, print_values); + +- scm_values_vtable = scm_make_vtable (scm_from_locale_string ("pr"), print); ++ scm_values_vtable = scm_make_vtable (scm_from_utf8_string ("pr"), print); + + scm_add_feature ("values"); + diff --git a/guile.changes b/guile.changes index 66b8215..c351366 100644 --- a/guile.changes +++ b/guile.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Sun Oct 21 17:56:40 UTC 2018 - psimons@suse.com + +- Apply guile-use-utf8.patch to fix use of the "ja_JP.sjis" locale. + [bsc#1110085] + +- Apply guile-add-test-ja_JP.sjis.patch to add standalone test that + verifies the "ja_JP.sjis" locale works properly. Further details + at https://debbugs.gnu.org/cgi/bugreport.cgi?bug=33044#43. + [bsc#1110085] + ------------------------------------------------------------------- Wed Feb 28 14:51:38 UTC 2018 - tchvatal@suse.com diff --git a/guile.spec b/guile.spec index 273ac4e..1b3565f 100644 --- a/guile.spec +++ b/guile.spec @@ -42,6 +42,8 @@ Patch3: guile-threads-test.patch Patch4: guile-net-db-test.patch Patch5: guile-2.0.14-gc_pkgconfig_private.patch Patch6: guile-disable-int-tests.patch +Patch7: guile-add-test-ja_JP.sjis.patch +Patch8: guile-use-utf8.patch BuildRequires: gmp-devel BuildRequires: libffi-devel BuildRequires: libltdl-devel @@ -123,6 +125,9 @@ linked in as a library when building extensible programs. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 +chmod +x test-suite/standalone/test-ja_JP.sjis +%patch8 -p1 %build %configure \