diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | libgcompat/resolv.c | 32 |
2 files changed, 33 insertions, 0 deletions
@@ -7,6 +7,7 @@ LIBGCOMPAT_SRC = \ libgcompat/math.c \ libgcompat/pthread.c \ libgcompat/pwd.c \ + libgcompat/resolv.c \ libgcompat/resource.c \ libgcompat/setjmp.c \ libgcompat/stdio.c \ diff --git a/libgcompat/resolv.c b/libgcompat/resolv.c new file mode 100644 index 0000000..9ded8c9 --- /dev/null +++ b/libgcompat/resolv.c @@ -0,0 +1,32 @@ +/* Original author: Khem Raj <raj.khem@gmail.com> */ +/*************************************************************************** + * resolv_compat.h + * + * Mimick GLIBC's res_ninit() and res_nclose() for musl libc + * Note: res_init() is actually deprecated according to + * http://docs.oracle.com/cd/E36784_01/html/E36875/res-nclose-3resolv.html + **************************************************************************/ +#include <string.h> /* memcpy, memset */ +#include <resolv.h> /* res_state */ + +static inline int res_ninit(res_state statp) +{ + int rc = res_init(); + if (statp != &_res) { + memcpy(statp, &_res, sizeof(*statp)); + } + return rc; +} + +static inline int res_nclose(res_state statp) +{ + if (!statp) + return -1; + if (statp != &_res) { + memset(statp, 0, sizeof(*statp)); + } + return 0; +} + +extern __typeof(res_ninit) __res_ninit __attribute__((weak, alias("res_ninit"))); +extern __typeof(res_nclose) __res_nclose __attribute__((weak, alias("res_nclose"))); |