Merge pull request #22 from mbertschler/fix-rename

Fix MemMapFs.Rename()
diff --git a/fs_test.go b/fs_test.go
index 0097335..79cda90 100644
--- a/fs_test.go
+++ b/fs_test.go
@@ -143,6 +143,22 @@
 		if err != nil {
 			t.Fatalf("rename %q, %q failed: %v", to, from, err)
 		}
+		names, err := readDirNames(testDir, fs)
+		if err != nil {
+			t.Fatalf("readDirNames error: %v", err)
+		}
+		found := false
+		for _, e := range names {
+			if e == "renamefrom" {
+				t.Error("File is still called renamefrom")
+			}
+			if e == "renameto" {
+				found = true
+			}
+		}
+		if !found {
+			t.Error("File was not renamed to renameto")
+		}
 		defer fs.Remove(to)
 		_, err = fs.Stat(to)
 		if err != nil {
@@ -512,9 +528,6 @@
 }
 
 func findNames(t *testing.T, root, sub []string, fs Fs) {
-	t.Logf("Names root: %v", root)
-	t.Logf("Names sub: %v", sub)
-
 	var foundRoot bool
 	for _, e := range root {
 		_, err := fs.Open(path.Join(testDir, e))
@@ -526,6 +539,8 @@
 		}
 	}
 	if !foundRoot {
+		t.Logf("Names root: %v", root)
+		t.Logf("Names sub: %v", sub)
 		t.Error("Didn't find subdirectory we")
 	}
 
@@ -544,9 +559,13 @@
 	}
 
 	if !found1 {
+		t.Logf("Names root: %v", root)
+		t.Logf("Names sub: %v", sub)
 		t.Error("Didn't find testfile1")
 	}
 	if !found2 {
+		t.Logf("Names root: %v", root)
+		t.Logf("Names sub: %v", sub)
 		t.Error("Didn't find testfile2")
 	}
 }
diff --git a/memmap.go b/memmap.go
index 8a0e3be..3bf85f7 100644
--- a/memmap.go
+++ b/memmap.go
@@ -293,8 +293,12 @@
 		if _, ok := m.getData()[newname]; !ok {
 			m.runlock()
 			m.lock()
-			m.getData()[newname] = m.getData()[oldname]
+			m.unRegisterWithParent(oldname)
+			file := m.getData()[oldname].(*InMemoryFile)
 			delete(m.getData(), oldname)
+			file.name = newname
+			m.getData()[newname] = file
+			m.registerWithParent(file)
 			m.unlock()
 			m.rlock()
 		} else {