mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-21 04:44:40 +02:00
[BUG_FIXED] (Author: visimulator) Fix sorting path in Windows document dialog makes Notepad++ crash.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@1188 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
c297a35f3c
commit
f2c01c2ab9
@ -85,30 +85,39 @@ struct NumericStringEquivalence
|
|||||||
static int numstrcmp(const TCHAR *str1, const TCHAR *str2)
|
static int numstrcmp(const TCHAR *str1, const TCHAR *str2)
|
||||||
{
|
{
|
||||||
TCHAR *p1, *p2;
|
TCHAR *p1, *p2;
|
||||||
int c1, c2, lcmp;
|
int c1, c2, lcmp = 0;
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
c1 = tolower(*str1), c2 = tolower(*str2);
|
if (*str1 == 0 || *str2 == 0) {
|
||||||
if ( c1 == 0 || c2 == 0 )
|
if (*str1 != *str2)
|
||||||
|
lcmp = *str1 - *str2;
|
||||||
break;
|
break;
|
||||||
else if (isdigit(c1) && isdigit(c2))
|
}
|
||||||
|
if (_istdigit(*str1) && _istdigit(*str2))
|
||||||
{
|
{
|
||||||
lcmp = generic_strtol(str1, &p1, 10) - generic_strtol(str2, &p2, 10);
|
lcmp = generic_strtol(str1, &p1, 10) - generic_strtol(str2, &p2, 10);
|
||||||
if ( lcmp == 0 )
|
if ( lcmp == 0 )
|
||||||
lcmp = (p2 - str2) - (p1 - str1);
|
lcmp = (p2 - str2) - (p1 - str1);
|
||||||
if ( lcmp != 0 )
|
if ( lcmp != 0 )
|
||||||
return (lcmp > 0 ? 1 : -1);
|
break;
|
||||||
str1 = p1, str2 = p2;
|
str1 = p1, str2 = p2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (_istascii(*str1) && _istupper(*str1))
|
||||||
|
c1 = _totlower(*str1);
|
||||||
|
else
|
||||||
|
c1 = *str1;
|
||||||
|
if (_istascii(*str2) && _istupper(*str2))
|
||||||
|
c2 = _totlower(*str2);
|
||||||
|
else
|
||||||
|
c2 = *str2;
|
||||||
lcmp = (c1 - c2);
|
lcmp = (c1 - c2);
|
||||||
if (lcmp != 0)
|
if (lcmp != 0)
|
||||||
return (lcmp > 0 ? 1 : -1);
|
break;
|
||||||
++str1, ++str2;
|
++str1, ++str2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lcmp = (c1 - c2);
|
|
||||||
return ( lcmp < 0 ) ? -1 : (lcmp > 0 ? 1 : 0);
|
return ( lcmp < 0 ) ? -1 : (lcmp > 0 ? 1 : 0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user