char *string;
const char *string;
DER_GeneralizedTimeToTime(int64 *dst, SECItem *time){    PRExplodedTime genTime;    char *string;    long hourOff, minOff;    uint16 century;    char localBuf[100];    /* minimum valid GeneralizeTime is ccyymmddhhmmZ which is 13 bytes. */    if (time && time->len >= 13 && time->len < 80 && time->data) {        memcpy(localBuf, time->data, time->len);	PORT_Memset(localBuf + time->len, 0, (sizeof localBuf) - time->len);    } else         goto loser;    string = localBuf;    PORT_Memset (&genTime, 0, sizeof (genTime));    /* Verify time is formatted properly and capture information */    hourOff = 0;    minOff = 0;    CAPTURE(century, string+0, loser);    century *= 100;    CAPTURE(genTime.tm_year,string+2,loser);    genTime.tm_year += century;    CAPTURE(genTime.tm_month,string+4,loser);    if ((genTime.tm_month == 0) || (genTime.tm_month > 12)) goto loser;    /* NSPR month base is 0 */    --genTime.tm_month;        CAPTURE(genTime.tm_mday,string+6,loser);    if ((genTime.tm_mday == 0) || (genTime.tm_mday > 31)) goto loser;        CAPTURE(genTime.tm_hour,string+8,loser);    if (genTime.tm_hour > 23) goto loser;        CAPTURE(genTime.tm_min,string+10,loser);    if (genTime.tm_min > 59) goto loser;        if (ISDIGIT(string[12])) {	CAPTURE(genTime.tm_sec,string+12,loser);	if (genTime.tm_sec > 59) goto loser;	string += 2;    }    if (string[12] == '+') {	CAPTURE(hourOff,string+13,loser);	if (hourOff > 23) goto loser;	CAPTURE(minOff,string+15,loser);	if (minOff > 59) goto loser;    } else if (string[12] == '-') {	CAPTURE(hourOff,string+13,loser);	if (hourOff > 23) goto loser;	hourOff = -hourOff;	CAPTURE(minOff,string+15,loser);	if (minOff > 59) goto loser;	minOff = -minOff;    } else if (string[12] != 'Z') {	goto loser;    }    /* Since the values of hourOff and minOff are small, there will       be no loss of data by the conversion to int8 */    /* Convert the GMT offset to seconds and save it it genTime       for the implode time process */    genTime.tm_params.tp_gmt_offset = (PRInt32)((hourOff * 60L + minOff) * 60L);    *dst = PR_ImplodeTime (&genTime);    return SECSuccess;  loser:    PORT_SetError(SEC_ERROR_INVALID_TIME);    return SECFailure;	}