From d41b9d2d9ceb60ceb601af991441e70929801c42 Mon Sep 17 00:00:00 2001 From: Ophestra Umiker Date: Wed, 9 Oct 2024 23:51:15 +0900 Subject: ldd: separate Parse from Exec and trim space Signed-off-by: Ophestra Umiker --- ldd/ldd.go | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) (limited to 'ldd/ldd.go') diff --git a/ldd/ldd.go b/ldd/ldd.go index 989aeca5..6c2aec30 100644 --- a/ldd/ldd.go +++ b/ldd/ldd.go @@ -1,49 +1,31 @@ package ldd import ( - "errors" "fmt" "math" - "os" - "os/exec" "path" "strconv" "strings" ) -var ( - ErrUnexpectedSeparator = errors.New("unexpected separator") - ErrPathNotAbsolute = errors.New("path not absolute") - ErrBadLocationFormat = errors.New("bad location format") -) - type Entry struct { Name string `json:"name,omitempty"` Path string `json:"path,omitempty"` Location uint64 `json:"location"` } -func Exec(p string) ([]*Entry, error) { - t := exec.Command("ldd", p) - t.Stdout = new(strings.Builder) - t.Stderr = os.Stderr - - if err := t.Run(); err != nil { - return nil, err - } - - out := t.Stdout.(fmt.Stringer).String() - payload := strings.Split(out, "\n") - +func Parse(stdout fmt.Stringer) ([]*Entry, error) { + payload := strings.Split(strings.TrimSpace(stdout.String()), "\n") result := make([]*Entry, len(payload)) for i, ent := range payload { if len(ent) == 0 { - continue + return nil, ErrUnexpectedNewline } segment := strings.SplitN(ent, " ", 5) + // location index var iL int switch len(segment) { @@ -63,7 +45,7 @@ func Exec(p string) ([]*Entry, error) { Path: segment[2], } default: - return nil, &EntryUnexpectedSegmentsError{ent} + return nil, EntryUnexpectedSegmentsError(ent) } if loc, err := parseLocation(segment[iL]); err != nil { -- cgit v1.3.1