diff options
Diffstat (limited to 'libguile/print.c')
-rw-r--r-- | libguile/print.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/libguile/print.c b/libguile/print.c index 1572690e2..3f72810c1 100644 --- a/libguile/print.c +++ b/libguile/print.c @@ -881,8 +881,24 @@ display_string_using_iconv (const void *str, int narrow_p, size_t len, { size_t printed; scm_t_iconv_descriptors *id; + scm_t_port_internal *pti = SCM_PORT_GET_INTERNAL (port); - id = scm_i_port_iconv_descriptors (port); + id = scm_i_port_iconv_descriptors (port, SCM_PORT_WRITE); + + if (SCM_UNLIKELY (pti->at_stream_start_for_bom_write && len > 0)) + { + scm_t_port *pt = SCM_PTAB_ENTRY (port); + + /* Record that we're no longer at stream start. */ + pti->at_stream_start_for_bom_write = 0; + if (pt->rw_random) + pti->at_stream_start_for_bom_read = 0; + + /* Write a BOM if appropriate. */ + if (SCM_UNLIKELY (strcasecmp(pt->encoding, "UTF-16") == 0 + || strcasecmp(pt->encoding, "UTF-32") == 0)) + display_character (SCM_UNICODE_BOM, port, iconveh_error); + } printed = 0; |