RtlCompareAltitudes
NTSTATUS __stdcall RtlCompareAltitudes(_UNICODE_STRING *Altitude1, _UNICODE_STRING *Altitude2){
unsigned __int16 Length;
unsigned __int16 v3;
wchar_t *Buffer;
unsigned __int16 v5;
wchar_t *v6;
unsigned __int16 v7;
unsigned __int16 v8;
unsigned __int16 v9;
NTSTATUS v10;
unsigned __int16 i;
unsigned __int16 v12;
unsigned __int16 j;
unsigned __int16 v14;
unsigned __int16 k;
bool v16;
unsigned __int16 v18;
wchar_t v19;
wchar_t v20;
__int16 v21;
__int16 v22;
signed __int16 v23;
unsigned __int16 m;
__int16 v25;
unsigned __int16 n;
wchar_t *v27;
wchar_t *v28;
int v29;
wchar_t v30;
wchar_t v31;
Length = Altitude1->Length;
v3 = Altitude2->Length;
Buffer = Altitude1->Buffer;
v5 = 0;
v6 = Altitude2->Buffer;
v7 = 0;
v8 = Length >> 1;
v9 = v3 >> 1;
v10 = 1;
if( v8 )
{
do
{
if( Buffer[v7] == 46 )
break;
++v7;
}
while( v7 < v8 );
}
for( i = 0; i < v9; ++i )
{
if( v6[i] == 46 )
break;
}
v12 = v7;
for( j = 0; j < v12; --v8 )
{
if( *Buffer != 48 )
break;
++j;
++Buffer;
--v7;
}
v14 = i;
for( k = 0; k < v14; --v9 )
{
if( *v6 != 48 )
break;
++k;
++v6;
--i;
}
if( v7 != i )
{
v16 = i < v7;
return v16 ? 1 : -1;
}
v18 = 0;
if( v7 )
{
do
{
v19 = Buffer[v18];
v20 = v6[v18];
v16 = v20 < v19;
if( v20 != v19 )
return v16 ? 1 : -1;
}
while( ++v18 < v7 );
}
v21 = 0;
v22 = 0;
if( (__int16)(v8 - v7 - 1) >= 0 )
v21 = v8 - v7 - 1;
v23 = v21;
if( (__int16)(v9 - i - 1) >= 0 )
v22 = v9 - i - 1;
if( v8 )
{
for( m = v8 - 1; m > v7 && Buffer[m] == 48; --m )
--v23;
}
v25 = v22;
if( v9 )
{
for( n = v9 - 1; n > i && v6[n] == 48; --n )
--v25;
}
v27 = &Buffer[v7];
v28 = &v6[i];
if( v23 > 0 )
{
v29 = 0;
while( v29 < v25 )
{
v30 = v27[v5 + 1];
v31 = v28[v5 + 1];
if( v31 != v30 )
return v31 < v30 ? 1 : -1;
v29 = ++v5;
if( v5 >= v23 )
break;
}
}
if( v23 == v25 )
return 0;
if( v23 <= v25 )
return -1;
return v10;
}Referenced by:
CmpInsertCallbackInListByAltitude
ObpInsertCallbackByAltitude