qemu/include/qapi/error.h
<<
>>
Prefs
   1/*
   2 * QEMU Error Objects
   3 *
   4 * Copyright IBM, Corp. 2011
   5 *
   6 * Authors:
   7 *  Anthony Liguori   <aliguori@us.ibm.com>
   8 *
   9 * This work is licensed under the terms of the GNU LGPL, version 2.  See
  10 * the COPYING.LIB file in the top-level directory.
  11 */
  12#ifndef ERROR_H
  13#define ERROR_H
  14
  15#include "qemu/compiler.h"
  16#include "qapi-types.h"
  17#include <stdbool.h>
  18
  19/**
  20 * A class representing internal errors within QEMU.  An error has a ErrorClass
  21 * code and a human message.
  22 */
  23typedef struct Error Error;
  24
  25/**
  26 * Set an indirect pointer to an error given a ErrorClass value and a
  27 * printf-style human message.  This function is not meant to be used outside
  28 * of QEMU.
  29 */
  30void error_set(Error **err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
  31
  32/**
  33 * Set an indirect pointer to an error given a ErrorClass value and a
  34 * printf-style human message, followed by a strerror() string if
  35 * @os_error is not zero.
  36 */
  37void error_set_errno(Error **err, int os_error, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(4, 5);
  38
  39/**
  40 * Same as error_set(), but sets a generic error
  41 */
  42#define error_setg(err, fmt, ...) \
  43    error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
  44#define error_setg_errno(err, os_error, fmt, ...) \
  45    error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
  46
  47/**
  48 * Helper for open() errors
  49 */
  50void error_setg_file_open(Error **errp, int os_errno, const char *filename);
  51
  52/**
  53 * Returns true if an indirect pointer to an error is pointing to a valid
  54 * error object.
  55 */
  56bool error_is_set(Error **err);
  57
  58/*
  59 * Get the error class of an error object.
  60 */
  61ErrorClass error_get_class(const Error *err);
  62
  63/**
  64 * Returns an exact copy of the error passed as an argument.
  65 */
  66Error *error_copy(const Error *err);
  67
  68/**
  69 * Get a human readable representation of an error object.
  70 */
  71const char *error_get_pretty(Error *err);
  72
  73/**
  74 * Propagate an error to an indirect pointer to an error.  This function will
  75 * always transfer ownership of the error reference and handles the case where
  76 * dst_err is NULL correctly.  Errors after the first are discarded.
  77 */
  78void error_propagate(Error **dst_err, Error *local_err);
  79
  80/**
  81 * Free an error object.
  82 */
  83void error_free(Error *err);
  84
  85#endif
  86