guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. v2.1.0-160-g8ebd06c


From: Andy Wingo
Subject: [Guile-commits] GNU Guile branch, master, updated. v2.1.0-160-g8ebd06c
Date: Wed, 07 Mar 2012 11:12:39 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=8ebd06c64bbb68343b30b82efffd7eed3b22b456

The branch, master has been updated
       via  8ebd06c64bbb68343b30b82efffd7eed3b22b456 (commit)
      from  9d381ba4788b4d447acd3238c2fc8b86da4998b2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8ebd06c64bbb68343b30b82efffd7eed3b22b456
Author: Andy Wingo <address@hidden>
Date:   Wed Mar 7 12:10:28 2012 +0100

    names of encodings are ascii
    
    * libguile/ports.c (scm_mode_bits): Parse the mode bits as latin1.
      (scm_i_set_default_port_encoding, open_iconv_descriptors)
      (scm_port_encoding, scm_set_port_encoding_x): Restrict the names of
      encodings to ASCII.

-----------------------------------------------------------------------

Summary of changes:
 libguile/ports.c |   31 +++++++++++++++++++++++++------
 1 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/libguile/ports.c b/libguile/ports.c
index 8b4dc47..f5ab24e 100644
--- a/libguile/ports.c
+++ b/libguile/ports.c
@@ -470,7 +470,8 @@ scm_i_mode_bits_n (SCM modes)
 long
 scm_mode_bits (char *modes)
 {
-  return scm_i_mode_bits (scm_from_locale_string (modes));
+  /* Valid characters are rw+a0l.  So, use latin1.  */
+  return scm_i_mode_bits (scm_from_latin1_string (modes));
 }
 
 long
@@ -809,8 +810,20 @@ scm_i_set_default_port_encoding (const char *encoding)
       || !strcmp (encoding, "ISO-8859-1"))
     scm_fluid_set_x (SCM_VARIABLE_REF (default_port_encoding_var), SCM_BOOL_F);
   else
-    scm_fluid_set_x (SCM_VARIABLE_REF (default_port_encoding_var),
-                    scm_from_locale_string (encoding));
+    {
+      SCM str;
+      size_t i;
+
+      str = scm_from_latin1_string (encoding);
+
+      /* Restrict to ASCII.  */
+      for (i = 0; encoding[i]; i++)
+        if (encoding[i] > 127)
+          scm_misc_error ("scm_i_set_default_port_encoding",
+                          "invalid character encoding ~s", scm_list_1 (str));
+
+      scm_fluid_set_x (SCM_VARIABLE_REF (default_port_encoding_var), str);
+    }
 }
 
 /* Return the name of the default encoding for newly created ports; a
@@ -845,10 +858,15 @@ open_iconv_descriptors (const char *encoding, int 
reading, int writing)
 {
   scm_t_iconv_descriptors *id;
   iconv_t input_cd, output_cd;
+  size_t i;
 
   input_cd = (iconv_t) -1;
   output_cd = (iconv_t) -1;
 
+  for (i = 0; encoding[i]; i++)
+    if (encoding[i] > 127)
+      goto invalid_encoding;
+
   if (reading)
     {
       /* Open an input iconv conversion descriptor, from ENCODING
@@ -893,7 +911,7 @@ open_iconv_descriptors (const char *encoding, int reading, 
int writing)
  invalid_encoding:
   {
     SCM err;
-    err = scm_from_locale_string (encoding);
+    err = scm_from_latin1_string (encoding);
     scm_misc_error ("open_iconv_descriptors",
                    "invalid or unknown character encoding ~s",
                    scm_list_1 (err));
@@ -933,6 +951,7 @@ scm_i_port_iconv_descriptors (SCM port)
   return pt->iconv_descriptors;
 }
 
+/* The name of the encoding is itself encoded in ASCII.  */
 void
 scm_i_set_port_encoding_x (SCM port, const char *encoding)
 {
@@ -984,7 +1003,7 @@ SCM_DEFINE (scm_port_encoding, "port-encoding", 1, 0, 0,
   pt = SCM_PTAB_ENTRY (port);
   enc = pt->encoding;
   if (enc)
-    return scm_from_locale_string (pt->encoding);
+    return scm_from_latin1_string (pt->encoding);
   else
     return SCM_BOOL_F;
 }
@@ -1004,7 +1023,7 @@ SCM_DEFINE (scm_set_port_encoding_x, 
"set-port-encoding!", 2, 0, 0,
   SCM_VALIDATE_PORT (1, port);
   SCM_VALIDATE_STRING (2, enc);
 
-  enc_str = scm_to_locale_string (enc);
+  enc_str = scm_to_latin1_string (enc);
   scm_i_set_port_encoding_x (port, enc_str);
   free (enc_str);
 


hooks/post-receive
-- 
GNU Guile



reply via email to

[Prev in Thread] Current Thread [Next in Thread]