diff --git a/common/header_test.go b/common/header_test.go new file mode 100644 index 0000000000000000000000000000000000000000..0a1b176934e644357e00aa4064dd0d0583bc7ff1 --- /dev/null +++ b/common/header_test.go @@ -0,0 +1,46 @@ +package common + +import ( + "fmt" + "testing" + "unsafe" +) + +func TestHeaderPrint(t *testing.T) { + header := Header{} + + infoMsg := ` + header layout info: size: %d, align: %d + field offset size + --------------+--------------+-------- + Tag %03d %d + Version %03d %d + DiskCaps %03d %d + DataBlockSize %03d %d + RangeCaps %03d %d + RangeCoverage %03d %d + RangeOffset %03d %d + HashOffset %03d %d + DataOffset %03d %d + DataCount %03d %d + AllocOffset %03d %d + ResolveOffset %03d %d + Reserved %03d %d + ` + + fmt.Printf(infoMsg, + unsafe.Sizeof(header), unsafe.Alignof(header), + unsafe.Offsetof(header.Tag), unsafe.Sizeof(header.Tag), + unsafe.Offsetof(header.Version), unsafe.Sizeof(header.Version), + unsafe.Offsetof(header.DiskCaps), unsafe.Sizeof(header.DiskCaps), + unsafe.Offsetof(header.DataBlockSize), unsafe.Sizeof(header.DataBlockSize), + unsafe.Offsetof(header.RangeCaps), unsafe.Sizeof(header.RangeCaps), + unsafe.Offsetof(header.RangeCoverage), unsafe.Sizeof(header.RangeCoverage), + unsafe.Offsetof(header.RangeOffset), unsafe.Sizeof(header.RangeOffset), + unsafe.Offsetof(header.HashOffset), unsafe.Sizeof(header.HashOffset), + unsafe.Offsetof(header.DataOffset), unsafe.Sizeof(header.DataOffset), + unsafe.Offsetof(header.DataCount), unsafe.Sizeof(header.DataCount), + unsafe.Offsetof(header.AllocOffset), unsafe.Sizeof(header.AllocOffset), + unsafe.Offsetof(header.ResolveOffset), unsafe.Sizeof(header.ResolveOffset), + unsafe.Offsetof(header.Reserved), unsafe.Sizeof(header.Reserved)) +} \ No newline at end of file diff --git a/yottadisk.go b/yottadisk.go index c5d4ed61047f0d543b9c8b7c9708882137f17981..5c85b1b75389acefad51ba8d71e15f2fde8eaac8 100644 --- a/yottadisk.go +++ b/yottadisk.go @@ -100,8 +100,8 @@ func (disk *YottaDisk) writeData(idx uint32, key ydcommon.IndexTableKey, dataOff return err } - // Update data count. WARNING: use magic number - writer.Seek(48, io.SeekStart) + // Update data count. + writer.Seek((int64)(unsafe.Offsetof(disk.meta.DataCount)), io.SeekStart) _, err = writer.Write(dcBuf.Bytes()) if err != nil { return err