if (t->top == 0)
if (BN_is_zero(t))
char *BN_bn2dec(const BIGNUM *a)	{	int i=0,num;	char *buf=NULL;	char *p;	BIGNUM *t=NULL;	BN_ULONG *bn_data=NULL,*lp;	i=BN_num_bits(a)*3;	num=(i/10+i/1000+3)+1;	bn_data=(BN_ULONG *)OPENSSL_malloc((num/BN_DEC_NUM+1)*sizeof(BN_ULONG));	buf=(char *)OPENSSL_malloc(num+3);	if ((buf == NULL) || (bn_data == NULL))		{		BNerr(BN_F_BN_BN2DEC,ERR_R_MALLOC_FAILURE);		goto err;		}	if ((t=BN_dup(a)) == NULL) goto err;	p=buf;	lp=bn_data;	if (t->neg) *(p++)='-';	if (t->top == 0)		{		*(p++)='0';		*(p++)='\0';		}	else		{		i=0;		while (!BN_is_zero(t))			{			*lp=BN_div_word(t,BN_DEC_CONV);			lp++;			}		lp--;		/* We now have a series of blocks, BN_DEC_NUM chars		 * in length, where the last one needs truncation.		 * The blocks need to be reversed in order. */		sprintf(p,BN_DEC_FMT1,*lp);		while (*p) p++;		while (lp != bn_data)			{			lp--;			sprintf(p,BN_DEC_FMT2,*lp);			while (*p) p++;			}		}err:	if (bn_data != NULL) OPENSSL_free(bn_data);	if (t != NULL) BN_free(t);	return(buf);	}