Merge pull request #93 from moorereason/no-defer-on-err

Immediately check for errors on fs.Open
diff --git a/afero_test.go b/afero_test.go
index 26e23cd..fee91f9 100644
--- a/afero_test.go
+++ b/afero_test.go
@@ -394,13 +394,13 @@
 		}
 
 		f2, err := fs.Open(f.Name())
+		if err != nil {
+			t.Fatalf("%v: ReadFile %s: %v", fs.Name(), f.Name(), err)
+		}
 		defer f2.Close()
 		buf := new(bytes.Buffer)
 		buf.ReadFrom(f2)
 		b := buf.Bytes()
-		if err != nil {
-			t.Fatalf("%v: ReadFile %s: %v", fs.Name(), f.Name(), err)
-		}
 		if string(b) != "hello, WORLD\n" {
 			t.Fatalf("after write: have %q want %q", string(b), "hello, WORLD\n")
 		}
diff --git a/util.go b/util.go
index cec6f8f..2f44e6a 100644
--- a/util.go
+++ b/util.go
@@ -295,10 +295,10 @@
 	}
 	if fi.IsDir() {
 		f, err := fs.Open(path)
-		defer f.Close()
 		if err != nil {
 			return false, err
 		}
+		defer f.Close()
 		list, err := f.Readdir(-1)
 		return len(list) == 0, nil
 	}