RaspLoadCompositeGlyphData

__int64 __fastcall RaspLoadCompositeGlyphData(
        __int64 a1,
        int a2,
        __int64 a3,
        _QWORD *a4,
        _BG_RASTERIZER_WORKSPACE *Workspace){
  int v9; 
  unsigned int v10; 
  _FILE_IMAGE *v11; 
  unsigned int v12; 
  __int64 result; 
  _BG_RASTERIZER_WORKSPACE *v14; 
  int v15; 
  VOID **v16; 
  __int64 v17; 
  VOID *v18; 
  UINT64 Offset; 
  int v20; 
  int v21; 
  __int64 v22; 
  VOID *v23; 
  UINT16 Buffer[4]; 
  UINT16 v25; 
  VOID *v26[2]; 
  UINT16 v27; 

  *(_QWORD *)Buffer = 0i64;
  v25 = 0;
  LODWORD(v22) = 0;
  v27 = 0;
  LOWORD(v20) = 0;
  LOWORD(v21) = 0;
  v23 = 0i64;
  *(_OWORD *)v26 = 0i64;
  if( !a1 )
    return 3221225473i64;
  v9 = *(_DWORD *)(a1 + 60);
  if( !v9 )
    return 3221225473i64;
  v10 = v9 + a2;
  v11 = *(_FILE_IMAGE **)(*(_QWORD *)(a1 + 16) + 16i64);
  FioFwReadUshortAtOffset(v11, (unsigned int)(v9 + a2), Buffer);
  FioFwReadUshortAtOffset(v11, v10 + 2, &Buffer[1]);
  v10 += 4;
  FioFwReadUshortAtOffset(v11, v10, &Buffer[2]);
  FioFwReadUshortAtOffset(v11, v10 + 2, &Buffer[3]);
  v12 = v10 + 4;
  FioFwReadUshortAtOffset(v11, v12, &v25);
  if( (Buffer[0] & 0x8000u) == 0 )
    return 3221225485i64;
  v14 = Workspace;
  result = RaspGetCompositeGlyphList(a1, a2, &v21, &v20, &v27, (__int64)&v22, (__int64)v26, Workspace);
  if( (int)result >= 0 )
  {
    LODWORD(Offset) = v12 + v22 + 2;
    v15 = RaspInitializeCompositeGlyphData(v11, v26, (__int64)Buffer, v21, v20, v27, Offset, a3, (__int64)&v23, v14);
    if( v15 >= 0 )
    {
      v18 = v23;
    }
    else
    {
      while( 1 )
      {
        v16 = (VOID **)v26[0];
        if( v26[0] == v26 )
          break;
        if( *((VOID ***)v26[0] + 1) != v26 || (v17 = *(_QWORD *)v26[0], *(VOID **)(*(_QWORD *)v26[0] + 8i64) != v26[0]) )
          __fastfail(3u);
        v26[0] = *(VOID **)v26[0];
        *(_QWORD *)(v17 + 8) = v26;
        RaspFreeMemory(v16[2], v14);
        RaspFreeMemory(v16, v14);
      }
      v18 = v23;
      if( v23 )
      {
        RaspFreeMemory(v23, v14);
        v18 = 0i64;
      }
    }
    *a4 = v18;
    return(unsigned int)v15;
  }
  return result;
}

Referenced by:

RaspLoadGlyphData