golang/xenlight: Add error constants and standard handling

Create error type Errorxl for throwing proper xenlight
errors.

Update Ctx functions to throw Errorxl errors.

Signed-off-by: Ronald Rojas <ronladred@gmail.com>
Reviewed-by:  George Dunlap <george.dunlap@citrix.com>
Acked-by: Ian Jackson <ian.jackson@citrix.com>
This commit is contained in:
Ronald Rojas authored and George Dunlap committed 2017-04-06 15:34:00 +01:00
1 parent 38e6735b19
commit 73be0fd390
1 file changed
+76 -2
+76 -2
View File
@@ -36,9 +36,83 @@ import (
"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",
}
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)
}
/*
* Types: Builtins
*/
type Context struct {
ctx *C.libxl_ctx
logger *C.xentoollog_logger_stdiostream
@@ -68,7 +142,7 @@ func (Ctx *Context) Open() (err error) {
0, unsafe.Pointer(Ctx.logger))
if ret != 0 {
err = fmt.Errorf("Error: %d", -ret)
err = Error(-ret)
}
return
}
@@ -78,7 +152,7 @@ func (Ctx *Context) Close() (err error) {
Ctx.ctx = nil
if ret != 0 {
err = fmt.Errorf("Error: %d", -ret)
err = Error(-ret)
}
C.xtl_logger_destroy(unsafe.Pointer(Ctx.logger))
return
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.