More compact code using macros
diff --git a/library/x509_crt.c b/library/x509_crt.c
index c6fbf6b..7f5a015 100644
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -1138,6 +1138,17 @@
return( 0 );
}
+#define PRINT_ITEM(i) \
+ { \
+ ret = snprintf( p, n, "%s" i, sep ); \
+ SAFE_SNPRINTF(); \
+ sep = ", "; \
+ }
+
+#define CERT_TYPE(type,name) \
+ if( ns_cert_type & type ) \
+ PRINT_ITEM( name );
+
static int x509_info_cert_type( char **buf, size_t *size,
unsigned char ns_cert_type )
{
@@ -1146,54 +1157,14 @@
char *p = *buf;
const char *sep = "";
- if( ns_cert_type & NS_CERT_TYPE_SSL_CLIENT )
- {
- ret = snprintf( p, n, "%sSSL Client", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_SSL_SERVER )
- {
- ret = snprintf( p, n, "%sSSL Server", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_EMAIL )
- {
- ret = snprintf( p, n, "%sEmail", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_OBJECT_SIGNING )
- {
- ret = snprintf( p, n, "%sObject Signing", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_RESERVED )
- {
- ret = snprintf( p, n, "%sReserved", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_SSL_CA )
- {
- ret = snprintf( p, n, "%sSSL CA", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_EMAIL_CA )
- {
- ret = snprintf( p, n, "%sEmail CA", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( ns_cert_type & NS_CERT_TYPE_OBJECT_SIGNING_CA )
- {
- ret = snprintf( p, n, "%sObject Signing CA", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
+ CERT_TYPE( NS_CERT_TYPE_SSL_CLIENT, "SSL Client" );
+ CERT_TYPE( NS_CERT_TYPE_SSL_SERVER, "SSL Server" );
+ CERT_TYPE( NS_CERT_TYPE_EMAIL, "Email" );
+ CERT_TYPE( NS_CERT_TYPE_OBJECT_SIGNING, "Object Signing" );
+ CERT_TYPE( NS_CERT_TYPE_RESERVED, "Reserved" );
+ CERT_TYPE( NS_CERT_TYPE_SSL_CA, "SSL CA" );
+ CERT_TYPE( NS_CERT_TYPE_EMAIL_CA, "Email CA" );
+ CERT_TYPE( NS_CERT_TYPE_OBJECT_SIGNING_CA, "Object Signing CA" );
*size = n;
*buf = p;
@@ -1201,6 +1172,10 @@
return( 0 );
}
+#define KEY_USAGE(code,name) \
+ if( key_usage & code ) \
+ PRINT_ITEM( name );
+
static int x509_info_key_usage( char **buf, size_t *size,
unsigned char key_usage )
{
@@ -1209,48 +1184,13 @@
char *p = *buf;
const char *sep = "";
- if( key_usage & KU_DIGITAL_SIGNATURE )
- {
- ret = snprintf( p, n, "%sDigital Signature", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_NON_REPUDIATION )
- {
- ret = snprintf( p, n, "%sNon Repudiation", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_KEY_ENCIPHERMENT )
- {
- ret = snprintf( p, n, "%sKey Encipherment", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_DATA_ENCIPHERMENT )
- {
- ret = snprintf( p, n, "%sData Encipherment", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_KEY_AGREEMENT )
- {
- ret = snprintf( p, n, "%sKey Agreement", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_KEY_CERT_SIGN )
- {
- ret = snprintf( p, n, "%sKey Cert Sign", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
- if( key_usage & KU_CRL_SIGN )
- {
- ret = snprintf( p, n, "%sCRL Sign", sep );
- SAFE_SNPRINTF();
- sep = ", ";
- }
+ KEY_USAGE( KU_DIGITAL_SIGNATURE, "Digital Signature" );
+ KEY_USAGE( KU_NON_REPUDIATION, "Non Repudiation" );
+ KEY_USAGE( KU_KEY_ENCIPHERMENT, "Key Encipherment" );
+ KEY_USAGE( KU_DATA_ENCIPHERMENT, "Data Encipherment" );
+ KEY_USAGE( KU_KEY_AGREEMENT, "Key Agreement" );
+ KEY_USAGE( KU_KEY_CERT_SIGN, "Key Cert Sign" );
+ KEY_USAGE( KU_CRL_SIGN, "CRL Sign" );
*size = n;
*buf = p;