HvpIsFreeNeighbor

CHAR __fastcall HvpIsFreeNeighbor(UINT64 P2, _DWORD *a2, INT64 *a3, INT64 **a4, INT64 a5){
  INT64 *v6; 
  __int64 v8; 
  INT64 *v10; 
  HSTORAGE_TYPE v11; 
  v6 = (INT64 *)((char *)a3 + *(int *)a3);
  *a4 = 0i64;
  if( (unsigned int)((_DWORD)v6 - (_DWORD)a2) < a2[2] && *(int *)v6 > 0 )
  {
    v11 = (int)a5;
    *a4 = v6;
    goto LABEL_11;
  }
  v6 = (INT64 *)(a2 + 8);
  if( a2 + 8 >= (_DWORD *)a3 )
    return 0;
  while( 1 )
  {
    v8 = *(int *)v6;
    if( (int)v8 > 0 )
      break;
    v6 = (INT64 *)((char *)v6 - v8);
LABEL_6:
    if( v6 >= a3 )
      return 0;
  }
  v10 = (INT64 *)((char *)v6 + v8);
  if( v10 != a3 )
  {
    v6 = v10;
    goto LABEL_6;
  }
  v11 = (int)a5;
  *a4 = v6;
  if( (_DWORD)a5 != 1 && !HvpMarkCellDirty(P2, (unsigned int)((_DWORD)v6 + a2[1] - (_DWORD)a2), 1) )
    return 0;
LABEL_11:
  HvpDelistFreeCell((_HHIVE *)P2, (unsigned int)((_DWORD)v6 + (v11 << 31) + a2[1] - (_DWORD)a2), v11);
  return 1;
}

Referenced by:

HvFreeCell