mirror of
https://github.com/tjboldt/ProDOS-Utilities.git
synced 2024-09-27 16:56:22 +00:00
Improve error handling and fix putall command
This commit is contained in:
parent
ab3b397139
commit
492da00b64
5
main.go
5
main.go
@ -107,8 +107,9 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
fileInfo, err := os.Stat(fileName)
|
||||||
|
|
||||||
err = prodos.WriteFileFromFile(file, pathName, fileType, auxType, inFileName)
|
err = prodos.WriteFileFromFile(file, pathName, fileType, auxType, fileInfo.ModTime(), inFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to write file %s", err)
|
fmt.Printf("Failed to write file %s", err)
|
||||||
}
|
}
|
||||||
@ -149,7 +150,7 @@ func main() {
|
|||||||
defer file.Close()
|
defer file.Close()
|
||||||
prodos.CreateVolume(file, volumeName, volumeSize)
|
prodos.CreateVolume(file, volumeName, volumeSize)
|
||||||
case "putall":
|
case "putall":
|
||||||
file, err := os.Create(fileName)
|
file, err := os.OpenFile(fileName, os.O_RDWR, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed to create file: %s\n", err)
|
fmt.Printf("failed to create file: %s\n", err)
|
||||||
return
|
return
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
package prodos
|
package prodos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,6 +18,10 @@ func ReadBlock(reader io.ReaderAt, block int) ([]byte, error) {
|
|||||||
buffer := make([]byte, 512)
|
buffer := make([]byte, 512)
|
||||||
|
|
||||||
_, err := reader.ReadAt(buffer, int64(block)*512)
|
_, err := reader.ReadAt(buffer, int64(block)*512)
|
||||||
|
if err != nil {
|
||||||
|
errString := fmt.Sprintf("failed to read block %04X: %s", block, err.Error())
|
||||||
|
err = errors.New(errString)
|
||||||
|
}
|
||||||
|
|
||||||
return buffer, err
|
return buffer, err
|
||||||
}
|
}
|
||||||
@ -23,5 +29,10 @@ func ReadBlock(reader io.ReaderAt, block int) ([]byte, error) {
|
|||||||
// WriteBlock writes a block to a ProDOS volume from a byte array
|
// WriteBlock writes a block to a ProDOS volume from a byte array
|
||||||
func WriteBlock(writer io.WriterAt, block int, buffer []byte) error {
|
func WriteBlock(writer io.WriterAt, block int, buffer []byte) error {
|
||||||
_, err := writer.WriteAt(buffer, int64(block)*512)
|
_, err := writer.WriteAt(buffer, int64(block)*512)
|
||||||
|
if err != nil {
|
||||||
|
errString := fmt.Sprintf("failed to write block %04X: %s", block, err.Error())
|
||||||
|
err = errors.New(errString)
|
||||||
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ func LoadFile(reader io.ReaderAt, path string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WriteFile writes a file to a ProDOS volume from a byte array
|
// WriteFile writes a file to a ProDOS volume from a byte array
|
||||||
func WriteFile(readerWriter ReaderWriterAt, path string, fileType int, auxType int, buffer []byte) error {
|
func WriteFile(readerWriter ReaderWriterAt, path string, fileType int, auxType int, createdTime time.Time, modifiedTime time.Time, buffer []byte) error {
|
||||||
directory, fileName := GetDirectoryAndFileNameFromPath(path)
|
directory, fileName := GetDirectoryAndFileNameFromPath(path)
|
||||||
|
|
||||||
existingFileEntry, _ := GetFileEntry(readerWriter, path)
|
existingFileEntry, _ := GetFileEntry(readerWriter, path)
|
||||||
@ -85,8 +85,8 @@ func WriteFile(readerWriter ReaderWriterAt, path string, fileType int, auxType i
|
|||||||
}
|
}
|
||||||
fileEntry.FileName = fileName
|
fileEntry.FileName = fileName
|
||||||
fileEntry.BlocksUsed = len(blockList)
|
fileEntry.BlocksUsed = len(blockList)
|
||||||
fileEntry.CreationTime = time.Now()
|
fileEntry.CreationTime = createdTime
|
||||||
fileEntry.ModifiedTime = time.Now()
|
fileEntry.ModifiedTime = modifiedTime
|
||||||
fileEntry.AuxType = auxType
|
fileEntry.AuxType = auxType
|
||||||
fileEntry.EndOfFile = len(buffer)
|
fileEntry.EndOfFile = len(buffer)
|
||||||
fileEntry.FileType = fileType
|
fileEntry.FileType = fileType
|
||||||
|
@ -8,9 +8,11 @@ package prodos
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddFilesFromHostDirectory fills the root volume with files
|
// AddFilesFromHostDirectory fills the root volume with files
|
||||||
@ -30,8 +32,8 @@ func AddFilesFromHostDirectory(
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !file.IsDir() && info.Size() > 0 && info.Size() <= 0x1000000 {
|
if file.Name()[0] != '.' && !file.IsDir() && info.Size() > 0 && info.Size() <= 0x1000000 {
|
||||||
err = WriteFileFromFile(readerWriter, "", 0, 0, filepath.Join(directory, file.Name()))
|
err = WriteFileFromFile(readerWriter, "", 0, 0, info.ModTime(), filepath.Join(directory, file.Name()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -42,15 +44,18 @@ func AddFilesFromHostDirectory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WriteFileFromFile writes a file to a ProDOS volume from a host file
|
// WriteFileFromFile writes a file to a ProDOS volume from a host file
|
||||||
func WriteFileFromFile(readerWriter ReaderWriterAt, pathName string, fileType int, auxType int, inFileName string) error {
|
func WriteFileFromFile(readerWriter ReaderWriterAt, pathName string, fileType int, auxType int, modifiedTime time.Time, inFileName string) error {
|
||||||
|
fmt.Printf("WriteFileFromFile: %s\n", inFileName)
|
||||||
inFile, err := os.ReadFile(inFileName)
|
inFile, err := os.ReadFile(inFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fmt.Println("failed to read file")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if auxType == 0 && fileType == 0 {
|
if auxType == 0 && fileType == 0 {
|
||||||
auxType, fileType, inFile, err = convertFileByType(inFileName, inFile)
|
auxType, fileType, inFile, err = convertFileByType(inFileName, inFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fmt.Println("failed to convert file")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,7 +72,7 @@ func WriteFileFromFile(readerWriter ReaderWriterAt, pathName string, fileType in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return WriteFile(readerWriter, pathName, fileType, auxType, inFile)
|
return WriteFile(readerWriter, pathName, fileType, auxType, time.Now(), modifiedTime, inFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertFileByType(inFileName string, inFile []byte) (int, int, []byte, error) {
|
func convertFileByType(inFileName string, inFile []byte) (int, int, []byte, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user