libexplain  1.4.D001
libexplain/getaddrinfo_on_error.c
Go to the documentation of this file.
00001 /*
00002  * libexplain - Explain errno values returned by libc functions
00003  * Copyright (C) 2008-2010, 2012, 2013 Peter Miller
00004  *
00005  * This program is free software; you can redistribute it and/or modify it
00006  * under the terms of the GNU Lesser General Public License as published by
00007  * the Free Software Foundation; either version 3 of the License, or (at
00008  * your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Lesser General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Lesser General Public License
00016  * along with this program. If not, see <http://www.gnu.org/licenses/>.
00017  */
00018 
00019 #include <libexplain/ac/assert.h>
00020 #include <libexplain/ac/errno.h>
00021 #include <libexplain/ac/netdb.h>
00022 
00023 #include <libexplain/getaddrinfo.h>
00024 #include <libexplain/output.h>
00025 
00026 
00027 int
00028 explain_getaddrinfo_on_error(const char *node, const char *service,
00029     const struct addrinfo *hints, struct addrinfo **res)
00030 {
00031     int             result;
00032 
00033     result = getaddrinfo(node, service, hints, res);
00034     assert(EAI_SYSTEM < 0);
00035     if (result == EAI_SYSTEM)
00036         result = errno;
00037     if (result)
00038     {
00039         /* don't need hold_errno */
00040         explain_output_message
00041         (
00042             explain_errcode_getaddrinfo(result, node, service, hints, res)
00043         );
00044     }
00045     return result;
00046 }
00047 
00048 
00049 /* vim: set ts=8 sw=4 et : */