| /* |
| * Copyright (C) 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> |
| * |
| * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; |
| * version 2.1 of the License (not later!) |
| * |
| * 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 Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this program; if not, see <http://www.gnu.org/licenses> |
| * |
| * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| */ |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdarg.h> |
| #include <errno.h> |
| |
| #define __weak __attribute__((weak)) |
| |
| void __vdie(const char *fmt, va_list ap) |
| { |
| int ret = errno; |
| |
| if (errno) |
| perror("trace-cmd"); |
| else |
| ret = -1; |
| |
| fprintf(stderr, " "); |
| vfprintf(stderr, fmt, ap); |
| |
| fprintf(stderr, "\n"); |
| exit(ret); |
| } |
| |
| void __die(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vdie(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __weak die(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vdie(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __vwarning(const char *fmt, va_list ap) |
| { |
| if (errno) |
| perror("trace-cmd"); |
| errno = 0; |
| |
| fprintf(stderr, " "); |
| vfprintf(stderr, fmt, ap); |
| |
| fprintf(stderr, "\n"); |
| } |
| |
| void __warning(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vwarning(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __weak warning(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vwarning(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __vpr_stat(const char *fmt, va_list ap) |
| { |
| vprintf(fmt, ap); |
| printf("\n"); |
| } |
| |
| void __pr_stat(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vpr_stat(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __weak vpr_stat(const char *fmt, va_list ap) |
| { |
| __vpr_stat(fmt, ap); |
| } |
| |
| void __weak pr_stat(const char *fmt, ...) |
| { |
| va_list ap; |
| |
| va_start(ap, fmt); |
| __vpr_stat(fmt, ap); |
| va_end(ap); |
| } |
| |
| void __weak *malloc_or_die(unsigned int size) |
| { |
| void *data; |
| |
| data = malloc(size); |
| if (!data) |
| die("malloc"); |
| return data; |
| } |