refactor port encoding modes: utf-8 and iconv
authorAndy Wingo <wingo@pobox.com>
Tue, 14 Feb 2012 12:09:34 +0000 (13:09 +0100)
committerAndy Wingo <wingo@pobox.com>
Tue, 14 Feb 2012 13:10:53 +0000 (14:10 +0100)
commit6c98257f2ead0855f218369ea7f9a823cdb9727e
treefe42b6d4fa787da958c47f11e18840ee84246d0d
parentca2ec018f2131fc137e7bfb9119287d1fa915435
refactor port encoding modes: utf-8 and iconv

* libguile/ports.h (struct scm_t_port): Add a flag for the port encoding
  mode: UTF8 or iconv.  The iconv descriptors are now in a separate
  structure so that we can avoid attaching finalizers to the ports
  themselves, in some cases.

* libguile/ports.c (scm_c_make_port_with_encoding): Init the encoding
  mode.
  (scm_i_remove_port): Adapt to call close_iconv_descriptors.
  (finalize_iconv_descriptors, open_iconv_descriptors):
  (close_iconv_descriptors): New infrastructure to manage iconv
  descriptors.
  (scm_i_port_iconv_descriptors): New internal helper.
  (scm_i_set_port_encoding_x): Use open_iconv_descriptors, if needed.
  (get_iconv_codepoint): Use pt->iconv_descriptors.
  (get_codepoint): Check the port encoding mode flags.

* libguile/print.c (display_string_using_iconv): Use
  scm_i_port_iconv_descriptors.
  (display_string): Use pt->encoding_mode flag.
libguile/ports.c
libguile/ports.h
libguile/print.c