Fix potential data-loss in utils.WriteFile
authorIustin Pop <iustin@google.com>
Wed, 27 Apr 2011 11:45:57 +0000 (13:45 +0200)
committerIustin Pop <iustin@google.com>
Wed, 27 Apr 2011 15:26:25 +0000 (17:26 +0200)
commit437c3e77fb35bec7ab902873fa31d6225f8602f4
tree5e4c928056b190396d67c844903cbb02f55a2eac
parent2db04578ec4a3ef36ceda3670280519f8483135d
Fix potential data-loss in utils.WriteFile

os.write can do incomplete writes, as long as at least some bytes have
been written (like write(2)):

>>> os.write(fd, " " * 1300)
1300
>>> os.write(fd, " " * 1300)
1300
>>> os.write(fd, " " * 1300)
1300
>>> os.write(fd, " " * 1300)
980
>>> os.write(fd, " " * 1300)
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
OSError: [Errno 28] No space left on device

Note that incomplete write that only wrote 980 bytes, before the
exception.

To workaround this, we simply iterate until all data is
written. Unittests could be written by using a parameter instead of
hardcoding os.write and checking for incomplete writes.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
lib/utils/io.py