[Patch]: Truncate

Corinna Vinschen vinschen@redhat.com
Sat Aug 28 09:37:00 GMT 2004


Hi Pierre,

On Aug 27 21:42, Pierre A. Humblet wrote:
> At 01:00 PM 8/23/2004 +0200, Corinna Vinschen wrote:
> >Except for this comment, which isn't valid (see above), please check it in.
> 
> Done. But here is another simple patch taking care of your concern that
> we can fail while zero filling, leaving the file system filled to capacity.
> 
> 2004-08-28  Pierre Humblet <pierre.humblet@ieee.org>
> 
> 	* fhandler.cc (fhandler_base::write): In the lseek_bug case, set EOF
> 	before zero filling. Combine similar error handling statements. 

the first part of the patch is ok, but somehow the new `goto' looks
somewhat weird to me.  What about this instead:

Index: fhandler.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler.cc,v
retrieving revision 1.203
diff -u -p -r1.203 fhandler.cc
--- fhandler.cc	19 Aug 2004 15:47:51 -0000	1.203
+++ fhandler.cc	28 Aug 2004 09:36:04 -0000
@@ -825,26 +825,24 @@ fhandler_base::write (const void *ptr, s
 		  DWORD zeros_this_time = (number_of_zeros_to_write > 512
 					 ? 512 : number_of_zeros_to_write);
 		  DWORD written;
-		  if (!WriteFile (get_output_handle (), zeros, zeros_this_time,
-				  &written, NULL))
+		  DWORD ret = WriteFile (get_output_handle (), zeros,
+					 zeros_this_time, &written, NULL);
+		  if (!ret || written < zeros_this_time)
 		    {
-		      __seterrno ();
-		      if (get_errno () == EPIPE)
-			raise (SIGPIPE);
+		      if (!ret)
+		        {
+			  __seterrno ();
+			  if (get_errno () == EPIPE)
+			    raise (SIGPIPE);
+			}
+		      else
+			set_errno (ENOSPC);
 		      /* This might fail, but it's the best we can hope for */
 		      SetFilePointer (get_output_handle (), current_position, NULL,
 				      FILE_BEGIN);
 		      return -1;
 
 		    }
-		  if (written < zeros_this_time) /* just in case */
-		    {
-		      set_errno (ENOSPC);
-		      /* This might fail, but it's the best we can hope for */
-		      SetFilePointer (get_output_handle (), current_position, NULL,
-				      FILE_BEGIN);
-		      return -1;
-		    }
 		  number_of_zeros_to_write -= written;
 		}
 	    }

Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          mailto:cygwin@cygwin.com
Red Hat, Inc.



More information about the Cygwin-patches mailing list