From d5a4c4340655708b2fe4193ed7881159fc871b82 Mon Sep 17 00:00:00 2001 From: Achilleas Anagnostopoulos Date: Wed, 31 May 2017 14:10:49 +0100 Subject: [PATCH] Define type for kernel error messages Since the Go memory allocator is not available to us we need to define our own error type. --- kernel/error.go | 18 ++++++++++++++++++ kernel/error_test.go | 14 ++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 kernel/error.go create mode 100644 kernel/error_test.go diff --git a/kernel/error.go b/kernel/error.go new file mode 100644 index 0000000..c3accfd --- /dev/null +++ b/kernel/error.go @@ -0,0 +1,18 @@ +package kernel + +// Error describes a kernel kerror. All kernel errors must be defined as global +// variables that are pointers to the Error structure. This requirement stems +// from the fact that the Go allocator is not available to us so we cannot use +// errors.New. +type Error struct { + // The module where the error occurred. + Module string + + // The error message + Message string +} + +// Error implements the error interface. +func (e *Error) Error() string { + return e.Message +} diff --git a/kernel/error_test.go b/kernel/error_test.go new file mode 100644 index 0000000..64d1b43 --- /dev/null +++ b/kernel/error_test.go @@ -0,0 +1,14 @@ +package kernel + +import "testing" + +func TestKernelError(t *testing.T) { + err := &Error{ + Module: "foo", + Message: "error message", + } + + if err.Error() != err.Message { + t.Fatalf("expected to err.Error() to return %q; got %q", err.Message, err.Error()) + } +}