return p;
}
+
+#ifndef OPENSSL_NO_TRACE
typedef struct tracedata_st {
BIO *bio;
unsigned int ingroup:1;
sk_tracedata_pop_free(trace_data_stack, tracedata_free);
}
+static void setup_trace_category(int category)
+{
+ BIO *channel;
+ tracedata *trace_data;
+
+ if (OSSL_trace_enabled(category))
+ return;
+
+ channel = BIO_push(BIO_new(apps_bf_prefix()),
+ dup_bio_err(FORMAT_TEXT));
+ trace_data = OPENSSL_zalloc(sizeof(*trace_data));
+
+ if (trace_data == NULL
+ || (trace_data->bio = channel) == NULL
+ || OSSL_trace_set_callback(category, internal_trace_cb,
+ trace_data) == 0
+ || sk_tracedata_push(trace_data_stack, trace_data) == 0) {
+
+ fprintf(stderr,
+ "warning: unable to setup trace callback for category '%s'.\n",
+ OSSL_trace_get_category_name(category));
+
+ OSSL_trace_set_callback(category, NULL, NULL);
+ BIO_free_all(channel);
+ }
+}
+
static void setup_trace(const char *str)
{
char *val;
for (valp = val; (item = strtok(valp, ",")) != NULL; valp = NULL) {
int category = OSSL_trace_get_category_num(item);
- if (category >= 0) {
- BIO *channel = BIO_push(BIO_new(apps_bf_prefix()),
- dup_bio_err(FORMAT_TEXT));
- tracedata *trace_data = OPENSSL_zalloc(sizeof(*trace_data));
-
- if (trace_data == NULL
- || (trace_data->bio = channel) == NULL
- || OSSL_trace_set_callback(category, internal_trace_cb,
- trace_data) == 0
- || sk_tracedata_push(trace_data_stack, trace_data) == 0) {
- OSSL_trace_set_callback(category, NULL, NULL);
- BIO_free_all(channel);
- fprintf(stderr,
- "warning: unable to setup trace callback for category '%s'.\n",
- item);
- }
+ if (category == OSSL_TRACE_CATEGORY_ALL) {
+ while (++category < OSSL_TRACE_CATEGORY_NUM)
+ setup_trace_category(category);
+ break;
+ } else if (category > 0) {
+ setup_trace_category(category);
} else {
fprintf(stderr,
- "warning: unknown trace category: '%s'.\n",
- item);
+ "warning: unknown trace category: '%s'.\n", item);
}
}
}
OPENSSL_free(val);
atexit(cleanup_trace);
}
+#endif /* OPENSSL_NO_TRACE */
int main(int argc, char *argv[])
{
*/
atexit(destroy_prefix_method);
+#ifndef OPENSSL_NO_TRACE
setup_trace(getenv("OPENSSL_TRACE"));
+#endif
p = getenv("OPENSSL_DEBUG_MEMORY");
if (p != NULL && strcmp(p, "on") == 0)