All checks were successful
Test / Create distribution (push) Successful in 34s
Test / Sandbox (push) Successful in 1m30s
Test / Hakurei (push) Successful in 2m21s
Test / Hpkg (push) Successful in 3m23s
Test / Sandbox (race detector) (push) Successful in 4m1s
Test / Hakurei (race detector) (push) Successful in 4m46s
Test / Flake checks (push) Successful in 1m27s
This package turns out to be much less widely used than anticipated, and might be facing removal. This change makes test cases cleaner. Signed-off-by: Ophestra <cat@gensokyo.uk>
60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package helper
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"syscall"
|
|
)
|
|
|
|
type argsWt [][]byte
|
|
|
|
func (a argsWt) WriteTo(w io.Writer) (int64, error) {
|
|
nt := 0
|
|
for _, arg := range a {
|
|
n, err := w.Write(arg)
|
|
nt += n
|
|
|
|
if err != nil {
|
|
return int64(nt), err
|
|
}
|
|
}
|
|
|
|
return int64(nt), nil
|
|
}
|
|
|
|
func (a argsWt) String() string {
|
|
return string(
|
|
bytes.TrimSuffix(
|
|
bytes.ReplaceAll(
|
|
bytes.Join(a, nil),
|
|
[]byte{0}, []byte{' '},
|
|
),
|
|
[]byte{' '},
|
|
),
|
|
)
|
|
}
|
|
|
|
// NewCheckedArgs returns a checked null-terminated argument writer for a copy of args.
|
|
func NewCheckedArgs(args ...string) (wt io.WriterTo, err error) {
|
|
a := make(argsWt, len(args))
|
|
for i, arg := range args {
|
|
a[i], err = syscall.ByteSliceFromString(arg)
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
wt = a
|
|
return
|
|
}
|
|
|
|
// MustNewCheckedArgs returns a checked null-terminated argument writer for a copy of args.
|
|
// If s contains a NUL byte this function panics instead of returning an error.
|
|
func MustNewCheckedArgs(args ...string) io.WriterTo {
|
|
a, err := NewCheckedArgs(args...)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
return a
|
|
}
|