Commit 16f34c55 authored by Howard Chu's avatar Howard Chu
Browse files

Sync with HEAD

parent cf080a5a
......@@ -2119,30 +2119,38 @@ integerVal2Key(
struct berval *tmp
)
{
struct berval iv;
int neg;
if ( lutil_str2bin( val, tmp )) {
iv = *tmp;
if ( lutil_str2bin( val, &iv )) {
return LDAP_INVALID_SYNTAX;
}
neg = tmp->bv_val[0] & 0x80;
neg = iv.bv_val[0] & 0x80;
/* Omit leading 0 pad byte */
if ( !iv.bv_val[0] ) {
iv.bv_val++;
iv.bv_len--;
}
/* If too small, sign-extend */
if ( tmp->bv_len < index_intlen ) {
if ( iv.bv_len < index_intlen ) {
int j, k, pad;
key->bv_val[0] = index_intlen;
k = index_intlen - tmp->bv_len + 1;
k = index_intlen - iv.bv_len + 1;
if ( neg )
pad = 0xff;
else
pad = 0;
for ( j=1; j<k; j++)
key->bv_val[j] = pad;
for ( j = 0; j<tmp->bv_len; j++ )
key->bv_val[j+k] = tmp->bv_val[j];
for ( j = 0; j<iv.bv_len; j++ )
key->bv_val[j+k] = iv.bv_val[j];
} else {
key->bv_val[0] = tmp->bv_len;
memcpy( key->bv_val+1, tmp->bv_val, index_intlen );
key->bv_val[0] = iv.bv_len;
memcpy( key->bv_val+1, iv.bv_val, index_intlen );
}
if ( neg ) {
key->bv_val[0] = -key->bv_val[0];
......@@ -2165,7 +2173,7 @@ integerIndexer(
void *ctx )
{
char ibuf[64];
struct berval iv, itmp;
struct berval itmp;
BerVarray keys;
int i, rc;
......@@ -2196,8 +2204,7 @@ integerIndexer(
itmp.bv_val = slap_sl_realloc( itmp.bv_val, itmp.bv_len, ctx );
}
}
iv = itmp;
rc = integerVal2Key( &values[i], &keys[i], &iv );
rc = integerVal2Key( &values[i], &keys[i], &itmp );
if ( rc )
goto leave;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment