@ -9,7 +9,7 @@
* Portions Copyright ( c ) 1994 , Regents of the University of California
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
*
* IDENTIFICATION
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / utils / adt / varbit . c , v 1.47 2005 / 10 / 15 02 : 49 : 30 momjian Exp $
* $ PostgreSQL : pgsql / src / backend / utils / adt / varbit . c , v 1.47 .2 .1 2007 / 08 / 21 02 : 40 : 18 tgl Exp $
*
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
*/
@ -472,8 +472,9 @@ varbit_out(PG_FUNCTION_ARGS)
result = ( char * ) palloc ( len + 1 ) ;
result = ( char * ) palloc ( len + 1 ) ;
sp = VARBITS ( s ) ;
sp = VARBITS ( s ) ;
r = result ;
r = result ;
for ( i = 0 ; i < len - BITS_PER_BYTE ; i + = BITS_PER_BYTE , sp + + )
for ( i = 0 ; i < = len - BITS_PER_BYTE ; i + = BITS_PER_BYTE , sp + + )
{
{
/* print full bytes */
x = * sp ;
x = * sp ;
for ( k = 0 ; k < BITS_PER_BYTE ; k + + )
for ( k = 0 ; k < BITS_PER_BYTE ; k + + )
{
{
@ -481,11 +482,15 @@ varbit_out(PG_FUNCTION_ARGS)
x < < = 1 ;
x < < = 1 ;
}
}
}
}
x = * sp ;
if ( i < len )
for ( k = i ; k < len ; k + + )
{
{
* r + + = ( x & BITHIGH ) ? ' 1 ' : ' 0 ' ;
/* print the last partial byte */
x < < = 1 ;
x = * sp ;
for ( k = i ; k < len ; k + + )
{
* r + + = ( x & BITHIGH ) ? ' 1 ' : ' 0 ' ;
x < < = 1 ;
}
}
}
* r = ' \0 ' ;
* r = ' \0 ' ;