Handle case that symlink exists at target path for exclusive file creation

- fixes #263
diff --git a/fake_filesystem_test.py b/fake_filesystem_test.py
index 2374f3d..ab4bd0e 100755
--- a/fake_filesystem_test.py
+++ b/fake_filesystem_test.py
@@ -2759,6 +2759,16 @@
         self.assertRaisesIOError(errno.EEXIST, self.os.open, file_path,
                                  os.O_RDWR | os.O_EXCL | os.O_CREAT)
 
+    @unittest.skipIf(sys.version_info < (3, 3), 'Exclusive mode new in Python 3.3')
+    def testLowLevelOpenExclusiveRaisesIfSymlinkExists(self):
+        base_path = '/foo/bar'
+        self.filesystem.CreateDirectory(base_path)
+        link_path = base_path + '/link'
+        link_target = base_path + '/link_target'
+        self.os.symlink(link_target, link_path)
+        self.assertRaisesOSError(errno.EEXIST, self.os.open, link_path,
+                                 os.O_CREAT | os.O_WRONLY | os.O_TRUNC | os.O_EXCL)
+
     def testOpenDirectoryRaisesUnderWindows(self):
         self.filesystem.is_windows_fs = True
         dir_path = '/dir'
diff --git a/pyfakefs/fake_filesystem.py b/pyfakefs/fake_filesystem.py
index c086f7d..e15fb96 100644
--- a/pyfakefs/fake_filesystem.py
+++ b/pyfakefs/fake_filesystem.py
@@ -4375,12 +4375,12 @@
             closefd = True
 
         error_class = OSError if self.low_level else IOError
+        if must_not_exist and (file_object or self.filesystem.IsLink(file_path)):
+            raise error_class(errno.EEXIST, 'File exists', file_path)
         if file_object:
             if ((need_read and not file_object.st_mode & PERM_READ) or
                     (need_write and not file_object.st_mode & PERM_WRITE)):
                 raise error_class(errno.EACCES, 'Permission denied', file_path)
-            if must_not_exist:
-                raise error_class(errno.EEXIST, 'File exists', file_path)
             if need_write:
                 if truncate:
                     file_object.SetContents('')