freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 136d6e6 6/6: Make new code from David work.


From: Werner LEMBERG
Subject: [freetype2-demos] master 136d6e6 6/6: Make new code from David work.
Date: Fri, 24 Jul 2020 10:16:51 -0400 (EDT)

branch: master
commit 136d6e64ba6200c1820d1de46f08a4057f76a7a8
Author: Werner Lemberg <wl@gnu.org>
Commit: Werner Lemberg <wl@gnu.org>

    Make new code from David work.
    
    * src/strbuf.c (strbuf_value): Fix assertion.
    (strbuf_vformat): Shortcut if no space is available.
    Set `pos'.
    
    * src/ftcommon.c (FTDemo_Draw_Header): Add missing call to
    `strbuf_skip_over'.
---
 ChangeLog      | 11 +++++++++++
 src/ftcommon.c |  1 +
 src/strbuf.c   | 16 +++++++++++++---
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index a2a395c..ff79066 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2020-07-24  Werner Lemberg  <wl@gnu.org>
+
+       Make new code from David work.
+
+       * src/strbuf.c (strbuf_value): Fix assertion.
+       (strbuf_vformat): Shortcut if no space is available.
+       Set `pos'.
+
+       * src/ftcommon.c (FTDemo_Draw_Header): Add missing call to
+       `strbuf_skip_over'.
+
 2020-07-24  David Turner  <david@freetype.org>
 
        Use new string functions to replace remaining `sprintf' calls.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 00cbd81..6221e53 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -1126,6 +1126,7 @@
         FT_Get_Glyph_Name( face, glyph_idx,
                            strbuf_end( buf ),
                            (FT_UInt)( strbuf_available( buf ) + 1 ) );
+        strbuf_skip_over( buf, strlen( strbuf_end( buf ) ) );
       }
 
       grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
diff --git a/src/strbuf.c b/src/strbuf.c
index 918e32a..81dfc37 100644
--- a/src/strbuf.c
+++ b/src/strbuf.c
@@ -35,7 +35,7 @@
   const char*
   strbuf_value( const StrBuf*  sb )
   {
-    assert( sb->pos < sb->limit );
+    assert( sb->pos <= sb->limit );
     assert( sb->buffer[sb->pos] == '\0' );
 
     return sb->buffer;
@@ -157,12 +157,22 @@
                   va_list      args )
   {
     size_t  available = sb->limit - sb->pos;
-    int     ret       = vsnprintf( sb->buffer + sb->pos, available,
-                                   fmt, args );
+    int     ret;
+
+
+    if ( !available )
+      return 0;
+
+    ret = vsnprintf( sb->buffer + sb->pos, available, fmt, args );
 
     /* NOTE: On Windows, vsnprintf() can return -1 in case of truncation! */
     if ( ret < 0 || (size_t)ret > available )
+    {
+      sb->pos = sb->limit;
       return (int)available;
+    }
+
+    sb->pos += ret;
 
     return (int)ret;
   }



reply via email to

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