Commit 91f99691 authored by Daniel Salzman's avatar Daniel Salzman

libknot: split errcode to simple errcode and error functions

parent c8747698
......@@ -361,10 +361,9 @@ src/libknot/dname.c
src/libknot/dname.h
src/libknot/dnssec/rrset-sign.c
src/libknot/dnssec/rrset-sign.h
src/libknot/errcode.c
src/libknot/errcode.h
src/libknot/internal/errcode.c
src/libknot/internal/errcode.h
src/libknot/error.c
src/libknot/error.h
src/libknot/internal/hhash.c
src/libknot/internal/hhash.h
src/libknot/internal/lists.c
......
......@@ -51,6 +51,7 @@ nobase_libknot_la_HEADERS = \
libknot/dname.h \
libknot/dnssec/rrset-sign.h \
libknot/errcode.h \
libknot/error.h \
libknot/libknot.h \
libknot/packet/compr.h \
libknot/packet/pkt.h \
......@@ -80,7 +81,6 @@ nobase_libknot_la_HEADERS = \
libknot_internal_ladir = $(includedir)
nobase_libknot_internal_la_HEADERS = \
libknot/internal/errcode.h \
libknot/internal/hhash.h \
libknot/internal/lists.h \
libknot/internal/macros.h \
......@@ -120,7 +120,7 @@ libknot_la_SOURCES = \
libknot/descriptor.c \
libknot/dname.c \
libknot/dnssec/rrset-sign.c \
libknot/errcode.c \
libknot/error.c \
libknot/packet/compr.c \
libknot/packet/pkt.c \
libknot/packet/rrset-wire.c \
......@@ -149,7 +149,6 @@ libknot_yparser_la_SOURCES = \
$(nobase_libknot_yparser_la_HEADERS)
libknot_internal_la_SOURCES = \
libknot/internal/errcode.c \
libknot/internal/hhash.c \
libknot/internal/lists.c \
libknot/internal/mempattern.c \
......
......@@ -15,7 +15,7 @@
*/
#include "contrib/base32hex.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include <stdlib.h>
#include <stdint.h>
......
......@@ -15,7 +15,7 @@
*/
#include "contrib/base64.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include <stdlib.h>
#include <stdint.h>
......
......@@ -23,7 +23,7 @@
#include <sys/uio.h>
#include <unistd.h>
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include "contrib/net.h"
#include "contrib/sockaddr.h"
......
......@@ -20,7 +20,7 @@
#include <netdb.h>
#include "libknot/consts.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include "contrib/sockaddr.h"
#include "contrib/openbsd/strlcpy.h"
......
......@@ -24,7 +24,7 @@
#include <sys/types.h>
#include "contrib/endian.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
/*!
* \brief Struct to keep the wire context.
......
......@@ -26,6 +26,7 @@
#include "knot/common/log.h"
#include "knot/nameserver/query_module.h"
#include "knot/nameserver/internet.h"
#include "libknot/libknot.h"
#include "libknot/yparser/ypformat.h"
#include "libknot/yparser/yptrafo.h"
#include "contrib/sockaddr.h"
......
/* Copyright (C) 2015 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*!
* \file errcode.h
* \file
*
* \author Lubos Slovak <lubos.slovak@nic.cz>
* \author Marek Vavrusa <marek.vavrusa@nic.cz>
* \brief Knot error codes.
*
* \brief Error codes and function for getting error message.
*
* \addtogroup common_lib
* \addtogroup libknot
* @{
*/
/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
#pragma once
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
#include <errno.h>
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*! \brief Error codes used in the library. */
enum knot_error {
KNOT_EOK = 0,
#pragma once
/* Directly mapped error codes. */
KNOT_ENOMEM = -ENOMEM,
KNOT_EINVAL = -EINVAL,
KNOT_ENOTSUP = -ENOTSUP,
KNOT_EBUSY = -EBUSY,
KNOT_EAGAIN = -EAGAIN,
KNOT_EACCES = -EACCES,
KNOT_ECONNREFUSED = -ECONNREFUSED,
KNOT_EISCONN = -EISCONN,
KNOT_EADDRINUSE = -EADDRINUSE,
KNOT_ENOENT = -ENOENT,
KNOT_EEXIST = -EEXIST,
KNOT_ERANGE = -ERANGE,
KNOT_EADDRNOTAVAIL = -EADDRNOTAVAIL,
KNOT_ERROR_MIN = -1000,
/* General errors. */
KNOT_ERROR = KNOT_ERROR_MIN,
KNOT_ENOTRUNNING,
KNOT_EPARSEFAIL,
KNOT_ESEMCHECK,
KNOT_EEXPIRED,
KNOT_EUPTODATE,
KNOT_EFEWDATA,
KNOT_ESPACE,
KNOT_EMALF,
KNOT_ECRYPTO,
KNOT_ENSEC3PAR,
KNOT_ENSEC3CHAIN,
KNOT_EOUTOFZONE,
KNOT_EHASH,
KNOT_EZONEINVAL,
KNOT_EZONENOENT,
KNOT_ENOZONE,
KNOT_ENONODE,
KNOT_ENOMASTER,
KNOT_EDNAMEPTR,
KNOT_EPAYLOAD,
KNOT_EPREREQ,
KNOT_ETTL,
KNOT_ENOXFR,
KNOT_ENOIXFR,
KNOT_EXFRREFUSED,
KNOT_EDENIED,
KNOT_ECONN,
KNOT_ETIMEOUT,
KNOT_EIXFRSPACE,
KNOT_ECNAME,
KNOT_ENODIFF,
KNOT_EDSDIGESTLEN,
KNOT_ENOTSIG,
KNOT_ELIMIT,
KNOT_EWRITABLE,
KNOT_EOF,
KNOT_ESYSTEM,
KNOT_EFILE,
/* Control states. */
KNOT_CTL_STOP,
KNOT_CTL_ACCEPTED,
KNOT_CTL_ARG_REQ,
/* Network errors. */
KNOT_NET_EADDR,
KNOT_NET_ESOCKET,
KNOT_NET_ECONNECT,
KNOT_NET_ESEND,
KNOT_NET_ERECV,
KNOT_NET_ETIMEOUT,
/* Encoding errors. */
KNOT_BASE64_ESIZE,
KNOT_BASE64_ECHAR,
KNOT_BASE32HEX_ESIZE,
KNOT_BASE32HEX_ECHAR,
/* TSIG errors. */
KNOT_TSIG_EBADSIG,
KNOT_TSIG_EBADKEY,
KNOT_TSIG_EBADTIME,
KNOT_TSIG_EBADTRUNC,
/* Key parsing errors. */
KNOT_KEY_EPUBLIC_KEY_OPEN,
KNOT_KEY_EPRIVATE_KEY_OPEN,
KNOT_KEY_EPUBLIC_KEY_INVALID,
#include "libknot/internal/errcode.h"
/* DNSSEC errors. */
KNOT_DNSSEC_EMISSINGKEYTYPE,
KNOT_DNSSEC_ENOKEY,
/* Yparser errors. */
KNOT_YP_ECHAR_TAB,
KNOT_YP_EINVAL_ITEM,
KNOT_YP_EINVAL_ID,
KNOT_YP_EINVAL_DATA,
KNOT_YP_EINVAL_INDENT,
KNOT_YP_ENOTSUP_DATA,
KNOT_YP_ENOTSUP_ID,
KNOT_YP_ENODATA,
KNOT_YP_ENOID,
/* Configuration errors. */
KNOT_CONF_EMPTY,
KNOT_CONF_EVERSION,
KNOT_CONF_EREDEFINE,
KNOT_CONF_ETXN,
KNOT_CONF_ENOTXN,
KNOT_CONF_EMANYTXN,
/* Processing error. */
KNOT_LAYER_ERROR,
KNOT_ERROR_MAX = -501
};
/*!
* \brief Returns error message for the given error code.
* \brief Map POSIX errno code to Knot error code.
*
* \param code Error code.
* \param code Errno code to transform (set -1 to use the current errno).
*
* \return Mapped errno or KNOT_ERROR if unknown.
*/
inline static int knot_map_errno_code(int code)
{
if (code < 0) {
code = errno;
}
typedef struct {
int errno_code;
int libknot_code;
} err_table_t;
#define ERR_ITEM(name) { name, KNOT_##name }
static const err_table_t errno_to_errcode[] = {
ERR_ITEM(ENOMEM),
ERR_ITEM(EINVAL),
ERR_ITEM(ENOTSUP),
ERR_ITEM(EBUSY),
ERR_ITEM(EAGAIN),
ERR_ITEM(EACCES),
ERR_ITEM(ECONNREFUSED),
ERR_ITEM(EISCONN),
ERR_ITEM(EADDRINUSE),
ERR_ITEM(ENOENT),
ERR_ITEM(EEXIST),
ERR_ITEM(ERANGE),
ERR_ITEM(EADDRNOTAVAIL),
/* Terminator - default value. */
{ 0, KNOT_ERROR }
};
#undef ERR_ITEM
const err_table_t *err = errno_to_errcode;
while (err->errno_code != 0 && err->errno_code != code) {
err++;
}
return err->libknot_code;
}
/*!
* \brief Get a POSIX errno mapped to Knot error code.
*
* \return String containing the error message.
* \return Mapped errno or KNOT_ERROR if unknown.
*/
const char *knot_strerror(int code);
inline static int knot_map_errno(void)
{
return knot_map_errno_code(-1);
}
/*! @} */
......@@ -19,7 +19,7 @@
#include <lmdb.h>
#endif
#include "libknot/errcode.h"
#include "libknot/error.h"
#include "libknot/internal/macros.h"
#include "dnssec/error.h"
......
/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*!
* \file
*
* \brief Error codes and function for getting error message.
*
* \addtogroup libknot
* @{
*/
#pragma once
#include "libknot/errcode.h"
/*!
* \brief Returns error message for the given error code.
*
* \param code Error code.
*
* \return String containing the error message.
*/
const char *knot_strerror(int code);
/*! @} */
/* Copyright (C) 2014 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "libknot/internal/macros.h"
#include "libknot/internal/errcode.h"
#define ERR_ITEM(name) { name, KNOT_##name }
typedef struct {
int errno_code;
int libknot_code;
} err_table_t;
/*!
* \brief Errno to libknot error mapping table.
*/
static const err_table_t errno_to_errcode[] = {
ERR_ITEM(ENOMEM),
ERR_ITEM(EINVAL),
ERR_ITEM(ENOTSUP),
ERR_ITEM(EBUSY),
ERR_ITEM(EAGAIN),
ERR_ITEM(EACCES),
ERR_ITEM(ECONNREFUSED),
ERR_ITEM(EISCONN),
ERR_ITEM(EADDRINUSE),
ERR_ITEM(ENOENT),
ERR_ITEM(EEXIST),
ERR_ITEM(ERANGE),
ERR_ITEM(EADDRNOTAVAIL),
/* Terminator - default value. */
{ 0, KNOT_ERROR }
};
int knot_map_errno_code(int code)
{
if (code < 0) {
code = errno;
}
const err_table_t *err = errno_to_errcode;
while (err->errno_code != 0 && err->errno_code != code) {
err++;
}
return err->libknot_code;
}
int knot_map_errno(void)
{
return knot_map_errno_code(-1);
}
/*!
* \file errcode.h
*
* \author Lubos Slovak <lubos.slovak@nic.cz>
* \author Marek Vavrusa <marek.vavrusa@nic.cz>
*
* \brief Error codes and function for getting error message.
*
* \addtogroup common_lib
* @{
*/
/* Copyright (C) 2011 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <errno.h>
/*! \brief Error codes used in the library. */
enum knot_error {
KNOT_EOK = 0,
/* Directly mapped error codes. */
KNOT_ENOMEM = -ENOMEM,
KNOT_EINVAL = -EINVAL,
KNOT_ENOTSUP = -ENOTSUP,
KNOT_EBUSY = -EBUSY,
KNOT_EAGAIN = -EAGAIN,
KNOT_EACCES = -EACCES,
KNOT_ECONNREFUSED = -ECONNREFUSED,
KNOT_EISCONN = -EISCONN,
KNOT_EADDRINUSE = -EADDRINUSE,
KNOT_ENOENT = -ENOENT,
KNOT_EEXIST = -EEXIST,
KNOT_ERANGE = -ERANGE,
KNOT_EADDRNOTAVAIL = -EADDRNOTAVAIL,
KNOT_ERROR_MIN = -1000,
/* General errors. */
KNOT_ERROR = KNOT_ERROR_MIN,
KNOT_ENOTRUNNING,
KNOT_EPARSEFAIL,
KNOT_ESEMCHECK,
KNOT_EEXPIRED,
KNOT_EUPTODATE,
KNOT_EFEWDATA,
KNOT_ESPACE,
KNOT_EMALF,
KNOT_ECRYPTO,
KNOT_ENSEC3PAR,
KNOT_ENSEC3CHAIN,
KNOT_EOUTOFZONE,
KNOT_EHASH,
KNOT_EZONEINVAL,
KNOT_EZONENOENT,
KNOT_ENOZONE,
KNOT_ENONODE,
KNOT_ENOMASTER,
KNOT_EDNAMEPTR,
KNOT_EPAYLOAD,
KNOT_EPREREQ,
KNOT_ETTL,
KNOT_ENOXFR,
KNOT_ENOIXFR,
KNOT_EXFRREFUSED,
KNOT_EDENIED,
KNOT_ECONN,
KNOT_ETIMEOUT,
KNOT_EIXFRSPACE,
KNOT_ECNAME,
KNOT_ENODIFF,
KNOT_EDSDIGESTLEN,
KNOT_ENOTSIG,
KNOT_ELIMIT,
KNOT_EWRITABLE,
KNOT_EOF,
KNOT_ESYSTEM,
KNOT_EFILE,
/* Control states. */
KNOT_CTL_STOP,
KNOT_CTL_ACCEPTED,
KNOT_CTL_ARG_REQ,
/* Network errors. */
KNOT_NET_EADDR,
KNOT_NET_ESOCKET,
KNOT_NET_ECONNECT,
KNOT_NET_ESEND,
KNOT_NET_ERECV,
KNOT_NET_ETIMEOUT,
/* Encoding errors. */
KNOT_BASE64_ESIZE,
KNOT_BASE64_ECHAR,
KNOT_BASE32HEX_ESIZE,
KNOT_BASE32HEX_ECHAR,
/* TSIG errors. */
KNOT_TSIG_EBADSIG,
KNOT_TSIG_EBADKEY,
KNOT_TSIG_EBADTIME,
KNOT_TSIG_EBADTRUNC,
/* Key parsing errors. */
KNOT_KEY_EPUBLIC_KEY_OPEN,
KNOT_KEY_EPRIVATE_KEY_OPEN,
KNOT_KEY_EPUBLIC_KEY_INVALID,
/* DNSSEC errors. */
KNOT_DNSSEC_EMISSINGKEYTYPE,
KNOT_DNSSEC_ENOKEY,
/* Yparser errors. */
KNOT_YP_ECHAR_TAB,
KNOT_YP_EINVAL_ITEM,
KNOT_YP_EINVAL_ID,
KNOT_YP_EINVAL_DATA,
KNOT_YP_EINVAL_INDENT,
KNOT_YP_ENOTSUP_DATA,
KNOT_YP_ENOTSUP_ID,
KNOT_YP_ENODATA,
KNOT_YP_ENOID,
/* Configuration errors. */
KNOT_CONF_EMPTY,
KNOT_CONF_EVERSION,
KNOT_CONF_EREDEFINE,
KNOT_CONF_ETXN,
KNOT_CONF_ENOTXN,
KNOT_CONF_EMANYTXN,
/* Processing error. */
KNOT_LAYER_ERROR,
KNOT_ERROR_MAX = -501
};
/*!
* \brief Map POSIX errno code to Knot error code.
*
* \param code Errno code to transform (set -1 to use the current errno).
*
* \return Mapped errno or KNOT_ERROR if unknown.
*/
int knot_map_errno_code(int code);
/*!
* \brief Get a POSIX errno mapped to Knot error code.
*
* \return Mapped errno or KNOT_ERROR if unknown.
*/
int knot_map_errno(void);
/*! @} */
......@@ -5,7 +5,7 @@
#include "libknot/internal/macros.h"
#include "libknot/internal/hhash.h"
#include "libknot/internal/trie/murmurhash3.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
/* UCW array sorting defines. */
static int universal_cmp(uint32_t k1, uint32_t k2, hhash_t *tbl);
......
......@@ -23,7 +23,7 @@
#include "libknot/internal/macros.h"
#include "libknot/internal/namedb/namedb_lmdb.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include <lmdb.h>
......
......@@ -17,7 +17,7 @@
#include <assert.h>
#include "libknot/internal/macros.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include "libknot/internal/namedb/namedb_trie.h"
#include "libknot/internal/trie/hat-trie.h"
#include "libknot/internal/mempattern.h"
......
......@@ -25,7 +25,7 @@ extern "C" {
#include <stdbool.h>
#include "libknot/internal/mempattern.h"
#include "libknot/internal/hhash.h"
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
/* Hat-trie defines. */
#define TRIE_ZEROBUCKETS 0 /* Do not use hash buckets (pure trie). */
......
......@@ -29,7 +29,7 @@
#include "libknot/consts.h"
#include "libknot/descriptor.h"
#include "libknot/dname.h"
#include "libknot/errcode.h"
#include "libknot/error.h"
#include "libknot/packet/compr.h"
#include "libknot/packet/pkt.h"
#include "libknot/packet/wire.h"
......
......@@ -23,7 +23,7 @@
#include "libknot/internal/macros.h"
#include "libknot/yparser/yparser.h"
#include "libknot/libknot.h"
#include "libknot/errcode.h"
extern int _yp_start_state;
extern int _yp_parse(yp_parser_t *parser);
......
......@@ -18,7 +18,7 @@
#include <string.h>
#include "libknot/yparser/yparser.h"
#include "libknot/libknot.h"
#include "libknot/errcode.h"
......
......@@ -17,7 +17,7 @@
#include <string.h>
#include "libknot/yparser/yparser.h"
#include "libknot/libknot.h"
#include "libknot/errcode.h"
%%{
machine yparser;
......
......@@ -16,7 +16,7 @@
#include "libknot/internal/macros.h"
#include "libknot/yparser/yptrafo.h"
#include "libknot/libknot.h"
#include "libknot/errcode.h"
static int format_item(
const yp_item_t *item,
......
......@@ -14,12 +14,13 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <assert.h>
#include <stdlib.h>
#include "libknot/internal/macros.h"
#include "libknot/yparser/ypscheme.h"
#include "libknot/yparser/yptrafo.h"
#include "libknot/libknot.h"
#include "libknot/errcode.h"
/*! Initializes the referenced item. */
static int set_ref_item(
......
......@@ -22,7 +22,8 @@
#include "libknot/yparser/yptrafo.h"
#include "libknot/internal/macros.h"
#include "libknot/libknot.h"
#include "libknot/consts.h"
#include "libknot/dname.h"
#include "contrib/base64.h"
#include "contrib/sockaddr.h"
#include "contrib/wire_ctx.h"
......
......@@ -18,7 +18,7 @@
#include <netinet/in.h>
#include <stdio.h>
#include "libknot/internal/errcode.h"
#include "libknot/errcode.h"
#include "contrib/wire_ctx.h"
#define OK(wire) { \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment