From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:54038) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QzW9e-00025w-9b for qemu-devel@nongnu.org; Fri, 02 Sep 2011 11:59:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QzW9c-0005N1-FH for qemu-devel@nongnu.org; Fri, 02 Sep 2011 11:59:42 -0400 Received: from mail-gw0-f45.google.com ([74.125.83.45]:50666) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QzW9c-0005Mv-Ce for qemu-devel@nongnu.org; Fri, 02 Sep 2011 11:59:40 -0400 Received: by gwb19 with SMTP id 19so1982343gwb.4 for ; Fri, 02 Sep 2011 08:59:39 -0700 (PDT) Message-ID: <4E60FD69.6020600@codemonkey.ws> Date: Fri, 02 Sep 2011 10:59:37 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1314211389-28915-1-git-send-email-aliguori@us.ibm.com> <1314211389-28915-2-git-send-email-aliguori@us.ibm.com> <20110824171553.3edc819b@doriath> In-Reply-To: <20110824171553.3edc819b@doriath> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 01/14] qerror: add qerror_report_err() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: Kevin Wolf , Anthony Liguori , qemu-devel@nongnu.org, Michael Roth On 08/24/2011 03:15 PM, Luiz Capitulino wrote: > On Wed, 24 Aug 2011 13:42:56 -0500 > Anthony Liguori wrote: > >> This provides a bridge between Error (new error mechanism) and QError (old error >> mechanism). Errors can be propagated whereas QError cannot. >> >> The minor evilness avoids layering violations. Since QError should go away RSN, >> it seems like a reasonable hack. >> >> Signed-off-by: Anthony Liguori >> --- >> qerror.c | 33 +++++++++++++++++++++++++++++++++ >> qerror.h | 2 ++ >> 2 files changed, 35 insertions(+), 0 deletions(-) >> >> diff --git a/qerror.c b/qerror.c >> index 3d64b80..fa647a6 100644 >> --- a/qerror.c >> +++ b/qerror.c >> @@ -478,6 +478,39 @@ void qerror_report_internal(const char *file, int linenr, const char *func, >> } >> } >> >> +/* Evil... */ >> +struct Error >> +{ >> + QDict *obj; >> + const char *fmt; >> + char *msg; >> +}; > > Given that we're in hack mode, I think I'd prefer to have struct Error in > error.h and then include it here. That adds a QObject dependency to error.h which cascades a bunch of dependencies. I don't like this much either but I think it's the least of a few evils. > >> + >> +void qerror_report_err(Error *err) >> +{ >> + QError *qerr; >> + int i; >> + >> + qerr = qerror_new(); >> + loc_save(&qerr->loc); >> + QINCREF(err->obj); >> + qerr->error = err->obj; >> + >> + for (i = 0; qerror_table[i].error_fmt; i++) { >> + if (strcmp(qerror_table[i].error_fmt, err->fmt) == 0) { >> + qerr->entry =&qerror_table[i]; >> + return; > > You have to drop this return, else the if clause below won't be > executed. Or you could just use qerror_set_desc(). Thanks! Regards, Anthony Liguori >> + } >> + } >> + >> + if (monitor_cur_is_qmp()) { >> + monitor_set_error(cur_mon, qerr); >> + } else { >> + qerror_print(qerr); >> + QDECREF(qerr); >> + } >> +} >> + >> /** >> * qobject_to_qerror(): Convert a QObject into a QError >> */ >> diff --git a/qerror.h b/qerror.h >> index 8058456..4fe24aa 100644 >> --- a/qerror.h >> +++ b/qerror.h >> @@ -15,6 +15,7 @@ >> #include "qdict.h" >> #include "qstring.h" >> #include "qemu-error.h" >> +#include "error.h" >> #include >> >> typedef struct QErrorStringTable { >> @@ -39,6 +40,7 @@ QString *qerror_human(const QError *qerror); >> void qerror_print(QError *qerror); >> void qerror_report_internal(const char *file, int linenr, const char *func, >> const char *fmt, ...) GCC_FMT_ATTR(4, 5); >> +void qerror_report_err(Error *err); >> QString *qerror_format(const char *fmt, QDict *error); >> #define qerror_report(fmt, ...) \ >> qerror_report_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__) > >