|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/5] golang/xenlight: Add error constants and standard handling
On 02/03/17 16:07, Ronald Rojas wrote:
> Create error type Errorxl for throwing proper xenlight
> errors.
>
> Update Ctx functions to throw Errorxl errors.
>
> Signed-off-by: Ronald Rojas <ronladred@xxxxxxxxx>
There are a couple of `go fmt` changes which should be in the previous
patch (including the stray semicolon and a space for a c-style comment).
With that fixed:
Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
> ---
> Changes since last patch:
>
> - Whitespace fixes
>
> CC: xen-devel@xxxxxxxxxxxxx
> CC: george.dunlap@xxxxxxxxxx
> CC: ian.jackson@xxxxxxxxxxxxx
> CC: wei.liu2@xxxxxxxxxx
> ---
> ---
> tools/golang/xenlight/xenlight.go | 81
> +++++++++++++++++++++++++++++++++++++--
> 1 file changed, 77 insertions(+), 4 deletions(-)
>
> diff --git a/tools/golang/xenlight/xenlight.go
> b/tools/golang/xenlight/xenlight.go
> index 0a0cea2..cbd3527 100644
> --- a/tools/golang/xenlight/xenlight.go
> +++ b/tools/golang/xenlight/xenlight.go
> @@ -29,17 +29,79 @@ import "C"
> *
> * To get back to static linking:
> * #cgo LDFLAGS: -lxenlight -lyajl_s -lxengnttab -lxenstore -lxenguest
> -lxentoollog -lxenevtchn -lxenctrl -lblktapctl -lxenforeignmemory -lxencall
> -lz -luuid -lutil
> -*/
> + */
>
> import (
> "fmt"
> "unsafe"
> )
>
> +/*
> + * Errors
> + */
> +
> +type Error int
> +
> +const (
> + ErrorNonspecific = Error(-C.ERROR_NONSPECIFIC)
> + ErrorVersion = Error(-C.ERROR_VERSION)
> + ErrorFail = Error(-C.ERROR_FAIL)
> + ErrorNi = Error(-C.ERROR_NI)
> + ErrorNomem = Error(-C.ERROR_NOMEM)
> + ErrorInval = Error(-C.ERROR_INVAL)
> + ErrorBadfail = Error(-C.ERROR_BADFAIL)
> + ErrorGuestTimedout = Error(-C.ERROR_GUEST_TIMEDOUT)
> + ErrorTimedout = Error(-C.ERROR_TIMEDOUT)
> + ErrorNoparavirt = Error(-C.ERROR_NOPARAVIRT)
> + ErrorNotReady = Error(-C.ERROR_NOT_READY)
> + ErrorOseventRegFail = Error(-C.ERROR_OSEVENT_REG_FAIL)
> + ErrorBufferfull = Error(-C.ERROR_BUFFERFULL)
> + ErrorUnknownChild = Error(-C.ERROR_UNKNOWN_CHILD)
> + ErrorLockFail = Error(-C.ERROR_LOCK_FAIL)
> + ErrorJsonConfigEmpty = Error(-C.ERROR_JSON_CONFIG_EMPTY)
> + ErrorDeviceExists = Error(-C.ERROR_DEVICE_EXISTS)
> + ErrorCheckpointDevopsDoesNotMatch =
> Error(-C.ERROR_CHECKPOINT_DEVOPS_DOES_NOT_MATCH)
> + ErrorCheckpointDeviceNotSupported =
> Error(-C.ERROR_CHECKPOINT_DEVICE_NOT_SUPPORTED)
> + ErrorVnumaConfigInvalid = Error(-C.ERROR_VNUMA_CONFIG_INVALID)
> + ErrorDomainNotfound = Error(-C.ERROR_DOMAIN_NOTFOUND)
> + ErrorAborted = Error(-C.ERROR_ABORTED)
> + ErrorNotfound = Error(-C.ERROR_NOTFOUND)
> + ErrorDomainDestroyed = Error(-C.ERROR_DOMAIN_DESTROYED)
> + ErrorFeatureRemoved = Error(-C.ERROR_FEATURE_REMOVED)
> +)
> +
> +var errors = [...]string{
> + ErrorNonspecific: "Non-specific error",
> + ErrorVersion: "Wrong version",
> + ErrorFail: "Failed",
> + ErrorNi: "Not Implemented",
> + ErrorNomem: "No memory",
> + ErrorInval: "Invalid argument",
> + ErrorBadfail: "Bad Fail",
> + ErrorGuestTimedout: "Guest timed out",
> + ErrorTimedout: "Timed out",
> + ErrorNoparavirt: "No Paravirtualization",
> + ErrorNotReady: "Not ready",
> + ErrorOseventRegFail: "OS event registration failed",
> + ErrorBufferfull: "Buffer full",
> + ErrorUnknownChild: "Unknown child",
> + ErrorLockFail: "Lock failed",
> + ErrorJsonConfigEmpty: "JSON config empty",
> + ErrorDeviceExists: "Device exists",
> + ErrorCheckpointDevopsDoesNotMatch: "Checkpoint devops does not match",
> + ErrorCheckpointDeviceNotSupported: "Checkpoint device not supported",
> + ErrorVnumaConfigInvalid: "VNUMA config invalid",
> + ErrorDomainNotfound: "Domain not found",
> + ErrorAborted: "Aborted",
> + ErrorNotfound: "Not found",
> + ErrorDomainDestroyed: "Domain destroyed",
> + ErrorFeatureRemoved: "Feature removed",
> +}
>
> /*
> * Types: Builtins
> */
> +
> type Context struct {
> ctx *C.libxl_ctx
> }
> @@ -49,6 +111,17 @@ type Context struct {
> */
> var Ctx Context
>
> +func (e Error) Error() string {
> + if 0 < int(e) && int(e) < len(errors) {
> + s := errors[e]
> + if s != "" {
> + return s
> + }
> + }
> + return fmt.Sprintf("libxl error: %d", -e)
> +
> +}
> +
> func (Ctx *Context) IsOpen() bool {
> return Ctx.ctx != nil
> }
> @@ -58,11 +131,11 @@ func (Ctx *Context) Open() (err error) {
> return
> }
>
> - logger := C.xtl_createlogger_stdiostream(C.stderr, C.XTL_ERROR, 0);
> + logger := C.xtl_createlogger_stdiostream(C.stderr, C.XTL_ERROR, 0)
> ret := C.libxl_ctx_alloc(unsafe.Pointer(&Ctx.ctx), C.LIBXL_VERSION, 0,
> unsafe.Pointer(logger))
>
> if ret != 0 {
> - err = fmt.Errorf("Error: %d", -ret)
> + err = Error(-ret)
> }
> return
> }
> @@ -72,7 +145,7 @@ func (Ctx *Context) Close() (err error) {
> Ctx.ctx = nil
>
> if ret != 0 {
> - err = fmt.Errorf("Error: %d", -ret)
> + err = Error(-ret)
> }
> return
> }
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |