feat: Add basic content listing code

This commit is contained in:
Felicitas Pojtinger
2021-11-11 21:08:17 +01:00
parent 909115af0f
commit 6fcb20d9fb
3 changed files with 82 additions and 0 deletions

View File

@@ -1,2 +1,13 @@
# stfs
Simple Tape File System, a FUSE based on tar and SQLite for tape drives
## Overview
🚧 This project is a work-in-progress! Instructions will be added as soon as it is usable. 🚧
## License
stfs (c) 2021 Felicitas Pojtinger and contributors
SPDX-License-Identifier: AGPL-3.0

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module github.com/pojntfx/stfs
go 1.17

68
main.go Normal file
View File

@@ -0,0 +1,68 @@
package main
import (
"archive/tar"
"bufio"
"flag"
"fmt"
"io"
"os"
)
func main() {
file := flag.String("file", "/dev/st0", "File (tape drive or tar file) to open")
blockSize := flag.Int("blockSize", 512, "Size of a block in the tar stream")
blockSizeMulitlier := flag.Int("blockSizeMultiplier", 20, "Amount of blocks to read from the tar stream at once")
flag.Parse()
fileDescription, err := os.Stat(*file)
if err != nil {
panic(err)
}
var f *os.File
if fileDescription.Mode().IsRegular() {
f, err = os.Open(*file)
if err != nil {
panic(err)
}
} else {
f, err = os.OpenFile(*file, os.O_RDONLY, os.ModeCharDevice)
if err != nil {
panic(err)
}
}
defer f.Close()
br := bufio.NewReaderSize(f, *blockSize**blockSizeMulitlier)
tr := tar.NewReader(br)
for {
header, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
fmt.Printf(
"%v %v %v %v %v %v %v %v %v\n",
header.Mode,
header.Gname,
header.Uid,
header.Gid,
header.Size,
header.ModTime,
header.AccessTime,
header.ChangeTime,
header.Name,
)
}
}