1/* 2 * Copyright (C) 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> 3 * 4 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; 8 * version 2.1 of the License (not later!) 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this program; if not, see <http://www.gnu.org/licenses> 17 * 18 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 */ 20#include <stdio.h> 21#include <stdlib.h> 22#include <string.h> 23#include <stdarg.h> 24#include <errno.h> 25 26#define __weak __attribute__((weak)) 27 28void __vdie(const char *fmt, va_list ap) 29{ 30 int ret = errno; 31 32 if (errno) 33 perror("trace-cmd"); 34 else 35 ret = -1; 36 37 fprintf(stderr, " "); 38 vfprintf(stderr, fmt, ap); 39 40 fprintf(stderr, "\n"); 41 exit(ret); 42} 43 44void __die(const char *fmt, ...) 45{ 46 va_list ap; 47 48 va_start(ap, fmt); 49 __vdie(fmt, ap); 50 va_end(ap); 51} 52 53void __weak die(const char *fmt, ...) 54{ 55 va_list ap; 56 57 va_start(ap, fmt); 58 __vdie(fmt, ap); 59 va_end(ap); 60} 61 62void __vwarning(const char *fmt, va_list ap) 63{ 64 if (errno) 65 perror("trace-cmd"); 66 errno = 0; 67 68 fprintf(stderr, " "); 69 vfprintf(stderr, fmt, ap); 70 71 fprintf(stderr, "\n"); 72} 73 74void __warning(const char *fmt, ...) 75{ 76 va_list ap; 77 78 va_start(ap, fmt); 79 __vwarning(fmt, ap); 80 va_end(ap); 81} 82 83void __weak warning(const char *fmt, ...) 84{ 85 va_list ap; 86 87 va_start(ap, fmt); 88 __vwarning(fmt, ap); 89 va_end(ap); 90} 91 92void __vpr_stat(const char *fmt, va_list ap) 93{ 94 vprintf(fmt, ap); 95 printf("\n"); 96} 97 98void __pr_stat(const char *fmt, ...) 99{ 100 va_list ap; 101 102 va_start(ap, fmt); 103 __vpr_stat(fmt, ap); 104 va_end(ap); 105} 106 107void __weak vpr_stat(const char *fmt, va_list ap) 108{ 109 __vpr_stat(fmt, ap); 110} 111 112void __weak pr_stat(const char *fmt, ...) 113{ 114 va_list ap; 115 116 va_start(ap, fmt); 117 __vpr_stat(fmt, ap); 118 va_end(ap); 119} 120 121void __weak *malloc_or_die(unsigned int size) 122{ 123 void *data; 124 125 data = malloc(size); 126 if (!data) 127 die("malloc"); 128 return data; 129} 130