Fix error in original commit

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@18994 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2004-03-31 21:41:28 +00:00
parent 9b1f0706a1
commit 39af4cd1e9
3 changed files with 36 additions and 27 deletions

View file

@ -38,7 +38,6 @@ typedef unsigned short unichar;
#endif
#define NSMaximumStringLength (INT_MAX-1)
#define NSHashStringLength 63
enum
{

View file

@ -3807,19 +3807,16 @@ agree, create a new GSUnicodeInlineString otherwise.
*/
- (unsigned) hash
{
unsigned ret = 0;
unsigned ret = 0;
unsigned len = _self->_count;
int len = _self->_count;
if (len > NSHashStringLength)
len = NSHashStringLength;
if (len)
if (len > 0)
{
const unsigned char *p;
unsigned char_count = 0;
p = _self->_contents.c;
while (*p != 0 && char_count++ < NSHashStringLength)
while (char_count++ < len)
{
unichar c = *p++;
@ -3835,9 +3832,13 @@ agree, create a new GSUnicodeInlineString otherwise.
* an empty cache value, so we MUST NOT return a hash of zero.
*/
if (ret == 0)
ret = 0x0fffffff;
{
ret = 0x0fffffff;
}
else
ret &= 0x0fffffff;
{
ret &= 0x0fffffff;
}
}
else
{

View file

@ -2161,29 +2161,32 @@ handle_printf_atsign (FILE *stream,
*/
- (unsigned int) hash
{
unsigned ret = 0;
unsigned ret = 0;
unsigned len = [self length];
int len = [self length];
if (len > NSHashStringLength)
{
len = NSHashStringLength;
}
if (len > 0)
{
unichar buf[len * MAXDEC + 1];
GSeqStruct s = { buf, len, len * MAXDEC, 0 };
unichar buf[64];
unichar *ptr = (len <= 64) ? buf :
NSZoneMalloc(NSDefaultMallocZone(), len * sizeof(unichar));
unichar *p;
unsigned char_count = 0;
[self getCharacters: buf range: NSMakeRange(0,len)];
GSeq_normalize(&s);
[self getCharacters: ptr range: NSMakeRange(0,len)];
p = buf;
p = ptr;
while (*p && char_count++ < NSHashStringLength)
while (char_count++ < len)
{
ret = (ret << 5) + ret + *p++;
unichar c = *p++;
// FIXME ... should normalize composed character sequences.
ret = (ret << 5) + ret + c;
}
if (ptr != buf)
{
NSZoneFree(NSDefaultMallocZone(), ptr);
}
/*
@ -2191,13 +2194,19 @@ handle_printf_atsign (FILE *stream,
* an empty cache value, so we MUST NOT return a hash of zero.
*/
if (ret == 0)
ret = 0x0fffffff;
{
ret = 0x0fffffff;
}
else
ret &= 0x0fffffff;
{
ret &= 0x0fffffff;
}
return ret;
}
else
return 0x0ffffffe; /* Hash for an empty string. */
{
return 0x0ffffffe; /* Hash for an empty string. */
}
}
// Getting a Shared Prefix