view err.h @ 109:4efd3873a457

Remove useless bits in _free()
author David Demelier <markand@malikania.fr>
date Tue, 07 Feb 2012 10:11:06 +0100
parents b1a084c030c8
children
line wrap: on
line source

/*
 * err.h -- formtted error messages (portable version)
 *
 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _ERR_H_
#define _ERR_H_

#include <stdarg.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Attribute noreturn may helps. This may produce a warning with GCC 4.5:
 *
 * int a;
 *
 * if ((a = getstate() < 0)
 *	errx(1, "State failed");
 *
 * Because compilator does not know that errx will call exit may produce
 * a warning like `a may be used uninitialized'.
 */

#if defined(__GNUC__)
#  define __at_noreturn	__attribute__ ((noreturn))
#elif defined(_MSC_VER)
#  define __at_noreturn	__declspec(noreturn)
#endif

/*
 * err() functions append the format message to the stderr FILE pointer. They
 * also append the system error using strerror(errno). Then the functions exit
 * with the error code given as first argument.
 */

void	err(int, const char *, ...) __at_noreturn;
void	verr(int, const char *, va_list) __at_noreturn;

/*
 * errx() functions are similar to err() except that they do not append the
 * system error message.
 */

void	errx(int, const char *, ...) __at_noreturn;
void	verrx(int, const char *, va_list) __at_noreturn;

/*
 * warn() functions are similar to err() but they do not call exit().
 */

void	warn(const char *, ...);
void	vwarn(const char *, va_list);

/*
 * warnx() functions are similar to warn() except that they do not append the
 * system error message.
 */

void	warnx(const char *, ...);
void	vwarnx(const char *, va_list);

#ifdef __cplusplus
}
#endif

#endif /* _ERR_H_ */