Patch request for datatype conversion in SDF code

Patrice Dumas pertusus at FREE.FR
Thu Oct 18 13:04:55 EDT 2007


On Thu, May 31, 2007 at 03:23:27PM -0400, Remik.Ziemlinski wrote:
>
> This error came up when processing the time axis of a netcdf file that
> was declared with "int".  Most often, time axes are of "double" type, so
> this casting bug was overlooked in the past.  Also, IRIX seems a bit
> more robust when casting between these types, even though they too are 4
> and 8 bytes like with IA64.  Thanks.

Does the Attached patch solve your issue?

--
Pat
-------------- next part --------------
diff -Naur grads-1.9b4/src/gacfg.c grads-1.9b4_new/src/gacfg.c
--- grads-1.9b4/src/gacfg.c   2005-05-18 14:29:17.000000000 +0000
+++ grads-1.9b4_new/src/gacfg.c 2005-11-03 13:18:45.000000000 +0000
@@ -32,6 +32,7 @@
  */

 #include <stdio.h>
+#include <string.h>
 #include "grads.h"
 #include "buildinfo.h"

diff -Naur grads-1.9b4/src/gaexpr.c grads-1.9b4_new/src/gaexpr.c
--- grads-1.9b4/src/gaexpr.c  2005-05-18 14:48:36.000000000 +0000
+++ grads-1.9b4_new/src/gaexpr.c        2005-11-03 11:22:27.000000000 +0000
@@ -13,6 +13,7 @@
 #endif

 #include <stdio.h>
+#include <string.h>
 #include <math.h>
 #include "grads.h"

diff -Naur grads-1.9b4/src/gaio.c grads-1.9b4_new/src/gaio.c
--- grads-1.9b4/src/gaio.c    2005-05-23 17:59:01.000000000 +0000
+++ grads-1.9b4_new/src/gaio.c  2005-11-03 11:37:35.000000000 +0000
@@ -22,6 +22,7 @@
 #include "grads.h"
 #include <math.h>
 #include <stdio.h>
+#include <string.h>
 #if USESDF == 1
 #include <netcdf.h>
 #if USEHDF == 1
diff -Naur grads-1.9b4/src/gasdf.c grads-1.9b4_new/src/gasdf.c
--- grads-1.9b4/src/gasdf.c   2005-05-18 14:29:17.000000000 +0000
+++ grads-1.9b4_new/src/gasdf.c 2005-11-04 10:02:05.000000000 +0000
@@ -5785,7 +5785,11 @@
   /* Turn off automatic error handling. */
   ncopts = 0;

+#if USEHDF == 1
   if (ncattname (cdfid, varid, attnum, name) == -1) {
+#else
+  if (nc_inq_attname(cdfid, varid, attnum, name) == -1) {
+#endif
     ncopts = oldncopts ;
     return Failure;
   }
@@ -5813,10 +5817,23 @@
   /* Turn off automatic error handling. */
   ncopts = 0;

+#if USEHDF == 1
   if (ncattinq (cdfid, varid, aname, atype, alen) == -1) {
     ncopts = oldncopts ;
     return Failure;
   }
+#else
+  if (nc_inq_atttype(cdfid, varid, aname, atype) != NC_NOERR) {
+    ncopts = oldncopts ;
+    return Failure;
+  }
+  size_t templen;
+  if (nc_inq_attlen(cdfid, varid, aname, &templen) != NC_NOERR) {
+    ncopts = oldncopts ;
+    return Failure;
+  }
+  *alen = (int) templen;
+#endif

   /* Allocate space for values. */
   if ((*atype == NC_BYTE) || (*atype == NC_CHAR))  {
@@ -5831,6 +5848,7 @@
     *adata = (double *) malloc (sizeof (double) * *alen);
   }  else {
     ncopts = oldncopts ;
+    printf("UNKNOWN TYPE HERE !\n");
     return Failure;
   }

@@ -5840,10 +5858,65 @@
   }

   /* Retrieve values. */
+#if USEHDF == 1
   if (ncattget (cdfid, varid, aname, (void *) (*adata)) == -1) {
     ncopts = oldncopts ;
     return Failure;
   }
+#else
+  switch (*atype)
+  {
+     case NC_BYTE:
+       if (nc_get_att_uchar(cdfid, varid, aname, (unsigned char *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     case NC_CHAR:
+       if (nc_get_att_text(cdfid, varid, aname, (char *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     case NC_SHORT:
+       if (nc_get_att_short(cdfid, varid, aname, (short *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     case NC_LONG:
+       if (nc_get_att_int(cdfid, varid, aname, (int *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     case NC_FLOAT:
+       if (nc_get_att_float(cdfid, varid, aname, (float *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     case NC_DOUBLE:
+       if (nc_get_att_double(cdfid, varid, aname, (double *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+     default:
+       if (nc_get_att_text(cdfid, varid, aname, (char *) *adata) != NC_NOERR)
+       {
+         ncopts = oldncopts ;
+         return Failure;
+       }
+       break;
+  }
+#endif

   /* If character, set last byte to null. */
   if (*atype == NC_CHAR)  {
diff -Naur grads-1.9b4/src/gxdxwd.c grads-1.9b4_new/src/gxdxwd.c
--- grads-1.9b4/src/gxdxwd.c  2002-10-28 19:08:33.000000000 +0000
+++ grads-1.9b4_new/src/gxdxwd.c        2005-11-03 13:37:45.000000000 +0000
@@ -7,6 +7,7 @@
 #endif

 #include <stdio.h>
+#include <stdlib.h>
 #include <errno.h>

 #include <X11/Xos.h>
@@ -22,7 +23,7 @@
  *              writting.
  */

-char *calloc();
+/* char *calloc(); */

 #include "X11/XWDFile.h"

@@ -92,6 +91,7 @@
     int bw;
     Window dummywin;
     XWDFileHeader header;
+    char mytmp[64];


     /*
@@ -232,7 +232,8 @@
      * Write out the color maps, if any
      */

-    if (debug) outl("xwd: Dumping %d colors.\n", ncolors);
+    sprintf(mytmp, "xwd: Dumping %d colors.\n", ncolors);
+    if (debug) outl(mytmp);
 /*
     {
     int icineca=0;
diff -Naur grads-1.9b4/src/gxeps.c grads-1.9b4_new/src/gxeps.c
--- grads-1.9b4/src/gxeps.c   2004-02-27 14:42:11.000000000 +0000
+++ grads-1.9b4_new/src/gxeps.c 2005-11-03 14:45:16.000000000 +0000
@@ -6,6 +6,8 @@
 #include <config.h>
 #endif

+#include <stdlib.h>
+
 /***********************************************************
  * GXEPS a grads metafile to PostScript converter
  * Copyright (c) 1999 - 2001 Matthias Munnich
diff -Naur grads-1.9b4/src/gxhpng.c grads-1.9b4_new/src/gxhpng.c
--- grads-1.9b4/src/gxhpng.c  2004-03-12 16:14:04.000000000 +0000
+++ grads-1.9b4_new/src/gxhpng.c        2005-11-03 11:56:53.000000000 +0000
@@ -6,7 +6,6 @@
 #include <config.h>
 #endif

-
 /* Rasterize current metafile buffer via gd library.  Loosly based
    on the gxpng utility:

@@ -455,7 +452,7 @@
                                im->polyInts[ints++] = (y-y1) * (x2-x1) / (y2-y1) + x1;
                        }
                }
-               qsort(im->polyInts, ints, sizeof(int), gdCompareInt);
+               qsort(im->polyInts, ints, sizeof(int), (void *) gdCompareInt);

                for (i=0; (i < (ints)); i+=2) {
                        gdImageLne(im, im->polyInts[i], y,
diff -Naur grads-1.9b4/src/gxX.c grads-1.9b4_new/src/gxX.c
--- grads-1.9b4/src/gxX.c     2005-05-18 14:29:17.000000000 +0000
+++ grads-1.9b4_new/src/gxX.c   2005-11-03 11:28:15.000000000 +0000
@@ -270,7 +270,7 @@

   /* Set up icon pixmap */

-  icon_pixmap = XCreateBitmapFromData(display, win, icon_bitmap_bits,
+  icon_pixmap = XCreateBitmapFromData(display, win, (char *) icon_bitmap_bits,
                 icon_bitmap_width, icon_bitmap_height);

   /* Set standard properties */
@@ -402,7 +402,7 @@
   if (xfnam) flist = XListFonts (display, xfnam, 1, &i);
   else flist = NULL;
   if (flist==NULL) {
-    flist = XListFonts (display, "-adobe-helvetica-bold-r-normal--??-100*", 1, &i);
+    flist = XListFonts (display, "-adobe-helvetica-bold-r-normal-*-100*", 1, &i);
   }
   if (flist==NULL) {
     flist = XListFonts (display, "-adobe-helvetica-bold-r-normal-*-120*", 1, &i);
@@ -418,7 +418,7 @@
   if (xfnam) flist = XListFonts (display, xfnam, 1, &i);
   else flist = NULL;
   if (flist==NULL) {
-    flist = XListFonts (display, "-adobe-helvetica-bold-o-normal--??-100*", 1, &i);
+    flist = XListFonts (display, "-adobe-helvetica-bold-o-normal-*-100*", 1, &i);
   }
   if (flist==NULL) {
     flist = XListFonts (display, "-adobe-helvetica-bold-o-normal-*-120*", 1, &i);
@@ -3267,7 +3267,7 @@
   }

   if (typ>1) {
-    stipple_pixmap = XCreateBitmapFromData(display, win, bitmap_bits,
+    stipple_pixmap = XCreateBitmapFromData(display, win, (char *) bitmap_bits,
                     bitmap_width, bitmap_height);
     XSetStipple(display, gc, stipple_pixmap);
     XSetFillStyle(display, gc, FillStippled);
diff -u --recursive grads-1.9b4-orig/src/gauser.c grads-1.9b4-rpm/src/gauser.c
--- grads-1.9b4-orig/src/gauser.c       2005-05-18 20:51:01.000000000 +0200
+++ grads-1.9b4-rpm/src/gauser.c        2006-02-17 15:19:32.000000000 +0100
@@ -42,6 +42,7 @@
 #endif

 /* int gxhpng (char *, int, int, int, int); */
+int gxhpng (char *, int, int, int, int, char *, char *, int) ;

 /*mf 971022 --- expose Mike Fiorino's global struct to these routines for warning level setting mf*/
 extern struct gamfcmn mfcmn;
--- grads-1.9b4-orig/src/gxhpng.c       2004-03-12 17:14:04.000000000 +0100
+++ grads-1.9b4-rpm/src/gxhpng.c        2006-02-17 15:19:32.000000000 +0100
@@ -379,6 +379,11 @@

 int gdCompareInt(const void *a, const void *b);

+int gdCompareInt(const void *a, const void *b)
+{
+       return (*(const int *)a) - (*(const int *)b);
+}
+
 /* Version of gdImageFilledPolygon to invoke my local
    version of gdImageLne.  Nothing else changed... B.Doty 5/31/01 */



More information about the gradsusr mailing list