]> git.proxmox.com Git - qemu.git/blobdiff - error.h
fdc-test: split test_media_change() test, so insert part can be reused
[qemu.git] / error.h
diff --git a/error.h b/error.h
index 6361f407fdd263958b94acf6d7c141359d63278c..4d52e7369e9af5096b86984d84fac7b5b8b640db 100644 (file)
--- a/error.h
+++ b/error.h
 #define ERROR_H
 
 #include "compiler.h"
+#include "qapi-types.h"
 #include <stdbool.h>
 
 /**
- * A class representing internal errors within QEMU.  An error has a string
- * typename and optionally a set of named string parameters.
+ * A class representing internal errors within QEMU.  An error has a ErrorClass
+ * code and a human message.
  */
 typedef struct Error Error;
 
 /**
- * Set an indirect pointer to an error given a printf-style format parameter.
- * Currently, qerror.h defines these error formats.  This function is not
- * meant to be used outside of QEMU.
+ * Set an indirect pointer to an error given a ErrorClass value and a
+ * printf-style human message.  This function is not meant to be used outside
+ * of QEMU.
  */
-void error_set(Error **err, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
+void error_set(Error **err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(3, 4);
+
+/**
+ * Set an indirect pointer to an error given a ErrorClass value and a
+ * printf-style human message, followed by a strerror() string if
+ * @os_error is not zero.
+ */
+void error_set_errno(Error **err, int os_error, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(4, 5);
+
+/**
+ * Same as error_set(), but sets a generic error
+ */
+#define error_setg(err, fmt, ...) \
+    error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
+#define error_setg_errno(err, os_error, fmt, ...) \
+    error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__)
 
 /**
  * Returns true if an indirect pointer to an error is pointing to a valid
@@ -34,25 +50,25 @@ void error_set(Error **err, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
  */
 bool error_is_set(Error **err);
 
-/**
- * Get a human readable representation of an error object.
+/*
+ * Get the error class of an error object.
  */
-const char *error_get_pretty(Error *err);
+ErrorClass error_get_class(const Error *err);
 
 /**
- * Get an individual named error field.
+ * Returns an exact copy of the error passed as an argument.
  */
-const char *error_get_field(Error *err, const char *field);
+Error *error_copy(const Error *err);
 
 /**
- * Get an individual named error field.
+ * Get a human readable representation of an error object.
  */
-void error_set_field(Error *err, const char *field, const char *value);
+const char *error_get_pretty(Error *err);
 
 /**
  * Propagate an error to an indirect pointer to an error.  This function will
  * always transfer ownership of the error reference and handles the case where
- * dst_err is NULL correctly.
+ * dst_err is NULL correctly.  Errors after the first are discarded.
  */
 void error_propagate(Error **dst_err, Error *local_err);
 
@@ -61,10 +77,4 @@ void error_propagate(Error **dst_err, Error *local_err);
  */
 void error_free(Error *err);
 
-/**
- * Determine if an error is of a speific type (based on the qerror format).
- * Non-QEMU users should get the `class' field to identify the error type.
- */
-bool error_is_type(Error *err, const char *fmt);
-
 #endif