shithub: freetype+ttf2subf

Download patch

ref: dc624ca4dcac1cbfb6870414e6aaedba43aeb9ee
parent: eeb83204457a962ca173e6f1a0684347a505e15e
author: Werner Lemberg <[email protected]>
date: Tue Jun 4 06:30:48 EDT 2013

Apply fixes for cppcheck nitpicks.

  http://cppcheck.sourceforge.net/

Note that the current version heavily chokes on FreeType, delivering
even wrong results.  I will report those issues to the cppcheck team
so that a newer version gives improved results hopefully.

*/* Improve variable scopes.
*/* Remove redundant initializations which get overwritten.

* src/base/ftmac.c ,builds/mac/ftmac.c (count_faces_scalable):
Remove unused variable.

* src/base/ftdbgmem.c (ft_mem_table_destroy): `table' can't be zero.

* src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt1_entry_validate):
Remove functionless code.

* src/tools/ftrandom.c (main): Fix memory leak.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2013-06-04  Werner Lemberg  <[email protected]>
+
+	Apply fixes for cppcheck nitpicks.
+
+	  http://cppcheck.sourceforge.net/
+
+	Note that the current version heavily chokes on FreeType, delivering
+	even wrong results.  I will report those issues to the cppcheck team
+	so that a newer version gives improved results hopefully.
+
+	*/* Improve variable scopes.
+	*/* Remove redundant initializations which get overwritten.
+
+	* src/base/ftmac.c ,builds/mac/ftmac.c (count_faces_scalable):
+	Remove unused variable.
+
+	* src/base/ftdbgmem.c (ft_mem_table_destroy): `table' can't be zero.
+
+	* src/gxvalid/gxvkern.c (gxv_kern_subtable_fmt1_entry_validate):
+	Remove functionless code.
+
+	* src/tools/ftrandom.c (main): Fix memory leak.
+
 2013-06-03  Werner Lemberg  <[email protected]>
 
 	Add CFF_CONFIG_OPTION_OLD_ENGINE configuration option.
--- a/builds/mac/ftmac.c
+++ b/builds/mac/ftmac.c
@@ -696,11 +696,9 @@
   count_faces_scalable( char*  fond_data )
   {
     AsscEntry*  assoc;
-    FamRec*     fond;
     short       i, face, face_all;
 
 
-    fond     = (FamRec*)fond_data;
     face_all = EndianS16_BtoN( *( (short *)( fond_data +
                                              sizeof ( FamRec ) ) ) ) + 1;
     assoc    = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
@@ -1186,7 +1184,7 @@
     ResFileRefNum  res_ref;
     ResourceIndex  res_index;
     Handle         fond;
-    short          num_faces_in_res, num_faces_in_fond;
+    short          num_faces_in_res;
 
 
     if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
@@ -1199,6 +1197,9 @@
     num_faces_in_res = 0;
     for ( res_index = 1; ; ++res_index )
     {
+      short  num_faces_in_fond;
+
+
       fond = Get1IndResource( TTAG_FOND, res_index );
       if ( ResError() )
         break;
--- a/src/autofit/afcjk.c
+++ b/src/autofit/afcjk.c
@@ -966,14 +966,15 @@
           /* can make a single edge.                                 */
           if ( link )
           {
-            AF_Segment  seg1 = edge->first;
-            AF_Segment  link1;
+            AF_Segment  seg1  = edge->first;
             FT_Pos      dist2 = 0;
 
 
             do
             {
-              link1 = seg1->link;
+              AF_Segment  link1 = seg1->link;
+
+
               if ( link1 )
               {
                 dist2 = AF_SEGMENT_DIST( link, link1 );
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -55,7 +55,7 @@
   static FT_Error
   af_face_globals_compute_script_coverage( AF_FaceGlobals  globals )
   {
-    FT_Error    error       = FT_Err_Ok;
+    FT_Error    error;
     FT_Face     face        = globals->face;
     FT_CharMap  old_charmap = face->charmap;
     FT_Byte*    gscripts    = globals->glyph_scripts;
--- a/src/base/ftdbgmem.c
+++ b/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Memory debugger (body).                                              */
 /*                                                                         */
-/*  Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2009 by                  */
+/*  Copyright 2001-2006, 2009, 2013 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -344,85 +344,80 @@
   ft_mem_table_destroy( FT_MemTable  table )
   {
     FT_ULong  i;
+    FT_Long   leak_count = 0;
+    FT_ULong  leaks      = 0;
 
 
     FT_DumpMemory( table->memory );
 
-    if ( table )
+    /* remove all blocks from the table, revealing leaked ones */
+    for ( i = 0; i < table->size; i++ )
     {
-      FT_Long   leak_count = 0;
-      FT_ULong  leaks      = 0;
+      FT_MemNode  *pnode = table->buckets + i, next, node = *pnode;
 
 
-      /* remove all blocks from the table, revealing leaked ones */
-      for ( i = 0; i < table->size; i++ )
+      while ( node )
       {
-        FT_MemNode  *pnode = table->buckets + i, next, node = *pnode;
+        next       = node->link;
+        node->link = 0;
 
-
-        while ( node )
+        if ( node->size > 0 )
         {
-          next       = node->link;
-          node->link = 0;
+          printf(
+            "leaked memory block at address %p, size %8ld in (%s:%ld)\n",
+            node->address, node->size,
+            FT_FILENAME( node->source->file_name ),
+            node->source->line_no );
 
-          if ( node->size > 0 )
-          {
-            printf(
-              "leaked memory block at address %p, size %8ld in (%s:%ld)\n",
-              node->address, node->size,
-              FT_FILENAME( node->source->file_name ),
-              node->source->line_no );
+          leak_count++;
+          leaks += node->size;
 
-            leak_count++;
-            leaks += node->size;
+          ft_mem_table_free( table, node->address );
+        }
 
-            ft_mem_table_free( table, node->address );
-          }
+        node->address = NULL;
+        node->size    = 0;
 
-          node->address = NULL;
-          node->size    = 0;
-
-          ft_mem_table_free( table, node );
-          node = next;
-        }
-        table->buckets[i] = 0;
+        ft_mem_table_free( table, node );
+        node = next;
       }
+      table->buckets[i] = 0;
+    }
 
-      ft_mem_table_free( table, table->buckets );
-      table->buckets = NULL;
+    ft_mem_table_free( table, table->buckets );
+    table->buckets = NULL;
 
-      table->size  = 0;
-      table->nodes = 0;
+    table->size  = 0;
+    table->nodes = 0;
 
-      /* remove all sources */
-      for ( i = 0; i < FT_MEM_SOURCE_BUCKETS; i++ )
-      {
-        FT_MemSource  source, next;
+    /* remove all sources */
+    for ( i = 0; i < FT_MEM_SOURCE_BUCKETS; i++ )
+    {
+      FT_MemSource  source, next;
 
 
-        for ( source = table->sources[i]; source != NULL; source = next )
-        {
-          next = source->link;
-          ft_mem_table_free( table, source );
-        }
-
-        table->sources[i] = NULL;
+      for ( source = table->sources[i]; source != NULL; source = next )
+      {
+        next = source->link;
+        ft_mem_table_free( table, source );
       }
 
-      printf(
-        "FreeType: total memory allocations = %ld\n", table->alloc_total );
-      printf(
-        "FreeType: maximum memory footprint = %ld\n", table->alloc_max );
+      table->sources[i] = NULL;
+    }
 
-      ft_mem_table_free( table, table );
+    printf( "FreeType: total memory allocations = %ld\n",
+            table->alloc_total );
+    printf( "FreeType: maximum memory footprint = %ld\n",
+            table->alloc_max );
 
-      if ( leak_count > 0 )
-        ft_mem_debug_panic(
-          "FreeType: %ld bytes of memory leaked in %ld blocks\n",
-          leaks, leak_count );
+    ft_mem_table_free( table, table );
 
-      printf( "FreeType: no memory leaks detected\n" );
-    }
+    if ( leak_count > 0 )
+      ft_mem_debug_panic(
+        "FreeType: %ld bytes of memory leaked in %ld blocks\n",
+        leaks, leak_count );
+
+    printf( "FreeType: no memory leaks detected\n" );
   }
 
 
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -358,11 +358,9 @@
   count_faces_scalable( char*  fond_data )
   {
     AsscEntry*  assoc;
-    FamRec*     fond;
     short       i, face, face_all;
 
 
-    fond     = (FamRec*)fond_data;
     face_all = EndianS16_BtoN( *( (short *)( fond_data +
                                              sizeof ( FamRec ) ) ) ) + 1;
     assoc    = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
@@ -800,7 +798,7 @@
     ResFileRefNum  res_ref;
     ResourceIndex  res_index;
     Handle         fond;
-    short          num_faces_in_res, num_faces_in_fond;
+    short          num_faces_in_res;
 
 
     if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
@@ -813,6 +811,9 @@
     num_faces_in_res = 0;
     for ( res_index = 1; ; ++res_index )
     {
+      short  num_faces_in_fond;
+
+
       fond = Get1IndResource( TTAG_FOND, res_index );
       if ( ResError() )
         break;
--- a/src/bdf/bdflib.c
+++ b/src/bdf/bdflib.c
@@ -520,7 +520,7 @@
                   unsigned long  *alen )
   {
     unsigned long  i, j;
-    char           *fp, *dp;
+    char*          dp;
 
 
     *alen = 0;
@@ -531,7 +531,9 @@
     dp = list->field[0];
     for ( i = j = 0; i < list->used; i++ )
     {
-      fp = list->field[i];
+      char*  fp = list->field[i];
+
+
       while ( *fp )
         dp[j++] = *fp++;
 
--- a/src/cff/cf2font.c
+++ b/src/cff/cf2font.c
@@ -143,7 +143,7 @@
     /* pointer to parsed font object */
     CFF_Decoder*  decoder = font->decoder;
 
-    FT_Bool  needExtraSetup = FALSE;
+    FT_Bool  needExtraSetup;
 
     /* character space units */
     CF2_Fixed  boldenX = font->syntheticEmboldeningAmountX;
--- a/src/gxvalid/gxvkern.c
+++ b/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    TrueTypeGX/AAT kern table validation (body).                         */
 /*                                                                         */
-/*  Copyright 2004, 2005, 2006, 2007                                       */
+/*  Copyright 2004-2007, 2013                                              */
 /*  by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,                      */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
@@ -303,8 +303,6 @@
 #ifdef GXV_LOAD_UNUSED_VARS
       kernAction = FT_NEXT_USHORT( p );
       kernValue  = FT_NEXT_USHORT( p );
-#else
-      p += 4;
 #endif
     }
   }
--- a/src/gxvalid/gxvmod.c
+++ b/src/gxvalid/gxvmod.c
@@ -200,7 +200,7 @@
     /* without volatile on `error' GCC 4.1.1. emits:                         */
     /*  warning: variable 'error' might be clobbered by 'longjmp' or 'vfork' */
     /* this warning seems spurious but ---                                   */
-    FT_Error volatile         error = FT_Err_Ok;
+    FT_Error volatile         error;
     FT_ValidatorRec volatile  valid;
 
 
--- a/src/gxvalid/gxvmort.c
+++ b/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    TrueTypeGX/AAT mort table validation (body).                         */
 /*                                                                         */
-/*  Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K.,       */
+/*  Copyright 2005, 2013 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -163,8 +163,7 @@
 
     };
 
-    GXV_Validate_Func  func;
-    FT_UShort          i;
+    FT_UShort  i;
 
 
     GXV_NAME_ENTER( "subtables in a chain" );
@@ -171,6 +170,8 @@
 
     for ( i = 0; i < nSubtables; i++ )
     {
+      GXV_Validate_Func  func;
+
       FT_UShort  length;
       FT_UShort  coverage;
 #ifdef GXV_LOAD_UNUSED_VARS
--- a/src/gxvalid/gxvmorx.c
+++ b/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    TrueTypeGX/AAT morx table validation (body).                         */
 /*                                                                         */
-/*  Copyright 2005, 2008 by                                                */
+/*  Copyright 2005, 2008, 2013 by                                          */
 /*  suzuki toshiya, Masatake YAMATO, Red Hat K.K.,                         */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
@@ -57,8 +57,6 @@
 
     };
 
-    GXV_Validate_Func  func;
-
     FT_UShort  i;
 
 
@@ -66,6 +64,8 @@
 
     for ( i = 0; i < nSubtables; i++ )
     {
+      GXV_Validate_Func  func;
+
       FT_ULong  length;
       FT_ULong  coverage;
 #ifdef GXV_LOAD_UNUSED_VARS
--- a/src/lzw/ftlzw.c
+++ b/src/lzw/ftlzw.c
@@ -111,7 +111,7 @@
                     FT_Stream   source )
   {
     FT_LzwState  lzw   = &zip->lzw;
-    FT_Error     error = FT_Err_Ok;
+    FT_Error     error;
 
 
     zip->stream = stream;
--- a/src/pcf/pcfread.c
+++ b/src/pcf/pcfread.c
@@ -92,7 +92,7 @@
     PCF_Toc    toc = &face->toc;
     PCF_Table  tables;
 
-    FT_Memory  memory = FT_FACE(face)->memory;
+    FT_Memory  memory = FT_FACE( face )->memory;
     FT_UInt    n;
 
 
@@ -402,7 +402,7 @@
     FT_ULong           nprops, i;
     FT_ULong           format, size;
     FT_Error           error;
-    FT_Memory          memory     = FT_FACE(face)->memory;
+    FT_Memory          memory     = FT_FACE( face )->memory;
     FT_ULong           string_size;
     FT_String*         strings    = 0;
 
@@ -566,10 +566,10 @@
   pcf_get_metrics( FT_Stream  stream,
                    PCF_Face   face )
   {
-    FT_Error    error    = FT_Err_Ok;
-    FT_Memory   memory   = FT_FACE(face)->memory;
+    FT_Error    error;
+    FT_Memory   memory  = FT_FACE( face )->memory;
     FT_ULong    format, size;
-    PCF_Metric  metrics  = 0;
+    PCF_Metric  metrics = 0;
     FT_ULong    nmetrics, i;
 
 
@@ -663,8 +663,8 @@
   pcf_get_bitmaps( FT_Stream  stream,
                    PCF_Face   face )
   {
-    FT_Error   error   = FT_Err_Ok;
-    FT_Memory  memory  = FT_FACE(face)->memory;
+    FT_Error   error;
+    FT_Memory  memory  = FT_FACE( face )->memory;
     FT_Long*   offsets = NULL;
     FT_Long    bitmapSizes[GLYPHPADOPTIONS];
     FT_ULong   format, size;
@@ -765,8 +765,8 @@
   pcf_get_encodings( FT_Stream  stream,
                      PCF_Face   face )
   {
-    FT_Error      error  = FT_Err_Ok;
-    FT_Memory     memory = FT_FACE(face)->memory;
+    FT_Error      error;
+    FT_Memory     memory = FT_FACE( face )->memory;
     FT_ULong      format, size;
     int           firstCol, lastCol;
     int           firstRow, lastRow;
@@ -914,7 +914,7 @@
                  FT_ULong   type )
   {
     FT_ULong   format, size;
-    FT_Error   error = FT_Err_Ok;
+    FT_Error   error;
     PCF_Accel  accel = &face->accel;
 
 
@@ -1014,7 +1014,7 @@
          ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
     {
       face->style_flags |= FT_STYLE_FLAG_BOLD;
-      strings[1] = (char *)"Bold";
+      strings[1] = (char*)"Bold";
     }
 
     prop = pcf_find_property( pcf, "SETWIDTH_NAME" );
@@ -1021,13 +1021,13 @@
     if ( prop && prop->isString                                        &&
          *(prop->value.atom)                                           &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[3] = (char *)(prop->value.atom);
+      strings[3] = (char*)( prop->value.atom );
 
     prop = pcf_find_property( pcf, "ADD_STYLE_NAME" );
     if ( prop && prop->isString                                        &&
          *(prop->value.atom)                                           &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[0] = (char *)(prop->value.atom);
+      strings[0] = (char*)( prop->value.atom );
 
     for ( len = 0, nn = 0; nn < 4; nn++ )
     {
@@ -1041,7 +1041,7 @@
 
     if ( len == 0 )
     {
-      strings[0] = (char *)"Regular";
+      strings[0] = (char*)"Regular";
       lengths[0] = ft_strlen( strings[0] );
       len        = lengths[0] + 1;
     }
@@ -1079,7 +1079,7 @@
 
 
           for ( mm = 0; mm < len; mm++ )
-            if (s[mm] == ' ')
+            if ( s[mm] == ' ' )
               s[mm] = '-';
         }
 
@@ -1097,7 +1097,7 @@
                  PCF_Face   face )
   {
     FT_Error   error  = FT_Err_Ok;
-    FT_Memory  memory = FT_FACE(face)->memory;
+    FT_Memory  memory = FT_FACE( face )->memory;
     FT_Bool    hasBDFAccelerators;
 
 
--- a/src/psaux/afmparse.c
+++ b/src/psaux/afmparse.c
@@ -120,7 +120,6 @@
   afm_stream_read_one( AFM_Stream  stream )
   {
     char*  str;
-    int    ch;
 
 
     afm_stream_skip_spaces( stream );
@@ -131,7 +130,9 @@
 
     while ( 1 )
     {
-      ch = AFM_GETC();
+      int  ch = AFM_GETC();
+
+
       if ( AFM_IS_SPACE( ch ) )
         break;
       else if ( AFM_IS_NEWLINE( ch ) )
@@ -160,7 +161,6 @@
   afm_stream_read_string( AFM_Stream  stream )
   {
     char*  str;
-    int    ch;
 
 
     afm_stream_skip_spaces( stream );
@@ -172,7 +172,9 @@
     /* scan to eol */
     while ( 1 )
     {
-      ch = AFM_GETC();
+      int  ch = AFM_GETC();
+
+
       if ( AFM_IS_NEWLINE( ch ) )
       {
         stream->status = AFM_STREAM_STATUS_EOL;
--- a/src/pshinter/pshalgo.c
+++ b/src/pshinter/pshalgo.c
@@ -401,13 +401,13 @@
                    FT_Fixed        delta,
                    FT_Int          dimension )
   {
-    PSH_Hint  hint;
-    FT_UInt   count;
+    FT_UInt  count;
 
 
     for ( count = 0; count < table->max_hints; count++ )
     {
-      hint = table->hints + count;
+      PSH_Hint  hint = table->hints + count;
+
 
       hint->cur_pos = FT_MulFix( hint->org_pos, scale ) + delta;
       hint->cur_len = FT_MulFix( hint->org_len, scale );
--- a/src/pshinter/pshrec.c
+++ b/src/pshinter/pshrec.c
@@ -316,7 +316,7 @@
                           FT_UInt         bit_count,
                           FT_Memory       memory )
   {
-    FT_Error  error = FT_Err_Ok;
+    FT_Error  error;
     PS_Mask   mask;
 
 
@@ -583,12 +583,13 @@
                          FT_UInt       end_point )
   {
     FT_UInt  count = dim->masks.num_masks;
-    PS_Mask  mask;
 
 
     if ( count > 0 )
     {
-      mask            = dim->masks.masks + count - 1;
+      PS_Mask  mask = dim->masks.masks + count - 1;
+
+
       mask->end_point = end_point;
     }
   }
@@ -621,7 +622,7 @@
                               FT_UInt         end_point,
                               FT_Memory       memory )
   {
-    FT_Error  error = FT_Err_Ok;
+    FT_Error  error;
 
 
     /* reset current mask, if any */
--- a/src/raster/ftraster.c
+++ b/src/raster/ftraster.c
@@ -806,8 +806,7 @@
   static Bool
   End_Profile( RAS_ARGS Bool  overshoot )
   {
-    Long      h;
-    PProfile  oldProfile;
+    Long  h;
 
 
     h = (Long)( ras.top - ras.cProfile->offset );
@@ -821,6 +820,9 @@
 
     if ( h > 0 )
     {
+      PProfile  oldProfile;
+
+
       FT_TRACE6(( "Ending profile %p, start = %ld, height = %ld\n",
                   ras.cProfile, ras.cProfile->start, h ));
 
@@ -877,7 +879,7 @@
   Insert_Y_Turn( RAS_ARGS Int  y )
   {
     PLong  y_turns;
-    Int    y2, n;
+    Int    n;
 
 
     n       = ras.numTurns - 1;
@@ -891,7 +893,9 @@
     if ( n >= 0 && y > y_turns[n] )
       while ( n >= 0 )
       {
-        y2 = (Int)y_turns[n];
+        Int  y2 = (Int)y_turns[n];
+
+
         y_turns[n] = y;
         y = y2;
         n--;
@@ -927,7 +931,6 @@
   static Bool
   Finalize_Profile_Table( RAS_ARG )
   {
-    Int       bottom, top;
     UShort    n;
     PProfile  p;
 
@@ -939,6 +942,9 @@
     {
       while ( n > 0 )
       {
+        Int  bottom, top;
+
+
         if ( n > 1 )
           p->link = (PProfile)( p->offset + p->height );
         else
@@ -2032,9 +2038,7 @@
     int       i;
     unsigned  start;
 
-    PProfile  lastProfile;
 
-
     ras.fProfile = NULL;
     ras.joint    = FALSE;
     ras.fresh    = FALSE;
@@ -2051,7 +2055,8 @@
 
     for ( i = 0; i < ras.outline.n_contours; i++ )
     {
-      Bool  o;
+      PProfile  lastProfile;
+      Bool      o;
 
 
       ras.state    = Unknown_State;
@@ -2275,8 +2280,6 @@
                                 PProfile    right )
   {
     Long   e1, e2;
-    int    c1, c2;
-    Byte   f1, f2;
     Byte*  target;
 
     FT_UNUSED( y );
@@ -2295,6 +2298,10 @@
 
     if ( e2 >= 0 && e1 < ras.bWidth )
     {
+      int   c1, c2;
+      Byte  f1, f2;
+
+
       if ( e1 < 0 )
         e1 = 0;
       if ( e2 >= ras.bWidth )
@@ -2518,10 +2525,6 @@
                                   PProfile    left,
                                   PProfile    right )
   {
-    Long   e1, e2;
-    PByte  bits;
-    Byte   f1;
-
     FT_UNUSED( left );
     FT_UNUSED( right );
 
@@ -2528,11 +2531,18 @@
 
     if ( x2 - x1 < ras.precision )
     {
+      Long  e1, e2;
+      Byte  f1;
+
+
       e1 = CEILING( x1 );
       e2 = FLOOR  ( x2 );
 
       if ( e1 == e2 )
       {
+        PByte  bits;
+
+
         bits = ras.bTarget + ( y >> 3 );
         f1   = (Byte)( 0x80 >> ( y & 7 ) );
 
@@ -2729,8 +2739,6 @@
   static void
   Vertical_Gray_Sweep_Step( RAS_ARG )
   {
-    Int     c1, c2;
-    PByte   pix, bit, bit2;
     short*  count = (short*)count_table;
     Byte*   grays;
 
@@ -2739,6 +2747,9 @@
 
     if ( ras.traceOfs > ras.gray_width )
     {
+      PByte  pix;
+
+
       pix   = ras.gTarget + ras.traceG + ras.gray_min_x * 4;
       grays = ras.grays;
 
@@ -2749,7 +2760,10 @@
         Int   last_bit   = last_pixel & 3;
         Bool  over       = 0;
 
+        Int    c1, c2;
+        PByte  bit, bit2;
 
+
         if ( ras.gray_max_x >= last_cell && last_bit != 3 )
         {
           ras.gray_max_x = last_cell - 1;
@@ -2841,7 +2855,6 @@
   {
     Long   e1, e2;
     PByte  pixel;
-    Byte   color;
 
 
     /* During the horizontal sweep, we only take care of drop-outs */
@@ -2895,6 +2908,9 @@
 
     if ( e1 >= 0 )
     {
+      Byte  color;
+
+
       if ( x2 - x1 >= ras.precision_half )
         color = ras.grays[2];
       else
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -630,7 +630,7 @@
                                  TPos    x2,
                                  TCoord  y2 )
   {
-    TCoord  ex1, ex2, fx1, fx2, delta, mod, lift, rem;
+    TCoord  ex1, ex2, fx1, fx2, delta, mod;
     long    p, first, dx;
     int     incr;
 
@@ -691,6 +691,9 @@
 
     if ( ex1 != ex2 )
     {
+      TCoord  lift, rem;
+
+
       p    = ONE_PIXEL * ( y2 - y1 + delta );
       lift = (TCoord)( p / dx );
       rem  = (TCoord)( p % dx );
@@ -1257,9 +1260,7 @@
                        TPos    area,
                        TCoord  acount )
   {
-    FT_Span*  span;
-    int       count;
-    int       coverage;
+    int  coverage;
 
 
     /* compute the coverage line's coverage, depending on the    */
@@ -1301,6 +1302,10 @@
 
     if ( coverage )
     {
+      FT_Span*  span;
+      int       count;
+
+
       /* see whether we can add this span to the current list */
       count = ras.num_gray_spans;
       span  = ras.gray_spans + count - 1;
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -155,8 +155,6 @@
 
     case OUTPUT_WATCOM_LBC:
       {
-        /* we must omit the .dll suffix from the library name */
-        char         temp[512];
         const char*  dot;
 
 
@@ -167,10 +165,12 @@
           exit( 4 );
         }
 
+        /* we must omit the .dll suffix from the library name */
         dot = strchr( dll_name, '.' );
         if ( dot != NULL )
         {
-          int  len = dot - dll_name;
+          char  temp[512];
+          int   len = dot - dll_name;
 
 
           if ( len > (int)( sizeof ( temp ) - 1 ) )
--- a/src/tools/ftrandom/ftrandom.c
+++ b/src/tools/ftrandom/ftrandom.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2007, 2008 by George Williams */
+/* Copyright (C) 2005, 2007, 2008, 2013 by George Williams */
 /*
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -184,7 +184,6 @@
   {
     FT_Library  context;
     FT_Face     face;
-    int         i, num;
 
 
     if ( FT_Init_FreeType( &context ) )
@@ -203,6 +202,9 @@
       TestFace( face );
     else
     {
+      int  i, num;
+
+
       num = face->num_faces;
       FT_Done_Face( face );
 
@@ -327,19 +329,20 @@
   FindFonts( char**  fontdirs,
              char**  extensions )
   {
-    DIR*            examples;
-    struct dirent*  ent;
+    int          i, max;
+    char         buffer[1025];
+    struct stat  statb;
 
-    int             i, max;
-    char            buffer[1025];
-    struct stat     statb;
 
-
     max  = 0;
     fcnt = 0;
 
     for ( i = 0; fontdirs[i] != NULL; ++i )
     {
+      DIR*            examples;
+      struct dirent*  ent;
+
+
       examples = opendir( fontdirs[i] );
       if ( examples == NULL )
       {
@@ -555,7 +558,6 @@
         char**  argv )
   {
     char    **dirs, **exts;
-    char    *pt, *end;
     int     dcnt = 0, ecnt = 0, rset = false, allexts = false;
     int     i;
     time_t  now;
@@ -567,7 +569,10 @@
 
     for ( i = 1; i < argc; ++i )
     {
-      pt = argv[i];
+      char*  pt = argv[i];
+      char*  end;
+
+
       if ( pt[0] == '-' && pt[1] == '-' )
         ++pt;
 
@@ -633,12 +638,21 @@
     }
 
     if ( allexts )
+    {
+      free( exts );
       exts = NULL;
+    }
     else if ( ecnt == 0 )
+    {
+      free( exts );
       exts = default_ext_list;
+    }
 
     if ( dcnt == 0 )
+    {
+      free( dirs );
       dirs = default_dir_list;
+    }
 
     if ( testfile != NULL )
       ExecuteTest( testfile );         /* This should never return */
--- a/src/tools/test_trig.c
+++ b/src/tools/test_trig.c
@@ -17,12 +17,15 @@
   static void
   test_cos( void )
   {
-    FT_Fixed  f1, f2;
-    double    d1, d2;
-    int       i;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
     {
+      FT_Fixed  f1, f2;
+      double    d1, d2;
+
+
       f1 = FT_Cos(i);
       d1 = f1/65536.0;
       d2 = cos( i*SPI );
@@ -38,16 +41,18 @@
   }
 
 
-
   static void
   test_sin( void )
   {
-    FT_Fixed  f1, f2;
-    double    d1, d2;
-    int       i;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
     {
+      FT_Fixed  f1, f2;
+      double    d1, d2;
+
+
       f1 = FT_Sin(i);
       d1 = f1/65536.0;
       d2 = sin( i*SPI );
@@ -66,12 +71,15 @@
   static void
   test_tan( void )
   {
-    FT_Fixed  f1, f2;
-    double    d1, d2;
-    int       i;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_PI2-0x2000000; i += 0x10000 )
     {
+      FT_Fixed  f1, f2;
+      double    d1, d2;
+
+
       f1 = FT_Tan(i);
       d1 = f1/65536.0;
       d2 = tan( i*SPI );
@@ -90,12 +98,16 @@
   static void
   test_atan2( void )
   {
-    FT_Fixed  c2, s2;
-    double    l, a, c1, s1;
-    int       i, j;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
     {
+      FT_Fixed  c2, s2;
+      double    l, a, c1, s1;
+      int       j;
+
+
       l  = 5.0;
       a  = i*SPI;
 
@@ -117,16 +129,20 @@
     }
   }
 
+
   static void
   test_unit( void )
   {
-    FT_Vector  v;
-    double     a, c1, s1;
-    FT_Fixed   c2, s2;
-    int        i;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
     {
+      FT_Vector  v;
+      double     a, c1, s1;
+      FT_Fixed   c2, s2;
+
+
       FT_Vector_Unit( &v, i );
       a  = ( i*SPI );
       c1 = cos(a);
@@ -150,12 +166,15 @@
   static void
   test_length( void )
   {
-    FT_Vector  v;
-    FT_Fixed   l, l2;
-    int        i;
+    int  i;
 
+
     for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
     {
+      FT_Vector  v;
+      FT_Fixed   l, l2;
+
+
       l   = (FT_Fixed)(500.0*65536.0);
       v.x = (FT_Fixed)( l * cos( i*SPI ) );
       v.y = (FT_Fixed)( l * sin( i*SPI ) );
@@ -174,13 +193,15 @@
   static void
   test_rotate( void )
   {
-    FT_Fixed  c2, s2, c4, s4;
-    FT_Vector v;
-    double    l, ra, a, c1, s1, cra, sra, c3, s3;
-    int       i, j, rotate;
+    int  rotate;
 
+
     for ( rotate = 0; rotate < FT_ANGLE_2PI; rotate += 0x10000 )
     {
+      double  ra, cra, sra;
+      int     i;
+
+
       ra  = rotate*SPI;
       cra = cos( ra );
       sra = sin( ra );
@@ -187,6 +208,12 @@
 
       for ( i = 0; i < FT_ANGLE_2PI; i += 0x10000 )
       {
+        FT_Fixed   c2, s2, c4, s4;
+        FT_Vector  v;
+        double     l, a, c1, s1, c3, s3;
+        int        j;
+
+
         l  = 500.0;
         a  = i*SPI;
 
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -122,7 +122,6 @@
 
     start = (FT_Byte*)stream->cursor;
     limit = (FT_Byte*)stream->limit;
-    p     = start;
 
     /* Figure out how long the width table is.          */
     /* This info is a little-endian short at offset 99. */
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -69,13 +69,13 @@
   t1_get_name_index( T1_Face     face,
                      FT_String*  glyph_name )
   {
-    FT_Int      i;
-    FT_String*  gname;
+    FT_Int  i;
 
 
     for ( i = 0; i < face->type1.num_glyphs; i++ )
     {
-      gname = face->type1.glyph_names[i];
+      FT_String*  gname = face->type1.glyph_names[i];
+
 
       if ( !ft_strcmp( glyph_name, gname ) )
         return (FT_UInt)i;
--- a/src/type42/t42drivr.c
+++ b/src/type42/t42drivr.c
@@ -72,13 +72,13 @@
   t42_get_name_index( T42_Face    face,
                       FT_String*  glyph_name )
   {
-    FT_Int      i;
-    FT_String*  gname;
+    FT_Int  i;
 
 
     for ( i = 0; i < face->type1.num_glyphs; i++ )
     {
-      gname = face->type1.glyph_names[i];
+      FT_String*  gname = face->type1.glyph_names[i];
+
 
       if ( glyph_name[0] == gname[0] && !ft_strcmp( glyph_name, gname ) )
         return (FT_UInt)ft_atol( (const char *)face->type1.charstrings[i] );
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -93,7 +93,6 @@
     if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
     {
       FT_Int    charcode, idx, min_char, max_char;
-      FT_Byte*  char_name;
       FT_Byte*  glyph_name;
 
 
@@ -109,6 +108,9 @@
       charcode = 0;
       for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
       {
+        FT_Byte*  char_name;
+
+
         type1->encoding.char_index[charcode] = 0;
         type1->encoding.char_name [charcode] = (char *)".notdef";