OSDN Git Service

2004-08-07 Jonathan Wakely <redi@gcc.gnu.org>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Aug 2004 15:31:50 +0000 (15:31 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 7 Aug 2004 15:31:50 +0000 (15:31 +0000)
    Paolo Carlini  <pcarlini@suse.de>

* src/debug.cc (_Error_formatter::_M_print_string): In order
to print individual words from __string, _M_format_word can't
be called since may be just sprintf, thus ignoring completely
__n: instead, use memmove and append '\0' by hand.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85670 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/src/debug.cc

index 597aa66..bcca0d2 100644 (file)
@@ -1,3 +1,11 @@
+2004-08-07  Jonathan Wakely  <redi@gcc.gnu.org>
+           Paolo Carlini  <pcarlini@suse.de>
+       
+       * src/debug.cc (_Error_formatter::_M_print_string): In order
+       to print individual words from __string, _M_format_word can't
+       be called since may be just sprintf, thus ignoring completely
+       __n: instead, use memmove and append '\0' by hand.
+
 2004-08-07  Paolo Carlini  <pcarlini@suse.de>
 
        * config/locale/generic/c_locale.h (__convert_from_v): Don't
index 05ebc2f..20295fb 100644 (file)
@@ -569,12 +569,17 @@ namespace __gnu_debug
          {
            // [__start, __end) denotes the next word
            __end = __start;
-           while (isalnum(*__end)) ++__end;
-           if (__start == __end) ++__end;
-           if (isspace(*__end)) ++__end;
+           while (isalnum(*__end))
+             ++__end;
+           if (__start == __end)
+             ++__end;
+           if (isspace(*__end))
+             ++__end;
            
-           assert(__end - __start + 1< __bufsize);
-           _M_format_word(__buf, __end - __start + 1, "%s", __start);
+           const ptrdiff_t __len = __end - __start;
+           assert(__len < __bufsize);
+           memmove(__buf, __start, __len);
+           __buf[__len] = '\0';
            _M_print_word(__buf);
            __start = __end;