Skip to content

Commit 86d7802

Browse files
committed
Whack btree_gist code around until it has some small hope of building
on non-gcc compilers.
1 parent bf9d9bd commit 86d7802

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

contrib/btree_gist/btree_text.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,15 @@ static bytea *
6565
gbt_text_xfrm ( bytea * leaf )
6666
{
6767
bytea * out = leaf;
68-
6968
int32 ilen = VARSIZE (leaf) - VARHDRSZ;
7069
int32 olen ;
71-
char sin[ilen+1];
72-
char * sou = NULL;
73-
memcpy ( (void*)&sin[0], (void*) VARDATA(leaf) ,ilen );
70+
char * sin;
71+
char * sou;
72+
73+
sin = palloc(ilen + 1);
74+
memcpy (sin, (void*) VARDATA(leaf) ,ilen );
7475
sin[ilen] = '\0';
76+
7577
olen = strxfrm ( NULL, &sin[0], 0 ) + 1;
7678
sou = palloc ( olen );
7779
olen = strxfrm ( sou , &sin[0] , olen );
@@ -80,7 +82,9 @@ gbt_text_xfrm ( bytea * leaf )
8082
out->vl_len = olen+1;
8183
memcpy( (void*) VARDATA(out), sou, olen-VARHDRSZ );
8284
((char*)out)[olen] = '\0';
85+
8386
pfree(sou);
87+
pfree(sin);
8488

8589
return out;
8690
}

contrib/btree_gist/btree_utils_num.c

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -200,19 +200,16 @@ gbt_num_consistent(
200200
}
201201

202202

203-
204-
205203
GIST_SPLITVEC *
206-
gbt_num_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtree_ninfo * tinfo )
204+
gbt_num_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v,
205+
const gbtree_ninfo * tinfo )
207206
{
207+
OffsetNumber i,
208+
maxoff = entryvec->n - 1;
209+
Nsrt *arr;
210+
int nbytes;
208211

209-
OffsetNumber i ,
210-
211-
maxoff = entryvec->n - 1;
212-
213-
Nsrt arr[maxoff+1] ;
214-
int nbytes ;
215-
212+
arr = (Nsrt *) palloc((maxoff+1) * sizeof(Nsrt));
216213
nbytes = (maxoff + 2) * sizeof(OffsetNumber);
217214
v->spl_left = (OffsetNumber *) palloc(nbytes);
218215
v->spl_right = (OffsetNumber *) palloc(nbytes);
@@ -248,7 +245,7 @@ gbt_num_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtr
248245
}
249246
}
250247

251-
return v;
248+
pfree(arr);
252249

250+
return v;
253251
}
254-

contrib/btree_gist/btree_utils_var.c

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -416,36 +416,35 @@ gbt_var_penalty ( float * res , const GISTENTRY * o , const GISTENTRY * n, const
416416
}
417417

418418

419-
static int32 gbt_vsrt_cmp ( const Vsrt * a , const Vsrt * b , const gbtree_vinfo * tinfo )
420-
{
421-
GBT_VARKEY_R ar = gbt_var_key_readable ( a->t );
422-
GBT_VARKEY_R br = gbt_var_key_readable ( b->t );
423-
return (*tinfo->f_cmp) ( ar.lower, br.lower );
424-
}
419+
/*
420+
* Fortunately, this sort comparsion routine needn't be reentrant...
421+
*/
422+
static const gbtree_vinfo * gbt_vsrt_cmp_tinfo;
425423

424+
static int
425+
gbt_vsrt_cmp(const void *a, const void *b)
426+
{
427+
GBT_VARKEY_R ar = gbt_var_key_readable ( ((const Vsrt *) a)->t );
428+
GBT_VARKEY_R br = gbt_var_key_readable ( ((const Vsrt *) b)->t );
426429

430+
return (*gbt_vsrt_cmp_tinfo->f_cmp) ( ar.lower, br.lower );
431+
}
427432

428433
extern GIST_SPLITVEC *
429434
gbt_var_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtree_vinfo * tinfo )
430435
{
431-
432-
OffsetNumber i ,
433-
maxoff = entryvec->n - 1;
434-
435-
Vsrt arr[maxoff+1] ;
436+
OffsetNumber i,
437+
maxoff = entryvec->n - 1;
438+
Vsrt *arr;
436439
int pfrcntr = 0 ,
437440
svcntr = 0 ,
438441
nbytes ;
439442
char * tst ,
440443
* cur ;
441-
442444
char **pfr = NULL ;
443445
GBT_VARKEY **sv = NULL;
444446

445-
static int cmp (const void *a, const void *b ){
446-
return gbt_vsrt_cmp ((Vsrt *) a , (Vsrt *) b , tinfo );
447-
}
448-
447+
arr = (Vsrt *) palloc((maxoff+1) * sizeof(Vsrt));
449448
nbytes = (maxoff + 2) * sizeof(OffsetNumber);
450449
v->spl_left = (OffsetNumber *) palloc(nbytes);
451450
v->spl_right = (OffsetNumber *) palloc(nbytes);
@@ -482,8 +481,11 @@ gbt_var_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtr
482481
}
483482

484483
/* sort */
485-
qsort ( (void*) &arr[FirstOffsetNumber], maxoff-FirstOffsetNumber+1,sizeof(Vsrt), cmp );
486-
484+
gbt_vsrt_cmp_tinfo = tinfo;
485+
qsort((void*) &arr[FirstOffsetNumber],
486+
maxoff-FirstOffsetNumber+1,
487+
sizeof(Vsrt),
488+
gbt_vsrt_cmp);
487489

488490
/* We do simply create two parts */
489491

@@ -545,18 +547,15 @@ gbt_var_picksplit( const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtr
545547

546548
}
547549

548-
return v;
550+
pfree(arr);
549551

552+
return v;
550553
}
551554

552555

553-
554-
555-
556556
/*
557-
** The GiST consistent method
558-
*/
559-
557+
* The GiST consistent method
558+
*/
560559
extern bool
561560
gbt_var_consistent(
562561
GBT_VARKEY_R * key,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy