Internally expose `scm_i_unistring_escapes_to_{guile,r6rs}_escapes'.
authorLudovic Courtès <ludo@gnu.org>
Tue, 14 Sep 2010 14:04:26 +0000 (16:04 +0200)
committerLudovic Courtès <ludo@gnu.org>
Tue, 14 Sep 2010 14:10:08 +0000 (16:10 +0200)
* libguile/strings.c (unistring_escapes_to_guile_escapes): Rename to...
  (scm_i_unistring_escapes_to_guile_escapes): ... this.  Change `char **bufp'
  to `char *buf'; leave realloc responsibility to the caller.  Update caller.
  (unistring_escapes_to_r6rs_escapes): Rename to...
  (scm_i_unistring_escapes_to_r6rs_escapes): ... this.  Likewise.

libguile/strings.c
libguile/strings.h

index 68fa25c..dbff066 100644 (file)
@@ -1577,14 +1577,14 @@ scm_take_locale_string (char *str)
 
 /* Change libunistring escapes (\uXXXX and \UXXXXXXXX) to \xXX \uXXXX
    and \UXXXXXX.  */
-static void
-unistring_escapes_to_guile_escapes (char **bufp, size_t *lenp)
+void
+scm_i_unistring_escapes_to_guile_escapes (char *buf, size_t *lenp)
 {
   char *before, *after;
   size_t i, j;
 
-  before = *bufp;
-  after = *bufp;
+  before = buf;
+  after = buf;
   i = 0;
   j = 0;
   while (i < *lenp)
@@ -1627,12 +1627,11 @@ unistring_escapes_to_guile_escapes (char **bufp, size_t *lenp)
         }
     }
   *lenp = j;
-  after = scm_realloc (after, j);
 }
 
 /* Change libunistring escapes (\uXXXX and \UXXXXXXXX) to \xXXXX; */
-static void
-unistring_escapes_to_r6rs_escapes (char **bufp, size_t *lenp)
+void
+scm_i_unistring_escapes_to_r6rs_escapes (char *buf, size_t *lenp)
 {
   char *before, *after;
   size_t i, j;
@@ -1641,7 +1640,7 @@ unistring_escapes_to_r6rs_escapes (char **bufp, size_t *lenp)
   size_t max_out_len = (*lenp * 7) / 6 + 1;
   size_t nzeros, ndigits;
 
-  before = *bufp;
+  before = buf;
   after = alloca (max_out_len);
   i = 0;
   j = 0;
@@ -1699,7 +1698,6 @@ unistring_escapes_to_r6rs_escapes (char **bufp, size_t *lenp)
         }
     }
   *lenp = j;
-  before = scm_realloc (before, j);
   memcpy (before, after, j);
 }
 
@@ -1817,9 +1815,11 @@ scm_to_stringn (SCM str, size_t *lenp, const char *encoding,
   if (handler == SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE)
     {
       if (SCM_R6RS_ESCAPES_P)
-        unistring_escapes_to_r6rs_escapes (&buf, &len);
+        scm_i_unistring_escapes_to_r6rs_escapes (buf, &len);
       else
-        unistring_escapes_to_guile_escapes (&buf, &len);
+        scm_i_unistring_escapes_to_guile_escapes (buf, &len);
+
+      buf = scm_realloc (buf, len);
     }
   if (lenp)
     *lenp = len;
index 4b120e0..d439259 100644 (file)
@@ -204,6 +204,10 @@ SCM_INTERNAL char **scm_i_allocate_string_pointers (SCM list);
 SCM_INTERNAL void scm_i_get_substring_spec (size_t len,
                                            SCM start, size_t *cstart,
                                            SCM end, size_t *cend);
+SCM_INTERNAL void scm_i_unistring_escapes_to_guile_escapes (char *buf,
+                                                           size_t *len);
+SCM_INTERNAL void scm_i_unistring_escapes_to_r6rs_escapes (char *buf,
+                                                          size_t *len);
 
 /* Debugging functions */