Whamcloud - gitweb
e2fsck: use unsigned values for memory tracking stats
[tools/e2fsprogs.git] / e2fsck / util.c
index 6101d3c..89f7908 100644 (file)
@@ -330,15 +330,16 @@ void print_resource_track(const char *desc, struct resource_track *track,
                printf("%s: ", desc);
 
 #ifdef HAVE_MALLINFO
-#define kbytes(x)      (((x) + 1023) / 1024)
+#define kbytes(x)      (((unsigned long)(x) + 1023) / 1024)
 
        malloc_info = mallinfo();
-       printf(_("Memory used: %uk/%uk (%uk/%uk), "),
+       printf(_("Memory used: %luk/%luk (%luk/%luk), "),
               kbytes(malloc_info.arena), kbytes(malloc_info.hblkhd),
               kbytes(malloc_info.uordblks), kbytes(malloc_info.fordblks));
 #else
-       printf(_("Memory used: %u, "),
-              (int) (((char *) sbrk(0)) - ((char *) track->brk_start)));
+       printf(_("Memory used: %lu, "),
+              (unsigned long) (((char *) sbrk(0)) - 
+                               ((char *) track->brk_start)));
 #endif
 #ifdef HAVE_GETRUSAGE
        getrusage(RUSAGE_SELF, &r);
@@ -680,3 +681,26 @@ int check_for_modules(const char *fs_name)
 #endif /* __linux__ */
        return (0);
 }
+
+/*
+ * Helper function that does the right thing if write returns a
+ * partial write, or an EGAIN/EINTR error.
+ */
+int write_all(int fd, char *buf, size_t count)
+{
+       ssize_t ret;
+       int c = 0;
+
+       while (count > 0) {
+               ret = write(fd, buf, count);
+               if (ret < 0) {
+                       if ((errno == EAGAIN) || (errno == EINTR))
+                               continue;
+                       return -1;
+               }
+               count -= ret;
+               buf += ret;
+               c += ret;
+       }
+       return c;
+}