int i2d_X509_AUX(X509 *a, unsigned char **pp) { int length; length = i2d_X509(a, pp); if(a) length += i2d_X509_CERT_AUX(a->aux, pp); return length; }
/* * Serialize trusted certificate to *pp or just return the required buffer * length if pp == NULL. We ultimately want to avoid modifying *pp in the * error path, but that depends on similar hygiene in lower-level functions. * Here we avoid compounding the problem. */ static int i2d_x509_aux_internal(X509 *a, unsigned char **pp) { int length, tmplen; unsigned char *start = pp != NULL ? *pp : NULL; assert(pp == NULL || *pp != NULL); /* * This might perturb *pp on error, but fixing that belongs in i2d_X509() * not here. It should be that if a == NULL length is zero, but we check * both just in case. */ length = i2d_X509(a, pp); if (length <= 0 || a == NULL) { return length; } tmplen = i2d_X509_CERT_AUX(a->aux, pp); if (tmplen < 0) { if (start != NULL) *pp = start; return tmplen; } length += tmplen; return length; }