Esempio n. 1
0
File: debug.c Progetto: abbra/sssd
void ldb_debug_messages(void *context, enum ldb_debug_level level,
                        const char *fmt, va_list ap)
{
    int loglevel = SSSDBG_UNRESOLVED;
    int ret;
    char * message = NULL;

    switch(level) {
    case LDB_DEBUG_FATAL:
        loglevel = SSSDBG_FATAL_FAILURE;
        break;
    case LDB_DEBUG_ERROR:
        loglevel = SSSDBG_CRIT_FAILURE;
        break;
    case LDB_DEBUG_WARNING:
        loglevel = SSSDBG_TRACE_FUNC;
        break;
    case LDB_DEBUG_TRACE:
        loglevel = SSSDBG_TRACE_ALL;
        break;
    }

    ret = vasprintf(&message, fmt, ap);
    if (ret < 0) {
        /* ENOMEM */
        return;
    }

    if (DEBUG_IS_SET(loglevel))
        debug_fn(__FILE__, __LINE__, "ldb", loglevel, "%s\n", message);

    free(message);
}
Esempio n. 2
0
/* turn libselinux messages into SSSD DEBUG() calls */
static void sss_semanage_error_callback(void *varg,
                                        semanage_handle_t *handle,
                                        const char *fmt, ...)
{
    int level = SSSDBG_INVALID;
    int ret;
    char * message = NULL;
    va_list ap;

    switch (semanage_msg_get_level(handle)) {
        case SEMANAGE_MSG_ERR:
            level = SSSDBG_CRIT_FAILURE;
            break;
        case SEMANAGE_MSG_WARN:
            level = SSSDBG_MINOR_FAILURE;
            break;
        case SEMANAGE_MSG_INFO:
            level = SSSDBG_TRACE_FUNC;
            break;
    }

    va_start(ap, fmt);
    ret = vasprintf(&message, fmt, ap);
    va_end(ap);
    if (ret < 0) {
        /* ENOMEM */
        return;
    }

    if (DEBUG_IS_SET(level))
        debug_fn(__FILE__, __LINE__, "libsemanage", level, "%s\n", message);
    free(message);
}
Esempio n. 3
0
void
debug_print(Printer& p, Expr* e) {
  if (not e) {
    print(p, "()");
    return;
  }
  
  switch (e->kind) {
  // Names
  case basic_id: return debug_terminal(p, as<Basic_id>(e));
  case operator_id: return debug_operator(p, as<Operator_id>(e));
  case scoped_id: return debug_scoped(p, as<Scoped_id>(e));
  case indexed_id: return debug_indexed(p, as<Indexed_id>(e));
  case decl_id: return debug_id(p, as<Decl_id>(e));
  // Types
  case typename_type: return print(p, "typename");
  case unit_type: return print(p, "unit");
  case bool_type: return print(p, "bool");
  case nat_type: return print(p, "nat");
  case int_type: return print(p, "int");
  case char_type: return print(p, "char");
  case bitfield_type: return debug_ternary(p, as<Bitfield_type>(e));
  case fn_type: return debug_binary(p, as<Fn_type>(e));
  case range_type: return debug_unary(p, as<Range_type>(e));
  case record_type: return debug_nested_unary(p, as<Record_type>(e));
  case variant_type: return debug_nested_unary(p, as<Variant_type>(e));
  case dep_variant_type: return debug_nested_binary(p, as<Dep_variant_type>(e));
  case enum_type: return debug_nested_binary(p, as<Enum_type>(e));
  case array_type: return debug_binary(p, as<Array_type>(e));
  case dep_type: return debug_binary(p, as<Dep_type>(e));
  case module_type: return debug_module(p, as<Module>(e));
  // Networking primitives
  case net_str_type: return debug_unary(p, as<Net_str_type>(e));
  case net_seq_type: return debug_binary(p, as<Net_seq_type>(e));
  // Terms
  case unit_term: return print(p, "<unit>");
  case bool_term: return debug_terminal(p, as<Bool>(e));
  case int_term: return debug_terminal(p, as<Int>(e));
  case default_term: return print(p, "default");
  case fn_term: return debug_fn(p, as<Fn>(e));
  case builtin_term: return print(p, "<builtin>");
  case call_term: return debug_binary(p, as<Call>(e));
  case promo_term: return debug_binary(p, as<Promo>(e));
  case pred_term: return debug_binary(p, as<Pred>(e));
  case range_term: return debug_binary(p, as<Range>(e));
  case variant_term: return debug_binary(p, as<Variant>(e));
  case unary_term: return debug_binary(p, as<Unary>(e));
  case binary_term: return debug_ternary(p, as<Binary>(e));
  case if_term: return debug_ternary(p, as<If>(e));
  // Statements
  case block_stmt: return debug_nested_unary(p, as<Block>(e));
  case return_stmt: return debug_unary(p, as<Return>(e));
  // Declarations
  case top_decl: return debug_nested_unary(p, as<Top>(e));
  case def_decl: return debug_ternary(p, as<Def>(e));
  case parm_decl: return debug_ternary(p, as<Parm>(e));
  case field_decl: return debug_ternary(p, as<Field>(e));
  case alt_decl: return debug_binary(p, as<Alt>(e));
  case enum_decl: return debug_constructor(p, as<Enum>(e));
  case import_decl: return debug_unary(p, as<Import>(e));
  case using_decl: return debug_unary(p, as<Using>(e));
  // Unhandled
  default:
    // FIXME: Make a print formatter that gives complete information
    // about a node, including its class and id.
    steve_unreachable(format("debugging unhandled expression '{}'", node_name(e)));
  }
}
Esempio n. 4
0
static void debug(const char* text)
{
    if (debug_fn)
        debug_fn(text);
}