aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-05-26 09:25:50 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2025-06-05 20:24:51 +0200
commit230a4894f45eac5fbd6bea8dc0dd54f84cf6c0fa (patch)
tree171081e885e1d52583ff069a14787c72a0715109
parent8714d366e7e29d3ca8cebc8504e18c4cd7b5cf48 (diff)
downloadqemu-230a4894f45eac5fbd6bea8dc0dd54f84cf6c0fa.zip
qemu-230a4894f45eac5fbd6bea8dc0dd54f84cf6c0fa.tar.gz
qemu-230a4894f45eac5fbd6bea8dc0dd54f84cf6c0fa.tar.bz2
util/error: allow non-NUL-terminated err->src
Rust makes the current file available as a statically-allocated string, but without a NUL terminator. Allow this by storing an optional maximum length in the Error. Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--include/qapi/error-internal.h9
-rw-r--r--util/error.c5
2 files changed, 11 insertions, 3 deletions
diff --git a/include/qapi/error-internal.h b/include/qapi/error-internal.h
index d5c3904..1ec3ceb 100644
--- a/include/qapi/error-internal.h
+++ b/include/qapi/error-internal.h
@@ -18,7 +18,14 @@ struct Error
{
char *msg;
ErrorClass err_class;
- const char *src, *func;
+ const char *func;
+
+ /*
+ * src might be NUL-terminated or not. If it is, src_len is negative.
+ * If it is not, src_len is the length.
+ */
+ const char *src;
+ int src_len;
int line;
GString *hint;
};
diff --git a/util/error.c b/util/error.c
index e5bcb7c..3449ecc 100644
--- a/util/error.c
+++ b/util/error.c
@@ -24,8 +24,8 @@ Error *error_warn;
static void error_handle(Error **errp, Error *err)
{
if (errp == &error_abort) {
- fprintf(stderr, "Unexpected error in %s() at %s:%d:\n",
- err->func, err->src, err->line);
+ fprintf(stderr, "Unexpected error in %s() at %.*s:%d:\n",
+ err->func, err->src_len, err->src, err->line);
error_report("%s", error_get_pretty(err));
if (err->hint) {
error_printf("%s", err->hint->str);
@@ -67,6 +67,7 @@ static void error_setv(Error **errp,
g_free(msg);
}
err->err_class = err_class;
+ err->src_len = -1;
err->src = src;
err->line = line;
err->func = func;