allowed = !ss->enableSSL2 ? 0 :
allowed = !ss->opt.enableSSL2 ? 0 :
ssl2_ConstructCipherSpecs(sslSocket *ss) {    PRUint8 *	        cs		= NULL;    unsigned int	allowed;    unsigned int	count;    int 		ssl3_count	= 0;    int 		final_count;    int 		i;    SECStatus 		rv;    PORT_Assert( ssl_Have1stHandshakeLock(ss) );    count = 0;    PORT_Assert(ss != 0);    allowed = !ss->enableSSL2 ? 0 :    	(ss->allowedByPolicy & ss->chosenPreference & SSL_CB_IMPLEMENTED);    while (allowed) {    	if (allowed & 1) 	    ++count;	allowed >>= 1;    }    /* Call ssl3_config_match_init() once here,      * instead of inside ssl3_ConstructV2CipherSpecsHack(),     * because the latter gets called twice below,      * and then again in ssl2_BeginClientHandshake().     */    ssl3_config_match_init(ss);    /* ask SSL3 how many cipher suites it has. */    rv = ssl3_ConstructV2CipherSpecsHack(ss, NULL, &ssl3_count);    if (rv < 0) 	return rv;    count += ssl3_count;    /* Allocate memory to hold cipher specs */    if (count > 0)	cs = (PRUint8*) PORT_Alloc(count * 3);    else	PORT_SetError(SSL_ERROR_SSL_DISABLED);    if (cs == NULL)    	return SECFailure;    if (ss->cipherSpecs != NULL) {	PORT_Free(ss->cipherSpecs);    }    ss->cipherSpecs     = cs;    ss->sizeCipherSpecs = count * 3;    /* fill in cipher specs for SSL2 cipher suites */    allowed = !ss->enableSSL2 ? 0 :    	(ss->allowedByPolicy & ss->chosenPreference & SSL_CB_IMPLEMENTED);    for (i = 0; i < ssl2_NUM_SUITES_IMPLEMENTED * 3; i += 3) {	const PRUint8 * hs = implementedCipherSuites + i;	int             ok = allowed & (1U << hs[0]);	if (ok) {	    cs[0] = hs[0];	    cs[1] = hs[1];	    cs[2] = hs[2];	    cs += 3;	}    }    /* now have SSL3 add its suites onto the end */    rv = ssl3_ConstructV2CipherSpecsHack(ss, cs, &final_count);        /* adjust for any difference between first pass and second pass */    ss->sizeCipherSpecs -= (ssl3_count - final_count) * 3;    return rv;}