diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:15:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:15:13 +0000 |
commit | 5fb98df7b32417914e9b282e91987199416d0a97 (patch) | |
tree | d674271dc3d99faa1a75fa689888ee3d3aec4e10 /ipcalc-utils.c | |
parent | Initial commit. (diff) | |
download | ipcalc-ng-5fb98df7b32417914e9b282e91987199416d0a97.tar.xz ipcalc-ng-5fb98df7b32417914e9b282e91987199416d0a97.zip |
Adding upstream version 1.0.3.upstream/1.0.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ipcalc-utils.c')
-rw-r--r-- | ipcalc-utils.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/ipcalc-utils.c b/ipcalc-utils.c new file mode 100644 index 0000000..026e069 --- /dev/null +++ b/ipcalc-utils.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2018 Red Hat, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * 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/>. + * + * Authors: + * Martin Sehnoutka <msehnout@redhat.com> + */ + +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <errno.h> + +int __attribute__((__format__(printf, 2, 3))) safe_asprintf(char **strp, const char *fmt, ...) +{ + int ret; + va_list args; + + va_start(args, fmt); + ret = vasprintf(&(*strp), fmt, args); + va_end(args); + if (ret < 0) { + fprintf(stderr, "Memory allocation failure\n"); + exit(1); + } + return ret; +} + +int safe_atoi(const char *s, int *ret_i) +{ + char *x = NULL; + long l; + + errno = 0; + l = strtol(s, &x, 0); + + if (!x || x == s || *x || errno) + return errno > 0 ? -errno : -EINVAL; + + if ((long)(int)l != l) + return -ERANGE; + + *ret_i = (int)l; + return 0; +} + +/*! + \fn char safe_strdup(const char *s) + \brief strdup(3) that checks memory allocation or fail + + This function does the same as strdup(3) with additional memory allocation + check. When check fails the function will cause program to exit. + + \param string to be duplicated + \return allocated duplicate +*/ +extern char __attribute__((warn_unused_result)) *safe_strdup(const char *str) +{ + char *ret; + + if (!str) + return NULL; + + ret = strdup(str); + if (!ret) { + fprintf(stderr, "Memory allocation failure\n"); + exit(1); + } + return ret; +} |