freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] parthw-wip a8da70f 2/6: [tfm] Archive code for other font me


From: Parth Wazurkar
Subject: [freetype2] parthw-wip a8da70f 2/6: [tfm] Archive code for other font metric formats.
Date: Fri, 29 Jun 2018 08:59:14 -0400 (EDT)

branch: parthw-wip
commit a8da70f09dcbbbcf18fc58d33d2bcd0c19b8e07c
Author: Parth Wazurkar <address@hidden>
Commit: Parth Wazurkar <address@hidden>

    [tfm] Archive code for other font metric formats.
    
    * src/tfm/tfmlib.c: Archive code for Omega Font metric(OFM),
    Japanese Font Metric(JFM), font formats.
---
 src/tfm/tfmlib.c | 560 +++++++++++++++++++++++++++----------------------------
 1 file changed, 270 insertions(+), 290 deletions(-)

diff --git a/src/tfm/tfmlib.c b/src/tfm/tfmlib.c
index 700b570..406aef9 100644
--- a/src/tfm/tfmlib.c
+++ b/src/tfm/tfmlib.c
@@ -46,185 +46,161 @@
    *
    */
 
-#define READ_INT1(fp)    (INT1)vf_tex_read_intn((fp), 1)
-#define READ_UINT1(fp)   (UINT1)vf_tex_read_uintn((fp), 1)
-#define READ_INT2(fp)    (INT2)vf_tex_read_intn((fp), 2)
-#define READ_UINT2(fp)   (UINT2)vf_tex_read_uintn((fp), 2)
-#define READ_INT3(fp)    (INT3)vf_tex_read_intn((fp), 3)
-#define READ_UINT3(fp)   (UINT3)vf_tex_read_uintn((fp), 3)
-#define READ_INT4(fp)    (INT4)vf_tex_read_intn((fp), 4)
-#define READ_UINT4(fp)   (UINT4)vf_tex_read_uintn((fp), 4)
-#define READ_INTN(fp,n)  (INT4)vf_tex_read_intn((fp), (n))
-#define READ_UINTN(fp,n) (UINT4)vf_tex_read_uintn((fp), (n))
-#define SKIP_N(fp,k)     vf_tex_skip_n((fp), (k))
-
-Glocal long           vf_tex_read_intn(FILE*,int);
-Glocal unsigned long  vf_tex_read_uintn(FILE*,int);
-Glocal void           vf_tex_skip_n(FILE*,int);
-
-
+  long           tfm_read_intn(FT_Stream,int);
+  unsigned long  tfm_read_uintn(FT_Stream,int);
 
+#define READ_UINT1( stream )    (UINT1)tfm_read_uintn( stream, 1)
+#define READ_UINTN( stream,n)   (UINT4)tfm_read_uintn( stream, n)
+#define READ_INT1( stream )     (INT1)tfm_read_intn( stream, 1)
+#define READ_INT4( stream )     (INT4)tfm_read_intn( stream, 4)
 
 /*
  * Reading a Number from file
  */
-Glocal unsigned long
-vf_tex_read_uintn(FILE* fp, int size)
-{
-  unsigned long  v;
-
-  v = 0L;
-  while (size >= 1){
-    v = v*256L + (unsigned long)getc(fp);
-    --size;
-  }
-  return v;
-}
-
-Glocal long
-vf_tex_read_intn(FILE* fp, int size)
-{
-  long           v;
-
-  v = (long)getc(fp) & 0xffL;
-  if (v & 0x80L)
-    v = v - 256L;
-  --size;
-  while (size >= 1){
-    v = v*256L + (unsigned long)getc(fp);
-    --size;
-  }
-
-  return v;
-}
-
-Glocal void
-vf_tex_skip_n(FILE* fp, int size)
-{
-  while (size > 0){
-    (void)getc(fp);
-    --size;
-  }
-}
-
-Glocal unsigned long
-vf_tex_get_uintn(unsigned char *p, int size)
-{
-  unsigned long  v;
-
-  v = 0L;
-  while (size >= 1){
-    v = v*256L + (unsigned long) *(p++);
-    --size;
+  unsigned long
+  tfm_read_uintn(FT_Stream stream, int size)
+  {
+    unsigned long  v,k;
+    FT_Error error = FT_Err_Ok;
+    FT_Byte tp;
+    v = 0L;
+    while (size >= 1)
+    {
+      FT_READ_BYTE(tp);
+      k =(unsigned long)tp;
+      v = v*256L + k;
+      --size;
+    }
+    return v;
   }
 
-  return v;
-}
-
-Glocal long
-vf_tex_get_intn(unsigned char *p, int size)
-{
-  long           v;
-
-  v = (long)*(p++) & 0xffL;
-  if (v & 0x80L)
-    v = v - 256L;
-  --size;
-  while (size >= 1){
-    v = v*256L + (unsigned long) *(p++);
+  long
+  tfm_read_intn(FT_Stream stream, int size)
+  {
+    long           v;
+    FT_Byte tp;
+    FT_Error error= FT_Err_Ok;
+    unsigned long z ;
+    FT_READ_BYTE(tp);
+    z= (unsigned long)tp;
+    v = (long)z & 0xffL;
+    if (v & 0x80L)
+      v = v - 256L;
     --size;
+    while (size >= 1)
+    {
+      FT_READ_BYTE(tp);
+      z= (unsigned long)tp;
+      v = v*256L + z;
+      --size;
+               }
+    return v;
   }
 
-  return v;
-}
-
-
-
-
-Private TFM
-read_tfm(FILE* fp)
-{
-  TFM    tfm;
-  UINT4  lf, lh, nc, nci, err;
-  UINT4  offset_header, offset_char_info, offset_param;
-  UINT4  nw,  nh,  nd,  ni, nl, nk, neng, np, dir;
-  INT4   *w,  *h,  *d;
-  UINT4  *ci, v;
-  UINT4  i;
-  INT4   bbxw, bbxh, xoff, yoff;
-
-  ALLOC_IF_ERR(tfm, struct s_tfm){
-    vf_error = VF_ERR_NO_MEMORY;
-    return NULL;
-  }
-
-  tfm->width  = NULL;
-  tfm->height = NULL;
-  tfm->depth  = NULL;
-  tfm->ct_kcode = NULL;
-  tfm->ct_ctype = NULL;
-
-  tfm->font_bbx_w = 0.0;
-  tfm->font_bbx_h = 0.0;
-  tfm->font_bbx_xoff = 0.0;
-  tfm->font_bbx_yoff = 0.0;
+  /**************************************************************************
+   *
+   * API.
+   *
+   */
 
-  err = 0;
-  rewind(fp);
-  lf = (UINT4)READ_UINT2(fp);
-  if ((lf == 11) || (lf == 9)){
-    /* JFM file of Japanese TeX by ASCII Coop. */
-    tfm->type        = METRIC_TYPE_JFM;
-    tfm->type_aux    = (lf == 11)?METRIC_TYPE_JFM_AUX_H:METRIC_TYPE_JFM_AUX_V;
-    tfm->nt          = (UINT4)READ_UINT2(fp);
-    lf               = (UINT4)READ_UINT2(fp);
-    lh               = (UINT4)READ_UINT2(fp);
-    offset_header    = 4*7;
-    offset_char_info = 4*(7+tfm->nt+lh);
-  } else if (lf == 0){
-    /* Omega Metric File */
-    tfm->type        = METRIC_TYPE_OFM;
-    tfm->type_aux    = READ_INT2(fp);    /* ofm_level */
-    if ((tfm->type_aux < 0) || (1 < tfm->type_aux))
-      tfm->type_aux = 0;  /* broken, maybe */
-    lf               = READ_UINT4(fp);
-    lh               = READ_UINT4(fp);
-    if (tfm->type_aux == 0){   /* level 0 OFM */
-      offset_header    = 4*14;
-      offset_char_info = 4*(14+lh);
-    } else {                   /* level 1 OFM: *** NOT SUPPORTED YET *** */
-      offset_header    = 4*29;
-      offset_char_info = 4*(29+lh);
+  FT_LOCAL_DEF( FT_Error )
+  tfm_load_font(  FT_Stream       stream,
+                  FT_Memory       extmemory,
+                  TFM_Glyph       tfm  )
+  {
+    UINT4  lf, lh, nc, nci, err;
+    UINT4  offset_header, offset_char_info, offset_param;
+    UINT4  nw,  nh,  nd,  ni, nl, nk, neng, np, dir;
+    INT4   *w,  *h,  *d;
+    UINT4  *ci, v;
+    UINT4  i;
+    INT4   bbxw, bbxh, xoff, yoff;
+
+    if( FT_ALLOC(tfm, sizeof(TFM_GlyphRec)) )
+      goto ErrExit;
+
+    tfm->width  = NULL;
+    tfm->height = NULL;
+    tfm->depth  = NULL;
+    tfm->ct_kcode = NULL;
+    tfm->ct_ctype = NULL;
+
+    tfm->font_bbx_w = 0.0;
+    tfm->font_bbx_h = 0.0;
+    tfm->font_bbx_xoff = 0.0;
+    tfm->font_bbx_yoff = 0.0;
+
+    err = 0;
+    rewind(fp);
+    lf = (UINT4)READ_UINT2( stream );
+    #if 0
+    if ((lf == 11) || (lf == 9))
+    {
+      /* JFM file of Japanese TeX by ASCII Coop. */
+      tfm->type        = METRIC_TYPE_JFM;
+      tfm->type_aux    = (lf == 
11)?METRIC_TYPE_JFM_AUX_H:METRIC_TYPE_JFM_AUX_V;
+      tfm->nt          = (UINT4)READ_UINT2(fp);
+      lf               = (UINT4)READ_UINT2(fp);
+      lh               = (UINT4)READ_UINT2(fp);
+      offset_header    = 4*7;
+      offset_char_info = 4*(7+tfm->nt+lh);
+    }
+    else if (lf == 0)
+    {
+      /* Omega Metric File */
+      tfm->type        = METRIC_TYPE_OFM;
+      tfm->type_aux    = READ_INT2(fp);    /* ofm_level */
+      if ((tfm->type_aux < 0) || (1 < tfm->type_aux))
+        tfm->type_aux = 0;  /* broken, maybe */
+      lf               = READ_UINT4(fp);
+      lh               = READ_UINT4(fp);
+      if (tfm->type_aux == 0)
+      {   /* level 0 OFM */
+        offset_header    = 4*14;
+        offset_char_info = 4*(14+lh);
+      }
+      else
+      {                   /* level 1 OFM: *** NOT SUPPORTED YET *** */
+        offset_header    = 4*29;
+        offset_char_info = 4*(29+lh);
+      }
     }
-  } else {
+    else
+    { }
+    #endif
     /* Traditional TeX Metric File */
     tfm->type        = METRIC_TYPE_TFM;
     tfm->type_aux    = 0;
     lh               = (int)READ_UINT2(fp);
     offset_header    = 4*6;
     offset_char_info = 4*(6+lh);
-  }
-
-  if (tfm->type == METRIC_TYPE_OFM){
-    tfm->begin_char  = READ_UINT4(fp);
-    tfm->end_char    = READ_UINT4(fp);
-    nw   = READ_UINT4(fp);
-    nh   = READ_UINT4(fp);
-    nd   = READ_UINT4(fp);
 
-    ni   = READ_UINT4(fp);
-    nl   = READ_UINT4(fp);
-    nk   = READ_UINT4(fp);
-    neng = READ_UINT4(fp);
-    np   = READ_UINT4(fp);
-    dir  = READ_UINT4(fp);
+    #if 0
+    if (tfm->type == METRIC_TYPE_OFM)
+    {
+      tfm->begin_char  = READ_UINT4(fp);
+      tfm->end_char    = READ_UINT4(fp);
+      nw   = READ_UINT4(fp);
+      nh   = READ_UINT4(fp);
+      nd   = READ_UINT4(fp);
+
+      ni   = READ_UINT4(fp);
+      nl   = READ_UINT4(fp);
+      nk   = READ_UINT4(fp);
+      neng = READ_UINT4(fp);
+      np   = READ_UINT4(fp);
+      dir  = READ_UINT4(fp);
 
-    if (((signed)(tfm->begin_char-1) > (signed)tfm->end_char) ||
-        (tfm->end_char > 65535)){
-      vf_error = VF_ERR_INVALID_METRIC;
-      return NULL;
+      if (((signed)(tfm->begin_char-1) > (signed)tfm->end_char) ||
+        (tfm->end_char > 65535))
+      {
+        vf_error = VF_ERR_INVALID_METRIC;
+        return NULL;
+      }
     }
-  } else {
+    else
+    { }
+    #endif
     tfm->begin_char  = (int)READ_UINT2(fp);
     tfm->end_char    = (int)READ_UINT2(fp);
     nw   = (UINT4)READ_UINT2(fp);
@@ -237,159 +213,163 @@ read_tfm(FILE* fp)
     neng = (UINT4)READ_UINT2(fp);
     np   = (UINT4)READ_UINT2(fp);
 
-    if (tfm->type == METRIC_TYPE_TFM){
+    if (tfm->type == METRIC_TYPE_TFM)
+    {
       if (((signed)(tfm->begin_char-1) > (signed)tfm->end_char) ||
-          (tfm->end_char > 255)){
+         (tfm->end_char > 255))
+      {
         vf_error = VF_ERR_INVALID_METRIC;
         return NULL;
       }
     }
-  }
-
-  fseek(fp, offset_header, SEEK_SET);
-  tfm->cs          = READ_UINT4(fp);
-  tfm->ds          = READ_UINT4(fp);
-  tfm->design_size = (double)(tfm->ds)/(double)(1<<20);
 
-  nc  = tfm->end_char - tfm->begin_char + 1;
-  nci = nc;
-  if (tfm->type == METRIC_TYPE_OFM)
-    nci *= 2;
-  ci = (UINT4*)calloc(nci, sizeof(UINT4));
-  w  = (INT4*)calloc(nw,  sizeof(UINT4));
-  h  = (INT4*)calloc(nh,  sizeof(UINT4));
-  d  = (INT4*)calloc(nd,  sizeof(UINT4));
-  if ((ci == NULL) || (w == NULL) || (h == NULL) || (d == NULL)){
-    err = VF_ERR_NO_MEMORY;
-    goto Exit;
-  }
-  fseek(fp, offset_char_info, SEEK_SET);
-  for (i = 0; i < nci; i++)
-    ci[i] = READ_UINT4(fp);
-  offset_param = ftell(fp) + 4*(nw + nh + nd + ni + nl + nk + neng);
-  for (i = 0; i < nw; i++)
-    w[i] = READ_INT4(fp);
-  for (i = 0; i < nh; i++)
-    h[i] = READ_INT4(fp);
-  for (i = 0; i < nd; i++)
-    d[i] = READ_INT4(fp);
-
-  tfm->width  = (INT4*)calloc(nc, sizeof(INT4));
-  tfm->height = (INT4*)calloc(nc, sizeof(INT4));
-  tfm->depth  = (INT4*)calloc(nc, sizeof(INT4));
-  if ((tfm->width == NULL) || (tfm->height == NULL) || (tfm->depth == NULL)){
-    err = VF_ERR_NO_MEMORY;
-    goto Exit;
-  }
-  bbxw = 0;
-  bbxh = 0;
-  xoff = 0;
-  yoff = 0;
-  if (tfm->type == METRIC_TYPE_OFM){
-    for (i = 0; i < nc; i++){
-      v = ci[2*i];
-      tfm->depth[i]  = d[v & 0xff]; v >>= 8;
-      tfm->height[i] = h[v & 0xff]; v >>= 8;
-      tfm->width[i]  = w[v & 0xffff];
-      if (bbxw < tfm->width[i])
-       bbxw = tfm->width[i];
-      if (bbxh < (tfm->height[i] + tfm->depth[i]))
-       bbxh = tfm->height[i] + tfm->depth[i];
-      if (yoff > -tfm->depth[i])
-       yoff = -tfm->depth[i];
-#if 0
-      printf("** %.3f %.3f %.3f\n",
-            (double)tfm->width[i]/(double)(1<<20),
-            (double)tfm->height[i]/(double)(1<<20),
-            (double)tfm->depth[i]/(double)(1<<20));
-#endif
+    fseek(fp, offset_header, SEEK_SET);
+    tfm->cs          = READ_UINT4(fp);
+    tfm->ds          = READ_UINT4(fp);
+    tfm->design_size = (double)(tfm->ds)/(double)(1<<20);
+
+    nc  = tfm->end_char - tfm->begin_char + 1;
+    nci = nc;
+    #if 0
+    if (tfm->type == METRIC_TYPE_OFM)
+      nci *= 2;
+    #endif
+    ci = (UINT4*)calloc(nci, sizeof(UINT4));
+    w  = (INT4*)calloc(nw,  sizeof(UINT4));
+    h  = (INT4*)calloc(nh,  sizeof(UINT4));
+    d  = (INT4*)calloc(nd,  sizeof(UINT4));
+    if ((ci == NULL) || (w == NULL) || (h == NULL) || (d == NULL))
+    {
+      err = VF_ERR_NO_MEMORY;
+      goto Exit;
+    }
+    fseek(fp, offset_char_info, SEEK_SET);
+    for (i = 0; i < nci; i++)
+      ci[i] = READ_UINT4(fp);
+    offset_param = ftell(fp) + 4*(nw + nh + nd + ni + nl + nk + neng);
+    for (i = 0; i < nw; i++)
+      w[i] = READ_INT4(fp);
+    for (i = 0; i < nh; i++)
+      h[i] = READ_INT4(fp);
+    for (i = 0; i < nd; i++)
+      d[i] = READ_INT4(fp);
+
+    tfm->width  = (INT4*)calloc(nc, sizeof(INT4));
+    tfm->height = (INT4*)calloc(nc, sizeof(INT4));
+    tfm->depth  = (INT4*)calloc(nc, sizeof(INT4));
+    if ((tfm->width == NULL) || (tfm->height == NULL) || (tfm->depth == NULL))
+    {
+      err = VF_ERR_NO_MEMORY;
+      goto Exit;
+    }
+    bbxw = 0;
+    bbxh = 0;
+    xoff = 0;
+    yoff = 0;
+    #if 0
+    if (tfm->type == METRIC_TYPE_OFM)
+    {
+      for (i = 0; i < nc; i++)
+      {
+        v = ci[2*i];
+        tfm->depth[i]  = d[v & 0xff]; v >>= 8;
+        tfm->height[i] = h[v & 0xff]; v >>= 8;
+        tfm->width[i]  = w[v & 0xffff];
+        if (bbxw < tfm->width[i])
+               bbxw = tfm->width[i];
+        if (bbxh < (tfm->height[i] + tfm->depth[i]))
+               bbxh = tfm->height[i] + tfm->depth[i];
+        if (yoff > -tfm->depth[i])
+               yoff = -tfm->depth[i];
+        #if 0
+         printf("** %.3f %.3f %.3f\n",
+              (double)tfm->width[i]/(double)(1<<20),
+              (double)tfm->height[i]/(double)(1<<20),
+              (double)tfm->depth[i]/(double)(1<<20));
+        #endif
+      }
     }
-  } else {
-    for (i = 0; i < nc; i++){
+    else
+    { }
+    #endif
+    for (i = 0; i < nc; i++)
+    {
       v = ci[i] / 0x10000L;
       tfm->depth[i]  = d[v & 0xf];  v >>= 4;
       tfm->height[i] = h[v & 0xf];  v >>= 4;
       tfm->width[i]  = w[v & 0xff];
       if (bbxw < tfm->width[i])
-       bbxw = tfm->width[i];
+             bbxw = tfm->width[i];
       if (bbxh < (tfm->height[i] + tfm->depth[i]))
-       bbxh = tfm->height[i] + tfm->depth[i];
+             bbxh = tfm->height[i] + tfm->depth[i];
       if (yoff > -tfm->depth[i])
-       yoff = -tfm->depth[i];
-#if 0
-      printf("** %.3f %.3f\n",
-            (double)tfm->height[i]/(double)(1<<20),
-            (double)tfm->depth[i]/(double)(1<<20));
-#endif
+             yoff = -tfm->depth[i];
+      #if 0
+        printf("** %.3f %.3f\n",
+             (double)tfm->height[i]/(double)(1<<20),
+             (double)tfm->depth[i]/(double)(1<<20));
+      #endif
     }
-  }
-  tfm->font_bbx_w = tfm->design_size * ((double)bbxw / (double)(1<<20));
-  tfm->font_bbx_h = tfm->design_size * ((double)bbxh / (double)(1<<20));
-  tfm->font_bbx_xoff = tfm->design_size * ((double)xoff / (double)(1<<20));
-  tfm->font_bbx_yoff = tfm->design_size * ((double)yoff / (double)(1<<20));
-
-  if (tfm->type == METRIC_TYPE_JFM){
-    fseek(fp, 4*(7+lh), SEEK_SET);
-    tfm->ct_kcode = (unsigned int*)calloc(tfm->nt+1, sizeof(unsigned int));
-    tfm->ct_ctype = (unsigned int*)calloc(tfm->nt+1, sizeof(unsigned int));
-    if ((tfm->ct_kcode == NULL) || (tfm->ct_ctype == NULL)){
-      err = VF_ERR_NO_MEMORY;
-      goto Exit;
-    }
-    for (i = 0; i < tfm->nt; i++){
-      v = READ_UINT4(fp);
-      tfm->ct_kcode[i] = v/0x10000L;
-      tfm->ct_ctype[i] = v%0x10000L;
+    tfm->font_bbx_w = tfm->design_size * ((double)bbxw / (double)(1<<20));
+    tfm->font_bbx_h = tfm->design_size * ((double)bbxh / (double)(1<<20));
+    tfm->font_bbx_xoff = tfm->design_size * ((double)xoff / (double)(1<<20));
+    tfm->font_bbx_yoff = tfm->design_size * ((double)yoff / (double)(1<<20));
+
+    #if 0
+    if (tfm->type == METRIC_TYPE_JFM)
+    {
+      fseek(fp, 4*(7+lh), SEEK_SET);
+      tfm->ct_kcode = (unsigned int*)calloc(tfm->nt+1, sizeof(unsigned int));
+      tfm->ct_ctype = (unsigned int*)calloc(tfm->nt+1, sizeof(unsigned int));
+      if ((tfm->ct_kcode == NULL) || (tfm->ct_ctype == NULL))
+      {
+        err = VF_ERR_NO_MEMORY;
+        goto Exit;
+      }
+      for (i = 0; i < tfm->nt; i++)
+      {
+        v = READ_UINT4(fp);
+        tfm->ct_kcode[i] = v/0x10000L;
+        tfm->ct_ctype[i] = v%0x10000L;
+      }
+      tfm->ct_kcode[tfm->nt] = 0; /* sentinel */
+      tfm->ct_ctype[tfm->nt] = 0;
     }
-    tfm->ct_kcode[tfm->nt] = 0; /* sentinel */
-    tfm->ct_ctype[tfm->nt] = 0;
-  }
+    #endif
 
-  fseek(fp, offset_param, SEEK_SET);
-  tfm->slant = (double)READ_INT4(fp)/(double)(1<<20);
+    fseek(fp, offset_param, SEEK_SET);
+    tfm->slant = (double)READ_INT4(fp)/(double)(1<<20);
 
-Exit:
-  vf_free(ci);
-  vf_free(w);
-  vf_free(h);
-  vf_free(d);
+  Exit:
+    vf_free(ci);
+    vf_free(w);
+    vf_free(h);
+    vf_free(d);
 
-  if (err != 0){
-    vf_tfm_free(tfm);
-    vf_error = err;
-    return NULL;
+    if (err != 0)
+    {
+      vf_tfm_free(tfm);
+      vf_error = err;
+      return NULL;
+    }
+    return tfm;
   }
-  return tfm;
-}
-
-
 
-
-Glocal void
-vf_tfm_free(TFM tfm)
-{
-  int  tfm_id;
-
-  if (tfm == NULL)
-    return;
-
-  tfm_id = (tfm_table->get_id_by_obj)(tfm_table, tfm);
-  if (tfm_id < 0)
-    return;
-
-  if ((tfm_table->unlink_by_id)(tfm_table, tfm_id) <= 0){
-    vf_free(tfm->width);
-    vf_free(tfm->height);
-    vf_free(tfm->depth);
-    vf_free(tfm->ct_kcode);
-    vf_free(tfm->ct_ctype);
-    vf_free(tfm);
+  FT_LOCAL_DEF( void )
+  tfm_free_font( TFM_Glyph tfm, FT_Memory memory )
+  {
+    if (tfm == NULL)
+      return;
+
+    if ((tfm_table->unlink_by_id)(tfm_table, tfm_id) <= 0)
+    {
+      vf_free(tfm->width);
+      vf_free(tfm->height);
+      vf_free(tfm->depth);
+      vf_free(tfm->ct_kcode);
+      vf_free(tfm->ct_ctype);
+      vf_free(tfm);
+    }
   }
-}
-
-
-
-
-/* TO-DO */
 
 /* END */



reply via email to

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