char *reason = NULL, *other = NULL, *str;
char *other = NULL, *str; const char *reason = NULL;
char *make_revocation_str(int rev_type, char *rev_arg)	{	char *reason = NULL, *other = NULL, *str;	ASN1_OBJECT *otmp;	ASN1_UTCTIME *revtm = NULL;	int i;	switch (rev_type)		{	case REV_NONE:		break;	case REV_CRL_REASON:		for (i = 0; i < 8; i++)			{			if (!strcasecmp(rev_arg, crl_reasons[i]))				{				reason = crl_reasons[i];				break;				}			}		if (reason == NULL)			{			BIO_printf(bio_err, "Unknown CRL reason %s\n", rev_arg);			return NULL;			}		break;	case REV_HOLD:		/* Argument is an OID */		otmp = OBJ_txt2obj(rev_arg, 0);		ASN1_OBJECT_free(otmp);		if (otmp == NULL)			{			BIO_printf(bio_err, "Invalid object identifier %s\n", rev_arg);			return NULL;			}		reason = "holdInstruction";		other = rev_arg;		break;			case REV_KEY_COMPROMISE:	case REV_CA_COMPROMISE:		/* Argument is the key compromise time  */		if (!ASN1_GENERALIZEDTIME_set_string(NULL, rev_arg))			{				BIO_printf(bio_err, "Invalid time format %s. Need YYYYMMDDHHMMSSZ\n", rev_arg);			return NULL;			}		other = rev_arg;		if (rev_type == REV_KEY_COMPROMISE)			reason = "keyTime";		else 			reason = "CAkeyTime";		break;		}	revtm = X509_gmtime_adj(NULL, 0);	i = revtm->length + 1;	if (reason) i += strlen(reason) + 1;	if (other) i += strlen(other) + 1;	str = OPENSSL_malloc(i);	if (!str) return NULL;	BUF_strlcpy(str, (char *)revtm->data, i);	if (reason)		{		BUF_strlcat(str, ",", i);		BUF_strlcat(str, reason, i);		}	if (other)		{		BUF_strlcat(str, ",", i);		BUF_strlcat(str, other, i);		}	ASN1_UTCTIME_free(revtm);	return str;	}