]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: make read_file check read(2) result code
authorSage Weil <sage@newdream.net>
Wed, 25 Mar 2009 22:36:39 +0000 (15:36 -0700)
committerSage Weil <sage@newdream.net>
Wed, 25 Mar 2009 23:46:07 +0000 (16:46 -0700)
src/config.cc

index 7be31b2edefce6e4d999f813d15d9fbb6aaaee98..35b4c531078f56f6eb5681cc1cba13435f52178c 100644 (file)
@@ -64,10 +64,18 @@ int buffer::list::read_file(const char *fn)
   ::fstat(fd, &st);
   int s = ROUND_UP_TO(st.st_size, PAGE_SIZE);
   bufferptr bp = buffer::create_page_aligned(s);
-  bp.set_length(st.st_size);
-  append(bp);
-  ::read(fd, (void*)c_str(), length());
+  int left = st.st_size;
+  int got = 0;
+  while (left > 0) {
+    int r = ::read(fd, (void *)(c_str() + got), left);
+    if (r <= 0)
+      break;
+    got += r;
+    left -= r;
+  }
   ::close(fd);
+  bp.set_length(got);
+  append(bp);
   return 0;
 }