Skip to content

Commit

Permalink
refactor file method, failing test
Browse files Browse the repository at this point in the history
  • Loading branch information
soypat committed Jan 22, 2024
1 parent ba90754 commit bef2ad5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 5 deletions.
6 changes: 4 additions & 2 deletions fat.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ const (
bootsectorstatusDiskError
)

func (fsys *FS) f_read(fp *File, buff []byte) (br int, res fileResult) {
func (fp *File) f_read(buff []byte) (br int, res fileResult) {
fsys := fp.obj.fs
fsys.trace("f_read", slog.Int("len", len(buff)))
rbuff := buff
if fp.flag&faRead == 0 {
Expand Down Expand Up @@ -289,7 +290,8 @@ func (fsys *FS) f_read(fp *File, buff []byte) (br int, res fileResult) {
return br, frOK
}

func (fsys *FS) f_close(fp *File) fileResult {
func (fp *File) f_close() fileResult {
fsys := fp.obj.fs
fsys.trace("f_close")
fr := fsys.f_sync(fp)
if fr != frOK {
Expand Down
50 changes: 47 additions & 3 deletions fat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ import (
)

func ExampleRead() {
const (
filename = "test.txt\x00"
data = "abc123"
)
var fs FS
log := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
Level: slogLevelTrace,
Expand All @@ -21,12 +25,52 @@ func ExampleRead() {
}
var fp File

fr = fs.f_open(&fp, "test.txt\x00", faRead|faWrite|faCreateNew)
fr = fs.f_open(&fp, filename, faRead|faWrite|faCreateNew)
if fr != frOK {
log.Error("open failed:" + fr.Error())
log.Error("open for write failed:" + fr.Error())
return
}
fmt.Println("opened file OK!")

n, fr := fp.f_write([]byte(data))
if fr != frOK {
log.Error("write failed:" + fr.Error())
return
}
if n != len(data) {
log.Error("write failed: short write")
return
}
fmt.Printf("start file data: %q...\n", string(dev.buf[fp.sect*512:][:20]))
fr = fp.f_close()
if fr != frOK {
log.Error("close failed:" + fr.Error())
return
}
fmt.Printf("start file data: %q...\n", string(dev.buf[fp.sect*512:][:20]))
// Read back data.
fr = fs.f_open(&fp, filename, faRead)
if fr != frOK {
log.Error("open for read failed:" + fr.Error())
return
}
buf := make([]byte, len(data))
n, fr = fp.f_read(buf)
if fr != frOK {
log.Error("read failed:" + fr.Error())
return
}
got := string(buf[:n])
if got != data {
log.Error("read failed", slog.String("got", got), slog.String("want", data))
return
}
fr = fp.f_close()
if fr != frOK {
log.Error("close failed:" + fr.Error())
return
}
fmt.Println("wrote and read back file OK!")
// Output: wrote and read back file OK!
}

func DefaultFATByteBlocks(numBlocks int) *BytesBlocks {
Expand Down

0 comments on commit bef2ad5

Please sign in to comment.