Support O_TRUNC flag to MemMapFs.OpenFile To truncate an existing file when opening.
diff --git a/fs_test.go b/fs_test.go index bdbdc7e..63cdc33 100644 --- a/fs_test.go +++ b/fs_test.go
@@ -100,6 +100,17 @@ t.Errorf("%v: appending, expected '%v', got: '%v'", fs.Name(), expectedContents, string(contents)) } f.Close() + + f, err = fs.OpenFile(path, os.O_RDWR|os.O_TRUNC, 0600) + if err != nil { + t.Error(fs.Name(), "OpenFile (O_TRUNC) failed:", err) + continue + } + contents, _ = ioutil.ReadAll(f) + if string(contents) != "" { + t.Errorf("%v: expected truncated file, got: '%v'", fs.Name(), string(contents)) + } + f.Close() } }
diff --git a/memmap.go b/memmap.go index 686d0e6..2046063 100644 --- a/memmap.go +++ b/memmap.go
@@ -219,6 +219,13 @@ return nil, err } } + if flag&os.O_TRUNC > 0 && flag&(os.O_RDWR|os.O_WRONLY) > 0 { + err = file.Truncate(0) + if err != nil { + file.Close() + return nil, err + } + } return file, nil }