HvpIsFreeNeighbor

UINT8 __stdcall HvpIsFreeNeighbor(
        ULONG_PTR Hive,
        _HBIN *Bin,
        _HCELL *FreeCell,
        _HCELL **FreeNeighbor,
        _HSTORAGE_TYPE Type){
  _HCELL *v6; 
  __int64 Size; 
  _HCELL *v10; 
  _HSTORAGE_TYPE v11; 

  v6 = (_HCELL *)((char *)FreeCell + FreeCell->Size);
  *FreeNeighbor = 0i64;
  if( (int)v6 - (int)Bin < Bin->Size && v6->Size > 0 )
  {
    v11 = Type;
    *FreeNeighbor = v6;
    goto LABEL_11;
  }
  v6 = (_HCELL *)&Bin[1];
  if( &Bin[1] >= (_HBIN *)FreeCell )
    return 0;
  while( 1 )
  {
    Size = v6->Size;
    if( (int)Size > 0 )
      break;
    v6 = (_HCELL *)((char *)v6 - Size);
LABEL_6:
    if( v6 >= FreeCell )
      return 0;
  }
  v10 = (_HCELL *)((char *)v6 + Size);
  if( v10 != FreeCell )
  {
    v6 = v10;
    goto LABEL_6;
  }
  v11 = Type;
  *FreeNeighbor = v6;
  if( Type != 1
    && !HvpMarkCellDirty(
          *(PVOID *)&Hive,
          (PVOID)((unsigned int)v6 + Bin->FileOffset - (_DWORD)Bin),
          1u,
          CmHiveDirtyNormal) )
  {
    return 0;
  }
LABEL_11:
  HvpDelistFreeCell(Hive, (_DWORD)v6 + (v11 << 31) + Bin->FileOffset - (_DWORD)Bin, v11, (_HSTORAGE_TYPE)FreeNeighbor);
  return 1;
}

Referenced by:

HvFreeCell