From 79cf0ffb580e53f7125c8509ca51f95aeeb9dcee Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Mon, 15 May 2017 09:54:43 +0200
Subject: [PATCH] gridInqXCvalsSerial: bug fix.

---
 src/grid.c | 38 ++++++++++++++++----------------------
 1 file changed, 16 insertions(+), 22 deletions(-)

diff --git a/src/grid.c b/src/grid.c
index 08187a9b4..82b77d1bf 100644
--- a/src/grid.c
+++ b/src/grid.c
@@ -1550,19 +1550,17 @@ int gridInqXCvalsSerial(grid_t *gridptr, char **xcvals)
     Error("Function only valid for grid type 'GRID_CHARXY'.");
 
   int size = gridptr->x.size;
-  const char **gridptr_xcvals = gridptr->vtable->inqXCvalsPtr(gridptr);
-  if ( size == 0 || !gridptr_xcvals )
-    Error("No string coordinates found!");
-
-  int stringlen = strlen(gridptr_xcvals[0]);
-  if ( stringlen == 0 )
-    Error("Length of string coordinates not defined.");
+  int maxclength = 0;
 
-  if ( xcvals )
-    for ( int i = 0; i < size; i++ )
-      memcpy(xcvals[i], gridptr_xcvals[i], (size_t)stringlen * sizeof(char));
+  const char **gridptr_xcvals = gridptr->vtable->inqXCvalsPtr(gridptr);
+  if ( gridptr_xcvals && size && xcvals )
+    {
+      maxclength = gridptr->x.clength;
+      for ( int i = 0; i < size; i++ )
+        memcpy(xcvals[i], gridptr_xcvals[i], (size_t)maxclength*sizeof(char));
+    }
 
-  return (int)stringlen;
+  return maxclength;
 }
 
 static
@@ -1646,21 +1644,17 @@ int gridInqYCvalsSerial(grid_t *gridptr, char **ycvals)
     Error("Function only valid for grid type 'GRID_CHARXY'.");
 
   int size = gridptr->y.size;
-  int stringlen = 0;
+  int maxclength = 0;
 
-  if ( gridptr->y.cvals )
+  const char **gridptr_ycvals = gridptr->vtable->inqYCvalsPtr(gridptr);
+  if ( gridptr_ycvals && size && ycvals )
     {
-      if ( size && ycvals )
-        {
-          const char **gridptr_ycvals = gridptr->vtable->inqYCvalsPtr(gridptr);
-          stringlen = strlen(gridptr_ycvals[0]);
-          memcpy(ycvals, gridptr_ycvals, (size_t)size * sizeof ( (size_t)stringlen * sizeof(char)));
-        }
+      maxclength = gridptr->y.clength;
+      for ( int i = 0; i < size; i++ )
+        memcpy(ycvals[i], gridptr_ycvals[i], (size_t)maxclength*sizeof(char));
     }
-  else
-    size = 0;
 
-  return (int)stringlen;
+  return maxclength;
 }
 
 static
-- 
GitLab