Create error type Errorxl for throwing proper xenlight
errors.

Update Ctx functions to throw Errorxl errors.

Signed-off-by: Ronald Rojas <ronlad...@gmail.com>
---
Changes since last patch:

- Whitespace fixes

CC: xen-devel@lists.xen.org
CC: george.dun...@citrix.com
CC: ian.jack...@eu.citrix.com
CC: wei.l...@citrix.com
---
---
 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
 }
-- 
2.7.3


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to