mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-26 11:32:01 -05:00
4224. [func] Added support for "dyndb", a new interface for loading zone data from an external database, developed by Red Hat for the FreeIPA project. DynDB drivers fully implement the BIND database API, and are capable of significantly better performance and functionality than DLZ drivers, while taking advantage of advanced database features not available in BIND such as multi-master replication. Thanks to Adam Tkac and Petr Spacek of Red Hat. [RT #35271]
57 lines
1.3 KiB
C
57 lines
1.3 KiB
C
/*
|
|
* Memory allocation and error handling utilities.
|
|
*
|
|
* Copyright (C) 2009-2015 Red Hat ; see COPYRIGHT for license
|
|
*/
|
|
|
|
#ifndef _LD_UTIL_H_
|
|
#define _LD_UTIL_H_
|
|
|
|
#include <isc/mem.h>
|
|
#include <dns/types.h>
|
|
|
|
#include "log.h"
|
|
|
|
#define CLEANUP_WITH(result_code) \
|
|
do { \
|
|
result = (result_code); \
|
|
goto cleanup; \
|
|
} while(0)
|
|
|
|
#define CHECK(op) \
|
|
do { \
|
|
result = (op); \
|
|
if (result != ISC_R_SUCCESS) \
|
|
goto cleanup; \
|
|
} while (0)
|
|
|
|
#define CHECKED_MEM_GET(m, target_ptr, s) \
|
|
do { \
|
|
(target_ptr) = isc_mem_get((m), (s)); \
|
|
if ((target_ptr) == NULL) { \
|
|
result = ISC_R_NOMEMORY; \
|
|
log_error("Memory allocation failed"); \
|
|
goto cleanup; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define CHECKED_MEM_GET_PTR(m, target_ptr) \
|
|
CHECKED_MEM_GET(m, target_ptr, sizeof(*(target_ptr)))
|
|
|
|
#define CHECKED_MEM_STRDUP(m, source, target) \
|
|
do { \
|
|
(target) = isc_mem_strdup((m), (source)); \
|
|
if ((target) == NULL) { \
|
|
result = ISC_R_NOMEMORY; \
|
|
log_error("Memory allocation failed"); \
|
|
goto cleanup; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define ZERO_PTR(ptr) memset((ptr), 0, sizeof(*(ptr)))
|
|
|
|
#define MEM_PUT_AND_DETACH(target_ptr) \
|
|
isc_mem_putanddetach(&(target_ptr)->mctx, target_ptr, \
|
|
sizeof(*(target_ptr)))
|
|
|
|
#endif /* !_LD_UTIL_H_ */
|