1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
/*
* libstatgrab
* https://libstatgrab.org
* Copyright (C) 2003-2004 Peter Saunders
* Copyright (C) 2003-2019 Tim Bishop
* Copyright (C) 2003-2013 Adam Sampson
* Copyright (C) 2012-2019 Jens Rehsack
*
* This library 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; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
#include <tools.h>
#include "testlib.h"
#include <stdarg.h>
int
sg_warn(const char *prefix)
{
sg_error_details err_det;
char *errmsg = NULL;
int rc;
sg_error errc;
if( SG_ERROR_NONE != ( errc = sg_get_error_details(&err_det) ) ) {
fprintf(stderr, "can't get error details (%d, %s)\n", errc, sg_str_error(errc));
return 0;
}
if( NULL == sg_strperror(&errmsg, &err_det) ) {
errc = sg_get_error();
fprintf(stderr, "panic: can't prepare error message (%d, %s)\n", errc, sg_str_error(errc));
return 0;
}
rc = fprintf( stderr, "%s: %s\n", prefix, errmsg );
free( errmsg );
return rc;
}
void
sg_die(const char *prefix, int exit_code)
{
sg_error_details err_det;
char *errmsg = NULL;
sg_error errc;
if( SG_ERROR_NONE != ( errc = sg_get_error_details(&err_det) ) ) {
fprintf(stderr, "panic: can't get error details (%d, %s)\n", errc, sg_str_error(errc));
exit(exit_code);
}
if( NULL == sg_strperror(&errmsg, &err_det) ) {
errc = sg_get_error();
fprintf(stderr, "panic: can't prepare error message (%d, %s)\n", errc, sg_str_error(errc));
exit(exit_code);
}
fprintf( stderr, "%s: %s\n", prefix, errmsg );
free( errmsg );
exit(exit_code);
}
static void
err_doit(int errnoflag, int error, const char *fmt, va_list ap)
{
char buf[4096];
int printed;
printed = vsnprintf( buf, sizeof(buf), fmt, ap);
if(errnoflag)
snprintf(buf + printed, sizeof(buf) - printed, ": %s", strerror(error) );
fflush(stderr);
fputs(buf, stderr);
fputs("\n", stderr);
fflush(NULL);
}
void
die(int error, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(1, error, fmt, ap);
va_end(ap);
exit(1);
}
|