From e1e46504a1939aff927ae47508b0523a7305fb18 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sun, 11 Jan 2026 04:22:04 +0900 Subject: container/check: return error backed by string type The struct turned out not necessary during initial implementation but was not unwrapped into its single string field. This change replaces it with the underlying string and removes the indirection. Signed-off-by: Ophestra --- container/check/absolute.go | 19 +++++++++++-------- container/check/absolute_test.go | 14 +++++++------- 2 files changed, 18 insertions(+), 15 deletions(-) (limited to 'container/check') diff --git a/container/check/absolute.go b/container/check/absolute.go index 26f0def6..d17d5e1a 100644 --- a/container/check/absolute.go +++ b/container/check/absolute.go @@ -13,15 +13,18 @@ import ( ) // AbsoluteError is returned by [NewAbs] and holds the invalid pathname. -type AbsoluteError struct{ Pathname string } +type AbsoluteError string -func (e *AbsoluteError) Error() string { return fmt.Sprintf("path %q is not absolute", e.Pathname) } -func (e *AbsoluteError) Is(target error) bool { - var ce *AbsoluteError +func (e AbsoluteError) Error() string { + return fmt.Sprintf("path %q is not absolute", string(e)) +} + +func (e AbsoluteError) Is(target error) bool { + var ce AbsoluteError if !errors.As(target, &ce) { return errors.Is(target, syscall.EINVAL) } - return *e == *ce + return e == ce } // Absolute holds a pathname checked to be absolute. @@ -59,7 +62,7 @@ func (a *Absolute) Is(v *Absolute) bool { // NewAbs checks pathname and returns a new [Absolute] if pathname is absolute. func NewAbs(pathname string) (*Absolute, error) { if !path.IsAbs(pathname) { - return nil, &AbsoluteError{pathname} + return nil, AbsoluteError(pathname) } return unsafeAbs(pathname), nil } @@ -90,7 +93,7 @@ func (a *Absolute) GobEncode() ([]byte, error) { func (a *Absolute) GobDecode(data []byte) error { pathname := string(data) if !path.IsAbs(pathname) { - return &AbsoluteError{pathname} + return AbsoluteError(pathname) } a.pathname = unique.Make(pathname) return nil @@ -108,7 +111,7 @@ func (a *Absolute) UnmarshalJSON(data []byte) error { return err } if !path.IsAbs(pathname) { - return &AbsoluteError{pathname} + return AbsoluteError(pathname) } a.pathname = unique.Make(pathname) return nil diff --git a/container/check/absolute_test.go b/container/check/absolute_test.go index 107407f3..25592a71 100644 --- a/container/check/absolute_test.go +++ b/container/check/absolute_test.go @@ -31,8 +31,8 @@ func TestAbsoluteError(t *testing.T) { }{ {"EINVAL", new(AbsoluteError), syscall.EINVAL, true}, {"not EINVAL", new(AbsoluteError), syscall.EBADE, false}, - {"ne val", new(AbsoluteError), &AbsoluteError{Pathname: "etc"}, false}, - {"equals", &AbsoluteError{Pathname: "etc"}, &AbsoluteError{Pathname: "etc"}, true}, + {"ne val", new(AbsoluteError), AbsoluteError("etc"), false}, + {"equals", AbsoluteError("etc"), AbsoluteError("etc"), true}, } for _, tc := range testCases { @@ -45,7 +45,7 @@ func TestAbsoluteError(t *testing.T) { t.Parallel() want := `path "etc" is not absolute` - if got := (&AbsoluteError{Pathname: "etc"}).Error(); got != want { + if got := (AbsoluteError("etc")).Error(); got != want { t.Errorf("Error: %q, want %q", got, want) } }) @@ -62,8 +62,8 @@ func TestNewAbs(t *testing.T) { wantErr error }{ {"good", "/etc", MustAbs("/etc"), nil}, - {"not absolute", "etc", nil, &AbsoluteError{Pathname: "etc"}}, - {"zero", "", nil, &AbsoluteError{Pathname: ""}}, + {"not absolute", "etc", nil, AbsoluteError("etc")}, + {"zero", "", nil, AbsoluteError("")}, } for _, tc := range testCases { @@ -84,7 +84,7 @@ func TestNewAbs(t *testing.T) { t.Parallel() defer func() { - wantPanic := &AbsoluteError{Pathname: "etc"} + wantPanic := AbsoluteError("etc") if r := recover(); !reflect.DeepEqual(r, wantPanic) { t.Errorf("MustAbs: panic = %v; want %v", r, wantPanic) @@ -175,7 +175,7 @@ func TestCodecAbsolute(t *testing.T) { `"/etc"`, `{"val":"/etc","magic":3236757504}`}, {"not absolute", nil, - &AbsoluteError{Pathname: "etc"}, + AbsoluteError("etc"), "\t\x7f\x05\x01\x02\xff\x82\x00\x00\x00\a\xff\x80\x00\x03etc", ",\xff\x83\x03\x01\x01\x06sCheck\x01\xff\x84\x00\x01\x02\x01\bPathname\x01\xff\x80\x00\x01\x05Magic\x01\x06\x00\x00\x00\t\x7f\x05\x01\x02\xff\x82\x00\x00\x00\x0f\xff\x84\x01\x03etc\x01\xfb\x01\x81\xda\x00\x00\x00", -- cgit v1.3.1