From 9107c24840d0f84a1116d41f2991886a544c4e23 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Wed, 30 Oct 2024 18:26:44 +0100
Subject: [PATCH] cgribexlib.c update

---
 src/cgribexlib.c | 66 +++++++++++-------------------------------------
 1 file changed, 15 insertions(+), 51 deletions(-)

diff --git a/src/cgribexlib.c b/src/cgribexlib.c
index 05ea0e609..d1786fdb3 100644
--- a/src/cgribexlib.c
+++ b/src/cgribexlib.c
@@ -1,5 +1,5 @@
 
-// Automatically generated by m214003 at 2024-10-23, do not edit
+// Automatically generated by m214003 at 2024-10-30, do not edit
 
 // CGRIBEXLIB_VERSION="2.3.1"
 
@@ -2324,11 +2324,7 @@ gribPrintSec1(int *isec0, int *isec1)
   int ibit, ierr, iout, iyear;
   int jiloop;
   float value;
-
   char hversion[9];
-  /*
-  char hfirst[121], hsecond[121], hthird[121], hfourth[121];
-  */
 
   grsdef();
 
@@ -2352,22 +2348,6 @@ gribPrintSec1(int *isec0, int *isec1)
   fprintf(grprsm, " Flag (Code Table 1)                   %8.8d\n", iout);
   fprintf(grprsm, " Parameter identifier (Code Table 2). %9d\n", isec1[5]);
 
-  /*
-      IERR = CHKTAB2(ISEC1,HFIRST,HSECOND,HTHIRD,HFOURTH)
-      IF( IERR .EQ. 0 ) THEN
-       DO JLOOP = 121, 1, -1
-          IF( HSECOND(JLOOP:JLOOP).NE.' ' ) THEN
-            IOFFSET = JLOOP
-            GOTO 110
-          ENDIF
-        ENDDO
-        GOTO 120
- 110    CONTINUE
-        WRITE(*,'(2H ",A,1H")') HSECOND(1:IOFFSET)
- 120    CONTINUE
-      ENDIF
-  */
-
   if (isec1[5] != 127)
     {
       fprintf(grprsm, " Type of level (Code Table 3).        %9d\n", isec1[6]);
@@ -2384,7 +2364,6 @@ gribPrintSec1(int *isec0, int *isec1)
   if (iyear != 255)
     {
       int date, time;
-      /* iyear  = ((isec1[20]-1)*100 + isec1[9]); */
       gribDateTime(isec1, &date, &time);
       iyear = date / 10000;
       fprintf(grprsm, " Year of reference time of data.      %9d  (%4d)\n", isec1[9], iyear);
@@ -2413,10 +2392,10 @@ gribPrintSec1(int *isec0, int *isec1)
   else
     fprintf(grprsm, " Century of reference time of data.   %9d\n", isec1[20]);
 
-  /*   Print sub-centre  */
+  //   Print sub-centre
   fprintf(grprsm, " Sub-centre identifier.               %9d\n", ISEC1_SubCenterID);
 
-  /*   Decimal scale factor  */
+  //   Decimal scale factor
   fprintf(grprsm, " Units decimal scaling factor.        %9d\n", isec1[22]);
 
   /*
@@ -2478,7 +2457,7 @@ gribPrintSec1(int *isec0, int *isec1)
       fprintf(grprsm, " Class.                               %9d\n", isec1[37]);
       fprintf(grprsm, " Type.                                %9d\n", isec1[38]);
       fprintf(grprsm, " Stream.                              %9d\n", isec1[39]);
-      sprintf(hversion, "%4s", (char *) &isec1[40]);
+      snprintf(hversion, sizeof(hversion), "%4s", (char *) &isec1[40]);
       hversion[4] = 0;
       fprintf(grprsm, " Version number or Experiment identifier.  %4s\n", hversion);
       /*
@@ -2797,14 +2776,11 @@ gribPrintSec1(int *isec0, int *isec1)
           fprintf(grprsm, "   Type                               %9d\n", isec1[42]);
           fprintf(grprsm, "   Stream                             %9d\n", isec1[43]);
           /*
-          sprintf(hversion, "%8d", isec1[44]);
+          snprintf(hversion, sizeof(hversion), "%8d", isec1[44]);
           fprintf(grprsm, "   Version number/experiment identifier:   %4s\n", &hversion[4]);
           */
           iyear = isec1[45];
-          if (iyear > 50)
-            iyear = iyear + 1900;
-          else
-            iyear = iyear + 2000;
+          iyear = iyear + ((iyear > 50) ? 1900 : 2000);
 
           fprintf(grprsm, "   Year                               %9d\n", iyear);
           fprintf(grprsm, "   Month                              %9d\n", isec1[46]);
@@ -3025,11 +3001,7 @@ printQuasi(int *isec2)
   fprintf(grprsm, "  Number of points along a parallel varies.\n");
 
   int ntos = (fmod((double) isec2[10], 128.) < 64);
-
-  if (ntos)
-    fprintf(grprsm, "  Number of points.   Parallel. (North to South)\n");
-  else
-    fprintf(grprsm, "  Number of points.   Parallel. (South to North)\n");
+  fprintf(grprsm, "  Number of points.   Parallel. %s\n", ntos ? "(North to South)" : "(South to North)");
 
   // Display number of points for each latitude
   int latcnt = isec2[2];
@@ -3039,7 +3011,7 @@ printQuasi(int *isec2)
   for (int j = 0; j < latcnt; ++j)
     {
       nextlat = nextlat + 1;
-      sprintf(yout, "%4d", nextlat);
+      snprintf(yout, sizeof(yout), "%4d", nextlat);
 
       // Finished?
       if (nextlat > latcnt) break;
@@ -3060,7 +3032,7 @@ printQuasi(int *isec2)
           if (nextlat < latcnt) goto LABEL110;
         }
       // Display neighbouring latitudes with same number of points as 'nn to mm'.
-      if (nrepeat >= 1) sprintf(yout + 4, "to %5d", nextlat);
+      if (nrepeat >= 1) snprintf(yout + 4, sizeof(yout) - 4, "to %5d", nextlat);
       fprintf(grprsm, " %5d                %-12s\n", isec2[nextlat + 21], yout);
       memset(yout, ' ', (size_t) 11);
     }
@@ -4057,9 +4029,7 @@ C     ----------------------------------------------------------------
   /*
     Common area variables have not been set. Set them.
   */
-  /*
-    Set GRIB calendar.
-  */
+  // Set GRIB calendar.
   if (CGRIBEX_grib_calendar == -1)
     {
       CGRIBEX_grib_calendar = CALENDAR_PROLEPTIC;
@@ -4081,18 +4051,14 @@ C     ----------------------------------------------------------------
             CGRIBEX_grib_calendar = CALENDAR_NONE;
         }
     }
-  /*
-    Set GRIBEX compatibility mode.
-  */
+  // Set GRIBEX compatibility mode.
   envString = getenv("GRIB_GRIBEX_MODE_ON");
   if (envString != NULL)
     {
       if (atoi(envString) == 1) CGRIBEX_Const = 0;
     }
 
-  /*
-    See if output stream needs changing
-  */
+  // See if output stream needs changing
   grprsm = stdout;
   env_stream = getenv("GRPRS_STREAM");
   if (env_stream)
@@ -4110,7 +4076,7 @@ C     ----------------------------------------------------------------
           else
             {
               char filename[] = "unit.00";
-              sprintf(filename, "%2.2d", unit);
+              snprintf(filename, sizeof(filename), "%2.2d", unit);
               grprsm = fopen(filename, "w");
               if (!grprsm) SysError("GRPRS_STREAM = %d", unit);
             }
@@ -4124,9 +4090,7 @@ C     ----------------------------------------------------------------
             }
         }
     }
-  /*
-    Mark common area values set by user.
-  */
+  // Mark common area values set by user.
   lfirst = false;
 }
 
@@ -5188,7 +5152,7 @@ grib2PrintALL(int nrec, long offset, long recpos, long recsize, unsigned char *g
   printf("level %d %d %d %d %d %d %d\n", level1type, level1sf, level1, level1*level1sf, level2sf, level2, level2*level2sf);
   */
   char paramstr[16];
-  sprintf(paramstr, "%d.%d.%d", paramnum, paramcat, dis);
+  snprintf(paramstr, sizeof(paramstr), "%d.%d.%d", paramnum, paramcat, dis);
   fprintf(stdout, "%5d :%4ld %8ld %6ld :%2d %3ld %3ld %3ld %3ld %4ld %6ld %6ld : %-9s %7d : %5d %5d %6.4g\n", nrec, offset, recpos,
           recsize, GRIB_EDITION(is), ids_len, lus_len, gds_len, pds_len, drs_len, bms_len, bds_len, paramstr, level1, level1type,
           gridtype, cr);
-- 
GitLab