RaspDestroySegmentList

VOID __stdcall RaspDestroySegmentList(
        _GLYPH_SEGMENT *SegmentList,
        UINT64 SegmentCount,
        _BG_RASTERIZER_WORKSPACE *Workspace){
  int v3; 
  unsigned int v5; 
  _GLYPH_SEGMENT *v7; 
  VOID **v8; 
  char v9; 
  VOID *v10; 
  VOID *v11; 

  v3 = 0;
  v5 = SegmentCount;
  if( (_DWORD)SegmentCount )
  {
    v7 = SegmentList + 6;
    while( 1 )
    {
      v8 = (VOID **)(v7 - 6);
      if( v7 == (_GLYPH_SEGMENT *)24 )
        goto LABEL_8;
      v9 = *(_BYTE *)v7;
      if( *(_BYTE *)v7 == 3 )
      {
        v9 = 3;
        if( *v8 )
        {
          RaspFreeMemory(*v8, Workspace);
          v9 = *(_BYTE *)v7;
        }
      }
      if( v9 != 4 )
        goto LABEL_6;
      v11 = (VOID *)*((_QWORD *)v7 - 1);
      if( v11 )
        break;
LABEL_7:
      v7 = (_GLYPH_SEGMENT *)((char *)v7 + 25);
      if( ++v3 >= v5 )
        goto LABEL_8;
    }
    RaspFreeMemory(v11, Workspace);
    v9 = *(_BYTE *)v7;
LABEL_6:
    if( v9 == 5 )
    {
      if( *v8 )
        RaspFreeMemory(*v8, Workspace);
      v10 = (VOID *)*((_QWORD *)v7 - 1);
      if( v10 )
        RaspFreeMemory(v10, Workspace);
    }
    goto LABEL_7;
  }
LABEL_8:
  RaspFreeMemory(SegmentList, Workspace);
}

Referenced by:

RaspCreateSegmentList
RaspScanConvert