package steam import ( "archive/tar" "fmt" "io" "os" "path/filepath" "strings" ) func tarWalkfn(writer *tar.Writer, prefix string) filepath.WalkFunc { return func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil } f, err := os.Open(path) if err != nil { return err } defer f.Close() // Let's strip out all of the leading parts of the path // to create a tarball realative to the root of the steam library tarPth := strings.TrimPrefix(path, prefix) tarPth = strings.ReplaceAll(tarPth, "\\", "/") tarPth = strings.TrimPrefix(tarPth, "/") h := &tar.Header{ Name: tarPth, Size: info.Size(), // I don't like it... but it helps with platform compatibility Mode: 0664, ModTime: info.ModTime(), } err = writer.WriteHeader(h) if err != nil { return err } _, err = io.Copy(writer, f) if err != nil { return fmt.Errorf("While copying %s: %w", path, err) } return nil } }