[BZ #285]
authorUlrich Drepper <drepper@redhat.com>
Tue, 10 Aug 2004 04:18:14 +0000 (04:18 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 10 Aug 2004 04:18:14 +0000 (04:18 +0000)
Update.
* malloc/memusage.c (me): Use creat64, not creat.
* malloc/memusagestat.c: Fix handling of very large sizes.  [BZ #285]
Patch by Guy Maor <guymaor@yahoo.com>.

ChangeLog
malloc/memusage.c
malloc/memusagestat.c

index bfae5f6..0f4bcc6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2004-08-09  Ulrich Drepper  <drepper@redhat.com>
 
+       * malloc/memusage.c (me): Use creat64, not creat.
+       * malloc/memusagestat.c: Fix handling of very large sizes.  [BZ #285]
+       Patch by Guy Maor <guymaor@yahoo.com>.
+
        * elf/ldconfig.c (options): Mark parameter option names as
        translatable.  [BZ #253]  Patch by Jakub Bogusz <qboosh@pld-linux.org>.
 
index d5b73f5..b552ec3 100644 (file)
@@ -1,5 +1,5 @@
 /* Profile heap and stack memory usage of running program.
-   Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -233,7 +233,7 @@ me (void)
       if (outname != NULL && outname[0] != '\0'
          && (access (outname, R_OK | W_OK) == 0 || errno == ENOENT))
        {
-         fd = creat (outname, 0666);
+         fd = creat64 (outname, 0666);
 
          if (fd == -1)
            /* Don't do anything in future calls if we cannot write to
index fa2d219..b1cad9b 100644 (file)
@@ -18,6 +18,8 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#define _FILE_OFFSET_BITS 64
+
 #include <argp.h>
 #include <assert.h>
 #include <errno.h>
@@ -128,6 +130,8 @@ main (int argc, char *argv[])
   uint64_t start_time;
   uint64_t end_time;
   uint64_t total_time;
+  const char *heap_format, *stack_format;
+  int heap_scale, stack_scale, line;
 
   outname = NULL;
   xsize = XSIZE;
@@ -241,13 +245,46 @@ main (int argc, char *argv[])
 
   gdImageRectangle (im_out, 40, 20, xsize - 40, ysize - 20, blue);
 
+  if (maxsize_heap < 1024)
+    {
+      heap_format = "%Zu";
+      heap_scale = 1;
+    }
+  else if (maxsize_heap < 1024 * 1024 * 100)
+    {
+      heap_format = "%Zuk";
+      heap_scale = 1024;
+    }
+  else
+    {
+      heap_format = "%ZuM";
+      heap_scale = 1024 * 1024;
+    }
+
+  if (maxsize_stack < 1024)
+    {
+      stack_format = "%Zu";
+      stack_scale = 1;
+    }
+  else if (maxsize_stack < 1024 * 1024 * 100)
+    {
+      stack_format = "%Zuk";
+      stack_scale = 1024;
+    }
+  else
+    {
+      stack_format = "%ZuM";
+      stack_scale = 1024 * 1024;
+    }
+
   gdImageString (im_out, gdFontSmall, 38, ysize - 14, (unsigned char *) "0",
                 blue);
+  snprintf(buf, sizeof (buf), heap_format, 0);
   gdImageString (im_out, gdFontSmall, maxsize_heap < 1024 ? 32 : 26,
-                ysize - 26,
-                (unsigned char *) (maxsize_heap < 1024 ? "0" : "0k"), red);
+                ysize - 26, buf, red);
+  snprintf(buf, sizeof (buf), stack_format, 0);
   gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26,
-                (unsigned char *) (maxsize_stack < 1024 ? "0" : "0k"), green);
+                buf, green);
 
   if (string != NULL)
     gdImageString (im_out, gdFontLarge, (xsize - strlen (string) * 8) / 2,
@@ -263,148 +300,33 @@ main (int argc, char *argv[])
   gdImageStringUp (im_out, gdFontSmall, xsize - 27, ysize / 2 - 10,
                   (unsigned char *) "stack", green);
 
-  if (maxsize_heap < 1024)
-    {
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_heap);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red);
-    }
-  else
-    {
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 1024);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red);
-    }
-  if (maxsize_stack < 1024)
-    {
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_stack);
-      gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green);
-    }
-  else
-    {
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 1024);
-      gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green);
-    }
+  snprintf (buf, sizeof (buf), heap_format, maxsize_heap / heap_scale);
+  gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red);
+  snprintf (buf, sizeof (buf), stack_format, maxsize_stack / stack_scale);
+  gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green);
 
-
-  if (maxsize_heap < 1024)
-    {
-      cnt = ((ysize - 40) * (maxsize_heap / 4)) / maxsize_heap;
-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
-                        ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_heap / 4);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
-                    ysize - 26 - cnt, buf, red);
-    }
-  else
+  for (line = 1; line <= 3; ++line)
     {
-      cnt = ((ysize - 40) * (maxsize_heap / 4096)) / (maxsize_heap / 1024);
+      cnt = ((ysize - 40) * (maxsize_heap / 4 * line / heap_scale)) /
+       (maxsize_heap / heap_scale);
       gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
                         ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 4096);
+      snprintf (buf, sizeof (buf), heap_format, maxsize_heap / 4 * line / 
+               heap_scale);
       gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
                     ysize - 26 - cnt, buf, red);
-    }
-  if (maxsize_stack < 1024)
-    {
-      cnt2 = ((ysize - 40) * (maxsize_stack / 4)) / maxsize_stack;
-      if (cnt != cnt2)
-       gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
-                          ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_stack / 4);
-      gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
-                    buf, green);
-    }
-  else
-    {
-      cnt2 = ((ysize - 40) * (maxsize_stack / 4096)) / (maxsize_stack / 1024);
-      if (cnt != cnt2)
-       gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
-                          ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 4096);
-      gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
-                    buf, green);
-    }
 
-  if (maxsize_heap < 1024)
-    {
-      cnt = ((ysize - 40) * (maxsize_heap / 2)) / maxsize_heap;
-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
-                        ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_heap / 2);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
-                    ysize - 26 - cnt, buf, red);
-    }
-  else
-    {
-      cnt = ((ysize - 40) * (maxsize_heap / 2048)) / (maxsize_heap / 1024);
-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
-                        ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 2048);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
-                    ysize - 26 - cnt, buf, red);
-    }
-  if (maxsize_stack < 1024)
-    {
-      cnt2 = ((ysize - 40) * (maxsize_stack / 2)) / maxsize_stack;
-      if (cnt != cnt2)
-       gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
-                          ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zu", maxsize_stack / 2);
-      gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
-                    buf, green);
-    }
-  else
-    {
-      cnt2 = ((ysize - 40) * (maxsize_stack / 2048)) / (maxsize_stack / 1024);
-      if (cnt != cnt2)
-       gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
-                          ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 2048);
-      gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
-                    buf, green);
-    }
-
-  if (maxsize_heap < 1024)
-    {
-      cnt = ((ysize - 40) * ((3 * maxsize_heap) / 4)) / maxsize_heap;
-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
-                        ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zu", (3 * maxsize_heap) / 4);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
-                    ysize - 26 - cnt, buf, red);
-    }
-  else
-    {
-      cnt = ((ysize - 40) * ((3 * maxsize_heap) / 4096)) / (maxsize_heap
-                                                           / 1024);
-      gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40,
-                        ysize - 20 - cnt, red);
-      snprintf (buf, sizeof (buf), "%Zuk", (3 * maxsize_heap) / 4096);
-      gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6,
-                    ysize - 26 - cnt, buf, red);
-    }
-  if (maxsize_stack < 1024)
-    {
-      cnt2 = ((ysize - 40) * ((3 * maxsize_stack) / 4)) / maxsize_stack;
-      if (cnt != cnt2)
-       gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
-                          ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zu", (3 * maxsize_stack) / 4);
-      gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
-                    buf, green);
-    }
-  else
-    {
-      cnt2 = (((ysize - 40) * ((3 * maxsize_stack) / 4096))
-             / (maxsize_stack / 1024));
+      cnt2 = ((ysize - 40) * (maxsize_stack / 4 * line / stack_scale)) /
+       (maxsize_stack / stack_scale);
       if (cnt != cnt2)
        gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40,
                           ysize - 20 - cnt2, green);
-      snprintf (buf, sizeof (buf), "%Zuk", (3 * maxsize_stack) / 4096);
+      snprintf (buf, sizeof (buf), stack_format, maxsize_stack / 4 * line /
+               stack_scale);
       gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2,
                     buf, green);
     }
 
-
   snprintf (buf, sizeof (buf), "%llu", (unsigned long long) total);
   gdImageString (im_out, gdFontSmall, xsize - 50, ysize - 14, buf, blue);