package main import ( "io" "os" "sync/atomic" "gitea.k3s.k0.nu/tools/photocli/internal/photos" ) func runMain(args []string, stdout, stderr *os.File, bridge photos.Bridge) int { return runMainWithSignal(args, stdout, stderr, bridge, defaultSignalChan()) } func runMainWithSignal(args []string, stdout *os.File, stderr io.Writer, bridge photos.Bridge, sigCh <-chan struct{}) int { done := make(chan struct{}) var rc atomic.Int32 go func() { rc.Store(int32(run(args, stdout, stderr, bridge))) close(done) }() select { case <-done: case <-sigCh: bridge.Cancel() stderr.Write([]byte("\nreceived signal, finishing current file...\n")) <-done } return int(rc.Load()) }