|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/11] tools/xc: pass errno to callers of xc_domain_save
On Thu, Mar 06, Ian Jackson wrote:
> Olaf Hering writes ("[PATCH 09/11] tools/xc: pass errno to callers of
> xc_domain_save"):
> > Callers of xc_domain_save use errno to print diagnostics if the call
> > fails. But xc_domain_save does not preserve the actual errno in case of
> > a failure.
> >
> > This change preserves errno in all cases where code jumps to the label
> > "out". In addition a new label "exit" is added to catch also code which
> > used to do just "return 1".
>
> I can't help wondering if this patch would be a lot smaller if it were
> done by having ERROR and PERROR, and the cleanup part of
> xc_domain_save, preserve errno.
Something like this for the macros?
diff --git a/tools/libxc/xc_private.h b/tools/libxc/xc_private.h
index a610f0c..8b791b6 100644
--- a/tools/libxc/xc_private.h
+++ b/tools/libxc/xc_private.h
@@ -123,9 +123,15 @@ void xc_report_progress_step(xc_interface *xch,
#define DPRINTF(_f, _a...) xc_report(xch, xch->error_handler, XTL_DETAIL,0, _f
, ## _a)
#define DBGPRINTF(_f, _a...) xc_report(xch, xch->error_handler, XTL_DEBUG,0,
_f , ## _a)
-#define ERROR(_m, _a...) xc_report_error(xch,XC_INTERNAL_ERROR,_m , ## _a )
-#define PERROR(_m, _a...) xc_report_error(xch,XC_INTERNAL_ERROR,_m \
- " (%d = %s)", ## _a , errno, xc_strerror(xch, errno))
+#define ERROR(_m, _a...) do { int __errno = errno; \
+ xc_report_error(xch,XC_INTERNAL_ERROR,_m , ## _a ); \
+ errno = __errno; \
+ } while (0)
+#define PERROR(_m, _a...) do { int __errno = errno; \
+ xc_report_error(xch,XC_INTERNAL_ERROR,_m " (%d = %s)", \
+ ## _a , errno, xc_strerror(xch, errno)); \
+ errno = __errno; \
+ } while (0)
/*
* HYPERCALL ARGUMENT BUFFERS
> > Note: some of the functions used in xc_domain_save do not use errno to
> > indicate a reason. In these cases the errno remains undefined as it used
> > to be without this change.
>
> Do you intend to fix this too ?
I will have a look.
Olaf
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |