| 
					
				 | 
			
			
				@@ -72,8 +72,11 @@ BSD_TO_LINUX_FLAGS = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def set_flags(path, bsd_flags, fd=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if fd is None and stat.S_ISLNK(os.lstat(path).st_mode): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if fd is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        st = os.stat(path, follow_symlinks=False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if stat.S_ISBLK(st.st_mode) or stat.S_ISCHR(st.st_mode) or stat.S_ISLNK(st.st_mode): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # see comment in get_flags() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cdef int flags = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for bsd_flag, linux_flag in BSD_TO_LINUX_FLAGS.items(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if bsd_flags & bsd_flag: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -92,6 +95,10 @@ def set_flags(path, bsd_flags, fd=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def get_flags(path, st): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if stat.S_ISBLK(st.st_mode) or stat.S_ISCHR(st.st_mode) or stat.S_ISLNK(st.st_mode): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # avoid opening devices files - trying to open non-present devices can be rather slow. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # avoid opening symlinks, O_NOFOLLOW would make the open() fail anyway. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cdef int linux_flags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         fd = os.open(path, os.O_RDONLY|os.O_NONBLOCK|os.O_NOFOLLOW) 
			 |