[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

bugfix/enhancement for memtest-1.0.1



Here's a patch for memtest that fixes an uninitialized variable bug.  It also
should now work on 64-bit machines, though I don't have one to try it on.

Other minor changes include compile flags, printing pointers in hex, and
getting rid of a couple compiler warnings.

--Mike



diff -Naur memtest-1.0.1-dist/CREDITS memtest-1.0.1/CREDITS
--- memtest-1.0.1-dist/CREDITS	Sat May 25 11:52:55 1996
+++ memtest-1.0.1/CREDITS	Wed Dec  8 23:10:31 1999
@@ -1,3 +1,8 @@
 
 Written by Adrian Powell (awp@cray.com)
 Please email me with problems, comments.
+
+
+
+(1999-12-08) bug fix and extension to 64-bit
+    Mike Coleman (mkc@acm.org)
diff -Naur memtest-1.0.1-dist/Makefile memtest-1.0.1/Makefile
--- memtest-1.0.1-dist/Makefile	Fri Jul  4 20:13:48 1997
+++ memtest-1.0.1/Makefile	Sun Dec  5 17:06:36 1999
@@ -1,5 +1,5 @@
 CC = cc
-CFLAGS = -v
+CFLAGS = -Wall -O -g
 REMOVE = rm
 
 MEMTEST_SRC = memtest.c
diff -Naur memtest-1.0.1-dist/memtest.c memtest-1.0.1/memtest.c
--- memtest-1.0.1-dist/memtest.c	Sun Nov  1 13:48:46 1998
+++ memtest-1.0.1/memtest.c	Sun Dec  5 17:28:49 1999
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <stdlib.h>
 #include <malloc.h>
 #include <errno.h>
 
@@ -6,37 +7,38 @@
 #define PASSES 5
 
 /* Test patterns */
-#define ALL_ONES 037777777777
-#define ALL_ZEROS 0
-#define ONE_ZERO 025252525252
-#define ZERO_ONE 012525252525
+#define ALL_ONES  ((int) 0xFFFFFFFFFFFFFFFF)
+#define ALL_ZEROS ((int) 0x0000000000000000)
+#define ONE_ZERO  ((int) 0xAAAAAAAAAAAAAAAA)
+#define ZERO_ONE  ((int) 0x5555555555555555)
 
 /* Increase as new tests are added. */
 #define TESTS 8
 
-main(argc,argv)
-int argc;
-char *argv[];
-{
+static int check(int *b, int pattern, int pass, int s);
+
 
+int main(int argc, char *argv[])
+{
    int *a; 
-   int i,j;
-   int error,pass_error,passes,pass,tpass;
-   int words,success,size;
+   int i;
+   int error,pass_error=0,passes,pass,tpass;
+   int size;
 
      switch (argc) {
 	case 1:  size=SIZE; tpass=PASSES; break;
 	case 2:  size=atoi(argv[1]); tpass=1; break;
 	default: size=atoi(argv[1]); tpass=atoi(argv[2]);
      }  
-     printf ("Using a memory size of %d 32 bit words (%d Bytes) and %d passes.\n",size,size*sizeof(int),tpass);
+     printf ("Using a memory size of %d %d bit words (%d Bytes) and %d passes.\n",
+	     size,8*sizeof(int),size*sizeof(int),tpass);
 
     if ((a = (int *)calloc(size, sizeof(int))) == NULL) {
                 printf ("calloc() failed errno %d\n", errno);
 		exit(1);
     }
     error=pass=0;
-    printf (" Array a starts at %d\n",&a[0]);
+    printf (" Array a starts at %p\n",&a[0]);
 
     for (passes=0; passes<tpass; passes++) {
 /* Write forwards */
@@ -81,12 +83,9 @@
     return(0);
 }
 
-int check(b,pattern,pass,s)
-int *b;
-long pattern;
-int pass,s;
+static int check(int *b, int pattern, int pass, int s)
 {
-   int z , errors;
+   int z, errors;
 
 /* Put any test corruption here */
 
@@ -100,10 +99,10 @@
    errors=0;
    for (z=0;z<s;z++)
         if (b[z]!=pattern) {
-          printf ("Error at address %d subscript %d, actual %d expected %d\n",&b[z],z,b[z],pattern);
+          printf ("Error at address %p subscript %d, actual %x expected %x diff %x\n",
+		  &b[z],z,b[z],pattern,b[z]^pattern);
           errors++;
         }
    if (errors) printf ("***^ End of pass %d ^*********\n",pass);
    return (errors);
 }
-


Reply to: