Use less syscalls
authorWouter Verhelst <w@uter.be>
Wed, 21 Mar 2012 11:12:49 +0000 (12:12 +0100)
committerWouter Verhelst <w@uter.be>
Wed, 21 Mar 2012 11:12:49 +0000 (12:12 +0100)
If we've just done ftruncate, then either we were successful and know
the new file size (and then we don't need an lseek), or we weren't and
then we need to error out anyway.

Doing things this way also avoids another warning in the code.

nbd-server.c

index 3f2154f88bcf4f26eb75e074d7429e12031c7221..fd44659dd632787c41788571f0da27bab964cd3c 100644 (file)
@@ -1871,11 +1871,11 @@ void setupexport(CLIENT* client) {
 
                /* If we created the file, it will be length zero */
                if (!lastsize && cancreate) {
-                       /* we can ignore errors as we recalculate the size */
-                       ftruncate (fi.fhandle, client->server->expected_size);
-                       lastsize = size_autodetect(fi.fhandle);
-                       if (lastsize != client->server->expected_size)
-                               err("Could not expand file");
+                       assert(!multifile);
+                       if(ftruncate (fi.fhandle, client->server->expected_size)<0) {
+                               err("Could not expand file: %m");
+                       }
+                       lastsize = client->server->expected_size;
                        break; /* don't look for any more files */
                }