From 2d4783856dffafc91b9aa007c3dd922dea12599b Mon Sep 17 00:00:00 2001
From: Sergey Matveev <stargrave@stargrave.org>
Date: Thu, 13 Apr 2023 18:06:48 +0300
Subject: [PATCH] Ability to feed data to stdin

---
 cmd/meta4-create/main.go | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/cmd/meta4-create/main.go b/cmd/meta4-create/main.go
index 2c3a5ff..ea0a776 100644
--- a/cmd/meta4-create/main.go
+++ b/cmd/meta4-create/main.go
@@ -29,7 +29,6 @@ import (
 	"io"
 	"log"
 	"os"
-	"path/filepath"
 	"sync"
 	"time"
 
@@ -86,34 +85,31 @@ func (h *MultiHasher) Write(p []byte) (n int, err error) {
 }
 
 func main() {
-	file := flag.String("file", "", "Path to file")
+	fn := flag.String("fn", "", "Filename")
 	mtime := flag.String("mtime", "", "Take that file's mtime as a Published date")
 	desc := flag.String("desc", "", "Description")
 	sig := flag.String("sig", "", "Path to signature file")
 	torrent := flag.String("torrent", "", "Torrent URL")
 	log.SetFlags(log.Lshortfile)
 	flag.Parse()
+	if *fn == "" {
+		log.Fatalln("empty -fn")
+	}
 	urls := make([]meta4ra.URL, 0, len(flag.Args()))
 	for _, u := range flag.Args() {
 		urls = append(urls, meta4ra.URL{URL: u})
 	}
-	fd, err := os.Open(*file)
-	if err != nil {
-		log.Fatalln(err)
-	}
-	fi, err := fd.Stat()
-	if err != nil {
-		log.Fatalln(err)
-	}
+	br := bufio.NewReaderSize(os.Stdin, 1<<20)
 	buf := make([]byte, 1<<20)
 	h := NewMultiHasher()
-	if _, err = io.CopyBuffer(h, bufio.NewReader(fd), buf); err != nil {
+	size, err := io.CopyBuffer(h, br, buf)
+	if err != nil {
 		log.Fatalln(err)
 	}
 	f := meta4ra.File{
-		Name:        filepath.Base(*file),
+		Name:        *fn,
 		Description: *desc,
-		Size:        uint64(fi.Size()),
+		Size:        uint64(size),
 		URLs:        urls,
 		Hashes: []meta4ra.Hash{
 			{Type: meta4ra.HashSHA256, Hash: hex.EncodeToString(h.sha256h.Sum(nil))},
-- 
2.51.0