diff options
author | Markus Armbruster <armbru@redhat.com> | 2010-02-18 19:46:49 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2010-03-16 16:58:32 +0100 |
commit | 827b08139c8ba97c18bda19e4893fdf26878b531 (patch) | |
tree | 1c02d74e56c7ee47b6542712a00872e02b794e9b /qerror.c | |
parent | ab5b027ee645f26320379d1d80cd96fdc944ecb5 (diff) |
error: Infrastructure to track locations for error reporting
New struct Location holds a location. So far, the only location is
LOC_NONE, so this doesn't do anything useful yet.
Passing the current location all over the place would be too
cumbersome. Hide it away in static cur_loc instead, and provide
accessors. Print it in error_report().
Store it in QError, and print it in qerror_print().
Store it in QemuOpt, for use by qemu_opts_foreach(). This makes
error_report() do the right thing when it runs within
qemu_opts_foreach().
We may still have to store it in other data structures holding user
input for better error messages. Left for another day.
Diffstat (limited to 'qerror.c')
-rw-r--r-- | qerror.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -224,6 +224,7 @@ QError *qerror_from_info(const char *file, int linenr, const char *func, QError *qerr; qerr = qerror_new(); + loc_save(&qerr->loc); qerr->linenr = linenr; qerr->file = file; qerr->func = func; @@ -321,10 +322,12 @@ QString *qerror_human(const QError *qerror) * it uses error_report() for this, so that the output is routed to the right * place (ie. stderr or Monitor's device). */ -void qerror_print(const QError *qerror) +void qerror_print(QError *qerror) { QString *qstring = qerror_human(qerror); + loc_push_restore(&qerror->loc); error_report("%s", qstring_get_str(qstring)); + loc_pop(&qerror->loc); QDECREF(qstring); } |