From e6545a24b2ba04deec37b18ad24eb05fc7e2a3ff Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Thu, 21 Dec 2017 17:33:27 -0800 Subject: [PATCH] fix truncating when already at the correct size fixes #4518 License: MIT Signed-off-by: Steven Allen --- mfs/mfs_test.go | 25 +++++++++++++++++++++++++ unixfs/mod/dagmodifier.go | 3 +++ 2 files changed, 28 insertions(+) diff --git a/mfs/mfs_test.go b/mfs/mfs_test.go index 228c5bdc03e..42a87fde46d 100644 --- a/mfs/mfs_test.go +++ b/mfs/mfs_test.go @@ -1111,3 +1111,28 @@ func TestFileDescriptors(t *testing.T) { t.Fatal(err) } } + +func TestTruncateAtSize(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + ds, rt := setupRoot(ctx, t) + + dir := rt.GetDirectory() + + nd := dag.NodeWithData(ft.FilePBData(nil, 0)) + fi, err := NewFile("test", nd, dir, ds) + if err != nil { + t.Fatal(err) + } + + fd, err := fi.Open(OpenReadWrite, true) + if err != nil { + t.Fatal(err) + } + defer fd.Close() + _, err = fd.Write([]byte("test")) + if err != nil { + t.Fatal(err) + } + fd.Truncate(4) +} diff --git a/unixfs/mod/dagmodifier.go b/unixfs/mod/dagmodifier.go index 0a1ae0a9647..28de7228d61 100644 --- a/unixfs/mod/dagmodifier.go +++ b/unixfs/mod/dagmodifier.go @@ -481,6 +481,9 @@ func (dm *DagModifier) Truncate(size int64) error { if err != nil { return err } + if size == int64(realSize) { + return nil + } // Truncate can also be used to expand the file if size > int64(realSize) {