freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 4c36bf7 2/6: Add `ft_strdup' function.


From: Werner LEMBERG
Subject: [freetype2-demos] master 4c36bf7 2/6: Add `ft_strdup' function.
Date: Fri, 24 Jul 2020 10:16:50 -0400 (EDT)

branch: master
commit 4c36bf7b6705303e3c546617abe410791bb22bd2
Author: David Turner <david@freetype.org>
Commit: Werner Lemberg <wl@gnu.org>

    Add `ft_strdup' function.
    
    This simplifies compilation on Windows, which doesn't have this
    function.
    
    * src/common.c: Include `ftstring.h'.
    (ft_strdup): New function.
    * src/common.h: Updated.
    
    * src/ftcommon.c (FTDemo_Install_Font), src/ftdiff.c
    (render_state_set_files): Use it.
---
 ChangeLog      | 14 ++++++++++++++
 src/common.c   | 21 ++++++++++++++++++++-
 src/common.h   |  9 +++++++++
 src/ftcommon.c |  8 +++-----
 src/ftdiff.c   |  6 ++----
 5 files changed, 48 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d67c1a3..377f37f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
 2020-07-24  David Turner  <david@freetype.org>
 
+       Add `ft_strdup' function.
+
+       This simplifies compilation on Windows, which doesn't have this
+       function.
+
+       * src/common.c: Include `ftstring.h'.
+       (ft_strdup): New function.
+       * src/common.h: Updated.
+
+       * src/ftcommon.c (FTDemo_Install_Font), src/ftdiff.c
+       (render_state_set_files): Use it.
+
+2020-07-24  David Turner  <david@freetype.org>
+
        * src/*: Replace simple usage of `sprintf' with `snprintf'.
 
        Recent gcc compiler versions produce warnings for potentially unsafe
diff --git a/src/common.c b/src/common.c
index 1960165..509c5fa 100644
--- a/src/common.c
+++ b/src/common.c
@@ -5,6 +5,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
+#include <string.h>
 
 
   char*
@@ -36,6 +37,25 @@
   }
 
 
+  char*
+  ft_strdup( const char*  str )
+  {
+    char*   result;
+    size_t  len;
+
+
+    if ( !str )
+      return NULL;
+
+    len    = strlen( str );
+    result = (char *)malloc( len + 1 );
+    if ( result )
+      memcpy( result, str, len + 1 );
+
+    return result;
+  }
+
+
   void
   Panic( const char*  fmt,
          ... )
@@ -105,5 +125,4 @@
     return -1;
   }
 
-
 /* End */
diff --git a/src/common.h b/src/common.h
index afa5f70..35fc5ef 100644
--- a/src/common.h
+++ b/src/common.h
@@ -6,6 +6,7 @@
   extern "C" {
 #endif
 
+
   extern char*
   ft_basename( const char*  name );
 
@@ -26,6 +27,14 @@
   utf8_next( const char**  pcursor,
              const char*   end );
 
+  /*
+   * Implement `strdup', which is POSIX but not C89 or even C11, and
+   * Microsoft insists on renaming it `_strdup' instead.  Platform
+   * auto-detection is complicated, so just provide a re-implementation.
+   */
+  extern char*
+  ft_strdup( const char*  name );
+
 #ifdef __cplusplus
   }
 #endif
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 14a3aaa..697cd2a 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -605,11 +605,9 @@
 
         font = (PFont)malloc( sizeof ( *font ) );
 
-        /* We allocate four more bytes since we want to attach an AFM */
-        /* or PFM file for Type 1 fonts (if available).  Such fonts   */
-        /* always have the extension `.afm' or `.pfm'.                */
-        font->filepathname = (char*)malloc( strlen( filepath ) + 4 + 1 );
-        strcpy( (char*)font->filepathname, filepath );
+        font->filepathname = ft_strdup( filepath );
+        if ( !font->filepathname )
+          return FT_Err_Out_Of_Memory;
 
         font->face_index = ( j << 16 ) + i;
 
diff --git a/src/ftdiff.c b/src/ftdiff.c
index 59c68fe..8abe9e3 100644
--- a/src/ftdiff.c
+++ b/src/ftdiff.c
@@ -460,19 +460,17 @@
           fn = face->family_name;
         else
           fn = (char*)"(unknown family)";
-        family_name = (char*)malloc( strlen( fn ) + 1 );
+        family_name = ft_strdup( fn );
         if ( family_name == NULL )
           panic( "ftdiff: not enough memory\n" );
-        strcpy( family_name, fn );
 
         if ( face->style_name )
           sn = face->style_name;
         else
           sn = (char*)"(unknown style)";
-        style_name = (char*)malloc( strlen( sn ) + 1 );
+        style_name = ft_strdup( sn );
         if ( style_name == NULL )
           panic( "ftdiff: not enough memory\n" );
-        strcpy( style_name, sn );
 
         faces[num_faces].filepath    = files[0];
         faces[num_faces].index       = count;



reply via email to

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