]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lily-guile.cc
Use g_spawn_sync () instead of system (). Fixes #1429.
[lilypond.git] / lily / lily-guile.cc
index 9da6823f194e89e91ab15a13c4ab751ed3b4d03e..1763a5cebbe23593f744ec98def2bc3ea60bcc61 100644 (file)
@@ -1,10 +1,21 @@
 /*
-  lily-guile.cc -- implement assorted SCM interface functions
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
-
-  (c) 1998--2007 Jan Nieuwenhuizen <janneke@gnu.org>
+  Copyright (C) 1998--2011 Jan Nieuwenhuizen <janneke@gnu.org>
   Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "lily-guile.hh"
@@ -89,7 +100,7 @@ gulp_file_to_string (string fn, bool must_exist, int size)
   string result (&chars[0], chars.size ());
 
   if (be_verbose_global)
-    progress_indication ("]");
+    progress_indication ("]\n");
 
   return result;
 }
@@ -111,8 +122,13 @@ string
 ly_scm2string (SCM str)
 {
   assert (scm_is_string (str));
-  return string (scm_i_string_chars (str),
-                (int) scm_i_string_length (str));
+  string result;
+  size_t len = scm_c_string_length (str);
+  if (len) {
+    result.resize(len);
+    scm_to_locale_stringbuf(str, &result.at(0), len);
+  }
+  return result;
 }
 
 SCM
@@ -122,34 +138,18 @@ ly_string2scm (string const &str)
                                  str.length ());
 }
 
-
 char *
-ly_scm2newstr (SCM str, size_t *lenp)
+ly_scm2str0 (SCM str)
 {
-  LY_ASSERT_TYPE (scm_is_string, str, 1);
-
-  size_t len = scm_i_string_length (str);
-  if (char *new_str = (char *) malloc ((len + 1) * sizeof (char)))
-    {
-      memcpy (new_str, scm_i_string_chars (str), len);
-      new_str[len] = '\0';
-
-      if (lenp)
-       *lenp = len;
-
-      return new_str;
-    }
-  return 0;
+  return scm_to_locale_string (str);
 }
 
-
 /*
   PAIRS
 */
-SCM
+SCM 
 index_get_cell (SCM s, Direction d)
 {
-
   assert (d);
   return (d == LEFT) ? scm_car (s) : scm_cdr (s);
 }
@@ -178,7 +178,6 @@ ly_scm_hash (SCM s)
   return scm_ihashv (s, ~1u);
 }
 
-
 bool
 is_axis (SCM s)
 {
@@ -571,15 +570,16 @@ robust_scm2int (SCM k, int o)
 SCM
 ly_rational2scm (Rational r)
 {
-  return scm_divide (scm_from_int (r.numerator ()), scm_from_int (r.denominator ()));
+  return scm_divide (scm_from_int64 (r.numerator ()),
+                    scm_from_int64 (r.denominator ()));
 }
 
 
 Rational
 ly_scm2rational (SCM r)
 {
-  return Rational (scm_to_int (scm_numerator (r)),
-                  scm_to_int (scm_denominator (r)));
+  return Rational (scm_to_int64 (scm_numerator (r)),
+                  scm_to_int64 (scm_denominator (r)));
 }
 
 Rational
@@ -634,10 +634,10 @@ mangle_cxx_identifier (string cxx_id)
   else if (cxx_id.substr (cxx_id.length () - 2) == "_x")
     cxx_id = cxx_id.replace (cxx_id.length () - 2, 2, "!");
 
-  cxx_id = replace_all (cxx_id, "_less?", "<?");
-  cxx_id = replace_all (cxx_id, "_2_", "->");
-  cxx_id = replace_all (cxx_id, "__", "::");
-  cxx_id = replace_all (cxx_id, '_', '-');
+  replace_all (&cxx_id, "_less?", "<?");
+  replace_all (&cxx_id, "_2_", "->");
+  replace_all (&cxx_id, "__", "::");
+  replace_all (&cxx_id, '_', '-');
 
 
   return cxx_id;
@@ -659,11 +659,11 @@ SCM
 parse_symbol_list (char const *symbols)
 {
   while (isspace (*symbols))
-    *symbols++;
+    symbols++;
   string s = symbols;
-  replace_all (s, '\n', ' ');
-  replace_all (s, '\t', ' ');
-  replace_all (s, "  ", " ");
+  replace_all (&s, '\n', ' ');
+  replace_all (&s, '\t', ' ');
+  replace_all (&s, "  ", " ");
   return ly_string_array_to_scm (string_split (s, ' '));
 }