|
15 | 15 | *
|
16 | 16 | *
|
17 | 17 | * IDENTIFICATION
|
18 |
| - * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.139 2003/05/28 16:03:59 tgl Exp $ |
| 18 | + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.140 2003/07/17 20:52:36 tgl Exp $ |
19 | 19 | *
|
20 | 20 | *-------------------------------------------------------------------------
|
21 | 21 | */
|
@@ -2651,9 +2651,6 @@ static unsigned char *
|
2651 | 2651 | convert_string_datum(Datumvalue,Oidtypid)
|
2652 | 2652 | {
|
2653 | 2653 | char*val;
|
2654 |
| -char*xfrmstr; |
2655 |
| -size_txfrmsize; |
2656 |
| -size_txfrmlen; |
2657 | 2654 |
|
2658 | 2655 | switch (typid)
|
2659 | 2656 | {
|
@@ -2693,17 +2690,21 @@ convert_string_datum(Datum value, Oid typid)
|
2693 | 2690 |
|
2694 | 2691 | if (!lc_collate_is_c())
|
2695 | 2692 | {
|
2696 |
| -/* Guess that transformed string is not much bigger than original */ |
2697 |
| -xfrmsize=strlen(val)+32;/* arbitrary pad value here... */ |
2698 |
| -xfrmstr= (char*)palloc(xfrmsize); |
2699 |
| -xfrmlen=strxfrm(xfrmstr,val,xfrmsize); |
2700 |
| -if (xfrmlen >=xfrmsize) |
2701 |
| -{ |
2702 |
| -/* Oops, didn't make it */ |
2703 |
| -pfree(xfrmstr); |
2704 |
| -xfrmstr= (char*)palloc(xfrmlen+1); |
2705 |
| -xfrmlen=strxfrm(xfrmstr,val,xfrmlen+1); |
2706 |
| -} |
| 2693 | +char*xfrmstr; |
| 2694 | +size_txfrmlen; |
| 2695 | +size_txfrmlen2; |
| 2696 | + |
| 2697 | +/* |
| 2698 | + * Note: originally we guessed at a suitable output buffer size, |
| 2699 | + * and only needed to call strxfrm twice if our guess was too small. |
| 2700 | + * However, it seems that some versions of Solaris have buggy |
| 2701 | + * strxfrm that can write past the specified buffer length in that |
| 2702 | + * scenario. So, do it the dumb way for portability. |
| 2703 | + */ |
| 2704 | +xfrmlen=strxfrm(NULL,val,0); |
| 2705 | +xfrmstr= (char*)palloc(xfrmlen+1); |
| 2706 | +xfrmlen2=strxfrm(xfrmstr,val,xfrmlen+1); |
| 2707 | +Assert(xfrmlen2==xfrmlen); |
2707 | 2708 | pfree(val);
|
2708 | 2709 | val=xfrmstr;
|
2709 | 2710 | }
|
|