Show More
@@ -858,23 +858,34 b' class opener(object):' | |||
|
858 | 858 | mode += "b" # for that other OS |
|
859 | 859 | |
|
860 | 860 | nlink = -1 |
|
861 | if mode not in ("r", "rb"): | |
|
861 | st_mode = None | |
|
862 | dirname, basename = os.path.split(f) | |
|
863 | # If basename is empty, then the path is malformed because it points | |
|
864 | # to a directory. Let the posixfile() call below raise IOError. | |
|
865 | if basename and mode not in ('r', 'rb'): | |
|
866 | if atomictemp: | |
|
867 | if not os.path.isdir(dirname): | |
|
868 | makedirs(dirname, self.createmode) | |
|
869 | return atomictempfile(f, mode, self.createmode) | |
|
862 | 870 | try: |
|
871 | if 'w' in mode: | |
|
872 | st_mode = os.lstat(f).st_mode & 0777 | |
|
873 | os.unlink(f) | |
|
874 | nlink = 0 | |
|
875 | else: | |
|
863 | 876 | nlink = nlinks(f) |
|
864 | 877 | except OSError: |
|
865 | 878 | nlink = 0 |
|
866 |
|
|
|
867 | # Avoid calling makedirs when the path points to a | |
|
868 | # directory -- the open will raise IOError below. | |
|
869 | if basename and not os.path.isdir(dirname): | |
|
879 | if not os.path.isdir(dirname): | |
|
870 | 880 | makedirs(dirname, self.createmode) |
|
871 | if atomictemp: | |
|
872 | return atomictempfile(f, mode, self.createmode) | |
|
873 | 881 | if nlink > 1: |
|
874 | 882 | rename(mktempcopy(f), f) |
|
875 | 883 | fp = posixfile(f, mode) |
|
876 | 884 | if nlink == 0: |
|
885 | if st_mode is None: | |
|
877 | 886 | self._fixfilemode(f) |
|
887 | else: | |
|
888 | os.chmod(f, st_mode) | |
|
878 | 889 | return fp |
|
879 | 890 | |
|
880 | 891 | def symlink(self, src, dst): |
General Comments 0
You need to be logged in to leave comments.
Login now