]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/libc-extension.cc
Run `make grand-replace'.
[lilypond.git] / flower / libc-extension.cc
index 51aabebe054648c750e17322f9f42689ea3a5afa..697c527c447f8d57117361bb0f7940c12e2b665b 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the flowerlib
 
-  (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
   Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -11,6 +11,9 @@
 #include <cstdio>
 #include <cstring>
 #include <cctype>
+#include <cassert>
+
+using namespace std;
 
 #include "libc-extension.hh"
 
@@ -36,25 +39,6 @@ strnupr (char *start, int n)
   return start;
 }
 
-/*
-  There are some strange problems with round() on early glibcs.
-*/
-double
-my_round (double x)
-{
-  return floor (x -0.5)+ 1.0;
-}
-
-#ifndef isinf
-#if !HAVE_ISINF
-int
-isinf (double x)
-{
-  return x && (x == x/ 2);
-}
-#endif
-#endif
-
 #if !HAVE_MEMMEM
 
 /** locate a substring. #memmem# finds the first occurrence of
@@ -132,13 +116,36 @@ memrev (unsigned char *byte, int length)
   return byte;
 }
 
+/*
+  There are some strange problems with round() on early glibcs.
+*/
+double
+my_round (double x)
+{
+  return floor (x -0.5)+ 1.0;
+}
+
+/* namespace std { */
+  
+#ifndef isinf
+#if !HAVE_ISINF
+int
+isinf (double x)
+{
+  return x && (x == x/ 2);
+}
+#endif
+#endif
+
 #if ! HAVE_SNPRINTF
 int
-snprintf (char *str, size_t, char const *format, ...)
+snprintf (char *str, size_t n, char const *format, ...)
 {
   va_list ap;
   va_start (ap, format);
   int i = vsprintf (str, format, ap);
+  if (i > 0 && (unsigned) i > n)
+    assert (false);
   va_end (ap);
   return i;
 }
@@ -146,98 +153,13 @@ snprintf (char *str, size_t, char const *format, ...)
 
 #if ! HAVE_VSNPRINTF
 int
-vsnprintf (char *str, size_t, char const *format, va_list args)
+vsnprintf (char *str, size_t n, char const *format, va_list args)
 {
   int i = vsprintf (str, format, args);
+  if (i > 0 && (unsigned) i > n)
+    assert (false);
   return i;
 }
 #endif
 
-#include <assert.h>
-
-extern "C" {
-
-#if ! HAVE_FOPENCOOKIE
-#if HAVE_FUNOPEN
-
-  FILE *
-  fopencookie (void *cookie, char const *mode, cookie_io_functions_t fun)
-  {
-    (void) mode;
-#if 0
-    return funopen (cookie, fun.read, fun.write, fun.seek, fun.close);
-#else
-    return funopen (cookie,
-                   (int (*) (void *, char *, int)) fun.read,
-                   (int (*) (void *, char const *, int)) fun.write,
-                   (fpos_t (*) (void *, fpos_t, int)) fun.seek,
-                   (int (*) (void *)) fun.close);
-
-#endif
-  }
-
-#else /* ! HAVE_FUNOPEN */
-
-#include <cstdio>
-#include "memory-stream.hh"
-
-  static bool
-  is_memory_stream (void *foo)
-  {
-    Memory_out_stream *cookie = (Memory_out_stream *) foo;
-    return dynamic_cast<Memory_out_stream *> (cookie);
-  }
-
-  FILE *
-  fopencookie (void *cookie, char const *modes, cookie_io_functions_t io_funcs)
-  {
-    (void) cookie;
-    (void) modes;
-    (void) io_funcs;
-    if (is_memory_stream (cookie))
-      return (FILE *) cookie;
-    assert (false);
-    return 0;
-  }
-
-  int
-  handle_cookie_io_fclose (FILE *file)
-  {
-    if (is_memory_stream (file))
-      return Memory_out_stream::cleaner (file);
-    return fclose (file);
-  }
-
-  int
-  handle_cookie_io_fprintf (FILE *file, char const *format, ...)
-  {
-    va_list ap;
-    va_start (ap, format);
-    if (is_memory_stream (file))
-      {
-       static char buf[1024];
-       int i = vsnprintf (buf, sizeof (buf), format, ap);
-       if (i == -1)
-         assert (false);
-       return Memory_out_stream::writer (file, buf, i);
-      }
-    int i = vfprintf (file, format, ap);
-    va_end (ap);
-    return i;
-  }
-
-  int
-  handle_cookie_io_putc (int c, FILE *file)
-  {
-    if (is_memory_stream (file))
-      {
-       char buf[1];
-       buf[0] = (char) c;
-       return Memory_out_stream::writer (file, buf, 1);
-      }
-    return putc (c, file);
-  }
-
-#endif /* ! HAVE_FUNOPEN */
-#endif /* ! HAVE_FOPENCOOKIE */
-} /* extern C */
+/* } namespace std */