Imported Upstream version 1.6.7
[platform/upstream/cryptsetup.git] / lib / utils.c
index eef7891..a5aec70 100644 (file)
@@ -1,13 +1,15 @@
 /*
  * utils - miscellaneous device utilities for cryptsetup
  *
- * Copyright (C) 2004, Christophe Saout <christophe@saout.de>
+ * Copyright (C) 2004, Jana Saout <jana@saout.de>
  * Copyright (C) 2004-2007, Clemens Fruhwirth <clemens@endorphin.org>
  * Copyright (C) 2009-2012, Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2009-2012, Milan Broz
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -97,9 +99,12 @@ ssize_t write_blockwise(int fd, int bsize, void *orig_buf, size_t count)
                        goto out;
 
                r = read(fd, hangover_buf, bsize);
-               if (r < 0 || r != bsize)
+               if (r < 0 || r < hangover)
                        goto out;
 
+               if (r < bsize)
+                       bsize = r;
+
                r = lseek(fd, -bsize, SEEK_CUR);
                if (r < 0)
                        goto out;