From a32b7e4693f181d2dffcb76f2dfb2992d462ff9d Mon Sep 17 00:00:00 2001 From: skidoodle Date: Sat, 31 Jan 2026 03:33:36 +0100 Subject: [PATCH] Use TokenCounter and correct unsafe pointer usage Record write errors in TokenCounter.Printf and add Println method to propagate write failures. Route file-read warnings to stderr instead of mixing them into token output. Use unsafe.Add with a base pointer when computing the drop target on Windows. --- clipboard/windows.go | 6 ++++-- output.go | 24 ++++++++++++------------ token.go | 9 ++++++++- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/clipboard/windows.go b/clipboard/windows.go index c17766a..aed94ea 100644 --- a/clipboard/windows.go +++ b/clipboard/windows.go @@ -62,11 +62,13 @@ func CopyFile(path string) error { return fmt.Errorf("GlobalLock failed") } - df := (*dropFiles)(unsafe.Pointer(ptrVal)) + basePtr := unsafe.Pointer(ptrVal) + + df := (*dropFiles)(basePtr) df.pFiles = dropSize df.fWide = 1 - targetPtr := unsafe.Pointer(ptrVal + uintptr(dropSize)) + targetPtr := unsafe.Add(basePtr, dropSize) srcSlice := unsafe.Slice((*uint16)(unsafe.Pointer(&pathUTF16[0])), len(pathUTF16)) dstSlice := unsafe.Slice((*uint16)(targetPtr), len(pathUTF16)) diff --git a/output.go b/output.go index e87032b..d637a07 100644 --- a/output.go +++ b/output.go @@ -30,19 +30,19 @@ func writeOutput(root string, files []string, outputPath string) (count int64, e tc := &TokenCounter{w: bw} - fmt.Fprintf(tc, "Project Path: %s\n\n", filepath.Base(root)) - fmt.Fprintln(tc, "Source Tree:") - fmt.Fprintln(tc, "") + tc.Printf("Project Path: %s\n\n", filepath.Base(root)) + tc.Println("Source Tree:") + tc.Println("") - fmt.Fprintln(tc, "```txt") - fmt.Fprintln(tc, filepath.Base(root)) + tc.Println("```txt") + tc.Println(filepath.Base(root)) if err := writeTree(tc, files); err != nil { return 0, err } - fmt.Fprintln(tc, "```") - fmt.Fprintln(tc, "") + tc.Println("```") + tc.Println("") for _, file := range files { if file == outputPath || filepath.Base(file) == outputPath { @@ -52,7 +52,7 @@ func writeOutput(root string, files []string, outputPath string) (count int64, e fullPath := filepath.Join(root, file) content, err := os.ReadFile(fullPath) if err != nil { - fmt.Fprintf(tc, "Error reading %s: %v\n", file, err) + fmt.Fprintf(os.Stderr, "ctx: warning: skipping %s: %v\n", file, err) continue } @@ -61,8 +61,8 @@ func writeOutput(root string, files []string, outputPath string) (count int64, e ext = "txt" } - fmt.Fprintf(tc, "`%s`:\n\n", file) - fmt.Fprintf(tc, "```%s\n", ext) + tc.Printf("`%s`:\n\n", file) + tc.Printf("```%s\n", ext) if _, err := tc.Write(content); err != nil { return 0, err @@ -73,8 +73,8 @@ func writeOutput(root string, files []string, outputPath string) (count int64, e return 0, err } } - fmt.Fprintln(tc, "```") - fmt.Fprintln(tc, "") + tc.Println("```") + tc.Println("") } return tc.Count, tc.Err diff --git a/token.go b/token.go index b364986..9cf4f52 100644 --- a/token.go +++ b/token.go @@ -89,5 +89,12 @@ func (tc *TokenCounter) Printf(format string, a ...any) { if tc.Err != nil { return } - fmt.Fprintf(tc, format, a...) + _, tc.Err = fmt.Fprintf(tc, format, a...) +} + +func (tc *TokenCounter) Println(a ...any) { + if tc.Err != nil { + return + } + _, tc.Err = fmt.Fprintln(tc, a...) }