Adeodato Simó ha scritto:
> Sorry, this diff is more than I'm willing to take.

I prepared an upload for tpu to fix #502219 and #379592,
I'd like to upload in t-p-u, for your approval.

Attached the debdiff.


Giuseppe Iuculano
diff -u procinfo-18/debian/patches/00list procinfo-18/debian/patches/00list
--- procinfo-18/debian/patches/00list
+++ procinfo-18/debian/patches/00list
@@ -7,0 +8,2 @@
+09_procinfo_fix_high_interrupt.dpatch
+10_fix_garbles_numbers_on_amd64.dpatch
diff -u procinfo-18/debian/changelog procinfo-18/debian/changelog
--- procinfo-18/debian/changelog
+++ procinfo-18/debian/changelog
@@ -1,3 +1,12 @@
+procinfo (18-2+lenny1) testing-proposed-updates; urgency=low
+
+  * Fix a segfault caused by interrupts counting. (Closes: #502219)
+  * Set me as maintainer. 
+  * Fix garbles numbers on amd64 (Closes: #379592)
+  * debian/rules: Do not ignore make clean error
+
+ -- Giuseppe Iuculano <[EMAIL PROTECTED]>  Tue, 14 Oct 2008 23:12:03 +0200
+
 procinfo (18-2) unstable; urgency=low
 
   * New maintainer (closes: #384633).
diff -u procinfo-18/debian/control procinfo-18/debian/control
--- procinfo-18/debian/control
+++ procinfo-18/debian/control
@@ -1,7 +1,7 @@
 Source: procinfo
 Section: utils
 Priority: optional
-Maintainer: Antonio José Calderón <[EMAIL PROTECTED]>
+Maintainer: Giuseppe Iuculano <[EMAIL PROTECTED]>
 Build-Depends: libncurses5-dev, debhelper (>= 5), dpatch
 Standards-Version: 3.7.2
 
diff -u procinfo-18/debian/rules procinfo-18/debian/rules
--- procinfo-18/debian/rules
+++ procinfo-18/debian/rules
@@ -29,7 +29,7 @@
        dh_testdir
        dh_testroot
        rm -f build-stamp
-       $(MAKE) -i clean
+       [ ! -f Makefile ] || $(MAKE) clean
        dh_clean
 
 install: build
only in patch2:
unchanged:
--- procinfo-18.orig/debian/patches/09_procinfo_fix_high_interrupt.dpatch
+++ procinfo-18/debian/patches/09_procinfo_fix_high_interrupt.dpatch
@@ -0,0 +1,158 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 09_procinfo_fix_high_interrupt.dpatch by Giuseppe Iuculano <[EMAIL 
PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix segfault caused by interrupts counting
+
[EMAIL PROTECTED]@
+diff -urNad procinfo-18~/procinfo.c procinfo-18/procinfo.c
+--- procinfo-18~/procinfo.c    2008-10-14 22:16:17.844235046 +0200
++++ procinfo-18/procinfo.c     2008-10-14 22:27:57.158390839 +0200
+@@ -499,22 +499,31 @@
+ 
+     if (nr_irqs) {
+       char irq_label[nr_irqs][22];
++      unsigned real_irq_nums[nr_irqs];
++      unsigned real_nr_irqs = 0U;
+ 
+       memset (irq_label, 0, nr_irqs * 22);
+ 
+       if (interruptsfp) {
+-          int i;
+ 
+           fseek (interruptsfp, 0L, SEEK_SET);
+           while (fgets (line, sizeof (line), interruptsfp)) {
++              char *endptr;
+               char *p;
++              int i;
+ 
+               if (!strchr(line, ':'))         /* skip "           CPU0" */
+                   continue;
+ 
+-              i = atol (strtok (line, ":")); /* Get the IRQ no. */
+-
+-              p = strtok (NULL, "\n");
++              /* Get the IRQ no. */
++              p = strtok(line, ":");
++              endptr = NULL;
++              real_irq_nums[real_nr_irqs] = strtol(p, &endptr, 10);
++              if (endptr == p) /* Not a number */
++              {
++                      continue;
++              }
++              p = strtok (NULL, " ");
+ 
+               /*
+                 Left: p = "      31273 + serial"
+@@ -523,38 +532,24 @@
+                 or whatever.
+                 Anyway, let's first gobble up...
+               */
+-
+-              while (*p == ' ')               /* ...spaces... */
+-                  p++;
+-              while (*p >= '0' && *p <= '9')  /* ...digits... */
+-                  p++;
+-              while (*p == ' ' || *p == '+')  /* ...and the rest. */
+-                  p++;
++              for (i = 0; i < nr_cpus; i++)
++                      p = strtok(NULL, " ");
+ 
+               /* Left: "serial" or "XT PIC   serial" */
+ 
+               if (linux_version_code >= 0x20150) {
+-                  /*
+-                    I don't really like hardcoding version numbers, but
+-                    since the label itself may contain spaces, I can't
+-                    think of a fool-proof algorithm to detect a "XT PIC"
+-                    style /proc/interrupts.
+-                  */
+-                  char *q;
+-
+-                  if ((q = strstr (p, "PIC"))) {
+-                      while (*q != ' ')       /* eat up "PIC" or "PIC-foo" */
+-                          q++;
+-                      while (*q == ' ')       /* eat up spaces */
+-                          q++;
+-                      p = q;
+-                  }
++                      p = strtok(NULL, " ");
+               }
++              if (p[strlen(p) - 1] == '\n')
++                      p[strlen(p) - 1] = '\0';
++              
+ 
+               /* XXX Don't let NMI:, IPI: overwrite real values */
+-              if (irq_label[i][0] == 0)
+-                  strncpy (irq_label[i], p, 20);
++              if (irq_label[real_nr_irqs][0] == 0) {
++                  strncpy (irq_label[real_nr_irqs], p, 20);
++                      ++real_nr_irqs;
+           }
++              }
+       }
+ 
+ 
+@@ -569,7 +564,7 @@
+           while (fgets (line, sizeof (line), dmafp)) {
+               int foo = strcspn (&line[4], " \n");
+ 
+-              for (i = 0; i < nr_irqs; i++) {
++              for (i = 0; i < real_nr_irqs; i++) {
+                   if (strncmp (&line[4], irq_label[i], foo) == 0) {
+                       tmplen = sprintf (tmp, " [%ld]",
+                                         atol (strtok (line, ":")));
+@@ -594,9 +589,9 @@
+               char *label;
+           } squirqs[nr_irqs];
+ 
+-          for (i = 0; i < nr_irqs; i++) {
++          for (i = 0; i < real_nr_irqs; i++) {
+               if (new.intr[i] || irq_label[i][0]) {
+-                  squirqs[howmany].nr = i;
++                  squirqs[howmany].nr = real_irq_nums[i];
+                   squirqs[howmany].count = bDIFF(intr[i]);
+                   squirqs[howmany].label = irq_label[i];
+                   howmany++;
+@@ -608,11 +603,11 @@
+           for (i = 0; i < rows; i++) {
+               /* The last row may be incomplete if howmany is odd, hence: */
+               if (i == rows - 1 && howmany & 1) {
+-                  printf ("irq%3d:%10lu %-21s\n",
++                  printf ("irq%4d:%10lu %-21s\n",
+                           squirqs[i].nr, squirqs[i].count, squirqs[i].label);
+               } else {
+-                  printf ("irq%3d:%10lu %-21s "
+-                          "irq%3d:%10lu %-21s\n",
++                  printf ("irq%4d:%10lu %-21s "
++                          "irq%4d:%10lu %-21s\n",
+                           squirqs[i].nr, squirqs[i].count, squirqs[i].label,
+                           squirqs[i+rows].nr,
+                           squirqs[i+rows].count,
+@@ -620,10 +615,10 @@
+               }
+           }
+       } else {
+-          for (i = 0; i < nr_irqs / 2; i++)
++          for (i = 0; i < real_nr_irqs / 2; i++)
+               printf ("irq%3d:%10lu %-21s "
+                       "irq%3d:%10lu %-21s\n",
+-                      i, bDIFF (intr[i]), irq_label[i],
++                      real_irq_nums[i], bDIFF (intr[i]), irq_label[i],
+                       i + (nr_irqs / 2),
+                       bDIFF (intr[i + (nr_irqs / 2)]),
+                       irq_label[i + (nr_irqs / 2)]);
+@@ -944,10 +939,10 @@
+           for(i = 5; i < len; i++)
+               if(line[i] == ' ')
+                   nr_irqs++;
+-          new.intr = my_xcalloc (nr_irqs, sizeof (unsigned int));
+-          old.intr = my_xcalloc (nr_irqs, sizeof (unsigned int));
++          new.intr = my_xcalloc (nr_irqs, sizeof (unsigned long));
++          old.intr = my_xcalloc (nr_irqs, sizeof (unsigned long));
+           memset (&base, 0, sizeof (struct info));
+-          base.intr = my_xcalloc (nr_irqs, sizeof (unsigned int));
++          base.intr = my_xcalloc (nr_irqs, sizeof (unsigned long));
+           continue;
+       }
+       /* While we're at it, fill in booted. */
only in patch2:
unchanged:
--- procinfo-18.orig/debian/patches/10_fix_garbles_numbers_on_amd64.dpatch
+++ procinfo-18/debian/patches/10_fix_garbles_numbers_on_amd64.dpatch
@@ -0,0 +1,30 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 10_fix_garbles_numbers_on_amd64.dpatch by Giuseppe Iuculano <[EMAIL 
PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix garbles numbers on AMD64.
+
[EMAIL PROTECTED]@
+diff -urNad procinfo-18~/procinfo.c procinfo-18/procinfo.c
+--- procinfo-18~/procinfo.c    2008-10-14 22:43:05.208233922 +0200
++++ procinfo-18/procinfo.c     2008-10-14 22:44:01.774419367 +0200
+@@ -79,7 +79,7 @@
+ 
+ char line[1024], cmdline[1024], booted[40], *version = NULL, *message = NULL;
+ 
+-float rate = 1.0;             /* per interval or per sec */
++double rate = 1.0;            /* per interval or per sec */
+ 
+ struct info new, old, base;
+ struct utsname ut;
+@@ -1144,8 +1144,8 @@
+           then = now;
+           gettimeofday (&now, 0);
+           if (per_sec)
+-              rate = (float) now.tv_sec + (float) now.tv_usec / 1.0e6 -
+-                  (float) then.tv_sec - (float) then.tv_usec / 1.0e6;
++              rate = (double) now.tv_sec + (float) now.tv_usec / 1.0e6 -
++                  (double) then.tv_sec - (double) then.tv_usec / 1.0e6;
+ 
+       } else {
+           putchar ('\n');

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to