#include #include #include #ifdef DYNAMIC_DEBUG static LIST_HEAD(debug_funcs); struct debug_func_entry { const char *name; struct list_head list; }; static struct debug_func_entry *lookup_entry(const char *func) { struct debug_func_entry *e, *entry = NULL; list_for_each_entry(e, &debug_funcs, list) { if (!strcmp(e->name, func)) { entry = e; break; } } return entry; } bool __syslinux_debug_enabled(const char *func) { struct debug_func_entry *entry; entry = lookup_entry(func); if (entry) return true; return false; } static int __enable(const char *func) { struct debug_func_entry *entry; entry = lookup_entry(func); if (entry) return 0; /* already enabled */ entry = malloc(sizeof(*entry)); if (!entry) return -1; entry->name = func; list_add(&entry->list, &debug_funcs); return 0; } static int __disable(const char *func) { struct debug_func_entry *entry; entry = lookup_entry(func); if (!entry) return 0; /* already disabled */ list_del(&entry->list); free(entry); return 0; } /* * Enable or disable debug code for function 'func'. */ int syslinux_debug(const char *func, bool enable) { int rv; if (enable) rv = __enable(func); else rv = __disable(func); return rv; } #else int syslinux_debug(const char *func, bool enable) { (void)func; (void)enable; printf("Dynamic debug unavailable\n"); return -1; } #endif /* DYNAMIC_DEBUG */