a = PR_smprintf("%lu.%lu", one, two);
a = PR_smprintf("OID.%lu.%lu", one, two);
get_oid_string(SECItem *oid){    PRUint8 *end;    PRUint8 *d;    PRUint8 *e;    char *a;    char *b;    a = (char *)NULL;    /* d will point to the next sequence of bytes to decode */    d = (PRUint8 *)oid->data;    /* end points to one past the legitimate data */    end = &d[ oid->len ];    /*     * Check for our pseudo-encoded single-digit OIDs     */    if( (*d == 0x80) && (2 == oid->len) ) {	/* Funky encoding.  The second byte is the number */	a = PR_smprintf("%lu", (PRUint32)d[1]);	if( (char *)NULL == a ) {	    PORT_SetError(SEC_ERROR_NO_MEMORY);	    return (char *)NULL;	}	return a;    }    for( ; d < end; d = &e[1] ) {    	for( e = d; e < end; e++ ) {	    if( 0 == (*e & 0x80) ) {		break;	    }	}    	if( ((e-d) > 4) || (((e-d) == 4) && (*d & 0x70)) ) {	    /* More than a 32-bit number */	} else {	    PRUint32 n = 0;      	    switch( e-d ) {	    case 4:		n |= ((PRUint32)(e[-4] & 0x0f)) << 28;	    case 3:		n |= ((PRUint32)(e[-3] & 0x7f)) << 21;	    case 2:		n |= ((PRUint32)(e[-2] & 0x7f)) << 14;	    case 1:		n |= ((PRUint32)(e[-1] & 0x7f)) <<  7;	    case 0:		n |= ((PRUint32)(e[-0] & 0x7f))      ;	    }      	    if( (char *)NULL == a ) {		/* This is the first number.. decompose it */		PRUint32 one = PR_MIN(n/40, 2); /* never > 2 */		PRUint32 two = n - one * 40;        		a = PR_smprintf("%lu.%lu", one, two);		if( (char *)NULL == a ) {		    PORT_SetError(SEC_ERROR_NO_MEMORY);		    return (char *)NULL;		}	    } else {		b = PR_smprintf("%s.%lu", a, n);		if( (char *)NULL == b ) {		    PR_smprintf_free(a);		    PORT_SetError(SEC_ERROR_NO_MEMORY);		    return (char *)NULL;		}        		PR_smprintf_free(a);		a = b;	    }	}    }    return a;}