diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/error.c | 57 | ||||
-rw-r--r-- | common/error.h | 32 |
2 files changed, 89 insertions, 0 deletions
diff --git a/common/error.c b/common/error.c new file mode 100644 index 0000000..7b46826 --- /dev/null +++ b/common/error.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2023 Patrick McDermott + * + * This file is part of opkg-opk. + * + * opkg-opk 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. + * + * opkg-opk 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 opkg-opk. If not, see <https://www.gnu.org/licenses/>. + */ + +#include <errno.h> +#include <stdarg.h> +#include <stdio.h> +#include <string.h> + +#include "error.h" + +static const char *_opkg_opk_program_name; + +void +opkg_opk_set_program_name(const char *program_name) +{ + _opkg_opk_program_name = program_name; +} + +void __attribute__((format(__printf__, 1, 2))) +opkg_opk_error(const char *fmt, ...) +{ + va_list ap; + + fprintf(stderr, "%s: ", _opkg_opk_program_name); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); +} + +void __attribute__((format(__printf__, 1, 2))) +opkg_opk_errno(const char *fmt, ...) +{ + va_list ap; + + fprintf(stderr, "%s: ", _opkg_opk_program_name); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, ": %s\n", strerror(errno)); +} diff --git a/common/error.h b/common/error.h new file mode 100644 index 0000000..3654696 --- /dev/null +++ b/common/error.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2023 Patrick McDermott + * + * This file is part of opkg-opk. + * + * opkg-opk 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. + * + * opkg-opk 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 opkg-opk. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef OPKG_OPK_ERROR_H_ +#define OPKG_OPK_ERROR_H_ + +void +opkg_opk_set_program_name(const char *program_name); + +void __attribute__((format(__printf__, 1, 2))) +opkg_opk_error(const char *fmt, ...); + +void __attribute__((format(__printf__, 1, 2))) +opkg_opk_errno(const char *fmt, ...); + +#endif /* OPKG_OPK_ERROR_H_ */ |