Patches for netcdf-3.3.1/src/ncgen ================================== To apply, invoke the following command from the netcdf-3.3.1/src/ncgen/ directory, where you should replace PATCHFILE by the name for this file: patch < PATCHFILE Then rebuild ncgen with "make all". Index: genlib.c diff -c genlib.c:1.29 genlib.c:1.30 *** genlib.c:1.29 Thu Jun 12 14:29:48 1997 --- genlib.c Wed Jul 2 11:02:51 1997 *************** *** 1,7 **** /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Header: /upc/share/CVS/netcdf-3/ncgen/genlib.c,v 1.29 1997/06/12 20:29:48 russ Exp $ *********************************************************************/ #include --- 1,7 ---- /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Header: /upc/share/CVS/netcdf-3/ncgen/genlib.c,v 1.30 1997/07/02 17:02:51 russ Exp $ *********************************************************************/ #include *************** *** 1037,1042 **** --- 1037,1043 ---- static char *sp; char *cp; char *istr, *istr0; /* for null-terminated copy */ + int ii; if(4*len+3 != (unsigned)(4*len+3)) { derror("too much character data!"); *************** *** 1050,1061 **** } istr0 = istr = (char *) emalloc(len + 1); ! strncpy(istr, valp, len); istr[len] = '\0'; *cp++ = '"'; ! while (*istr != '\0') { switch (*istr) { case '\b': *cp++ = '\\'; *cp++ = 'b'; break; case '\f': *cp++ = '\\'; *cp++ = 'f'; break; case '\n': *cp++ = '\\'; *cp++ = 'n'; break; --- 1051,1065 ---- } istr0 = istr = (char *) emalloc(len + 1); ! for(ii = 0; ii < len; ii++) { ! istr[ii] = valp[ii]; ! } istr[len] = '\0'; *cp++ = '"'; ! for(ii = 0; ii < len; ii++) { switch (*istr) { + case '\0': *cp++ = '\\'; *cp++ = '0'; *cp++ = '0'; *cp++ = '0'; break; case '\b': *cp++ = '\\'; *cp++ = 'b'; break; case '\f': *cp++ = '\\'; *cp++ = 'f'; break; case '\n': *cp++ = '\\'; *cp++ = 'n'; break; *************** *** 1103,1116 **** char *cp, tstr[12]; int was_print = 0; /* true if last character was printable */ char *istr, *istr0; /* for null-terminated copy */ ! if(12*ilen != (size_t)(12*ilen)) { derror("too much character data!"); exit(9); } istr0 = istr = (char *) emalloc(ilen + 1); ! strncpy(istr, str, ilen); istr[ilen] = '\0'; if (*istr == '\0') { /* empty string input, not legal in FORTRAN */ --- 1107,1122 ---- char *cp, tstr[12]; int was_print = 0; /* true if last character was printable */ char *istr, *istr0; /* for null-terminated copy */ ! int ii; if(12*ilen != (size_t)(12*ilen)) { derror("too much character data!"); exit(9); } istr0 = istr = (char *) emalloc(ilen + 1); ! for(ii = 0; ii < ilen; ii++) { ! istr[ii] = str[ii]; ! } istr[ilen] = '\0'; if (*istr == '\0') { /* empty string input, not legal in FORTRAN */ *************** *** 1146,1152 **** } istr++; ! while (*istr != '\0') { /* handle subsequent characters in input */ if (isprint(*istr)) { if (! was_print) { strcat(cp, "//'"); --- 1152,1158 ---- } istr++; ! for(ii = 1; ii < ilen; ii++) { /* handle subsequent characters in input */ if (isprint(*istr)) { if (! was_print) { strcat(cp, "//'"); Index: load.c diff -c load.c:1.27 load.c:1.28 *** load.c:1.27 Mon Jun 2 08:57:42 1997 --- load.c Wed Jul 2 11:02:53 1997 *************** *** 1,7 **** /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: load.c,v 1.27 1997/06/02 14:57:42 russ Exp $ *********************************************************************/ #include --- 1,7 ---- /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: load.c,v 1.28 1997/07/02 17:02:53 russ Exp $ *********************************************************************/ #include *************** *** 85,104 **** sprintf(stmnt, " static size_t %s_count[RANK_%s];", vars[varnum].name, vars[varnum].name); cline(stmnt); - - for (idim = 0; idim < vars[varnum].ndims; idim++) { - sprintf(s2, "%d%s", - 0, - idim < vars[varnum].ndims-1 ? ", " : "};"); - strncat(stmnt, s2, C_MAX_STMNT - strlen(stmnt) ); - } - - for (idim = 0; idim < vars[varnum].ndims; idim++) { - sprintf(s2, "%ld%s", - dims[vars[varnum].dims[idim]].size, - idim < vars[varnum].ndims-1 ? ", " : "};"); - strncat(stmnt, s2, C_MAX_STMNT - strlen(stmnt) ); - } } /* load variable with data values using static initialization */ --- 85,90 ---- Index: ncgen.y diff -c ncgen.y:1.12 ncgen.y:1.15 *** ncgen.y:1.12 Tue Apr 29 09:48:25 1997 --- ncgen.y Wed Jul 2 11:15:39 1997 *************** *** 1,14 **** /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: ncgen.y,v 1.12 1997/04/29 15:48:25 russ Exp $ *********************************************************************/ /* yacc source for "ncgen", a netCDL parser and netCDF generator */ %{ #ifndef lint ! static char SccsId[] = "$Id: ncgen.y,v 1.12 1997/04/29 15:48:25 russ Exp $"; #endif #include #include --- 1,14 ---- /********************************************************************* * Copyright 1993, UCAR/Unidata * See netcdf/COPYRIGHT file for copying and redistribution conditions. ! * $Id: ncgen.y,v 1.15 1997/07/02 17:15:39 russ Exp $ *********************************************************************/ /* yacc source for "ncgen", a netCDL parser and netCDF generator */ %{ #ifndef lint ! static char SccsId[] = "$Id: ncgen.y,v 1.15 1997/07/02 17:15:39 russ Exp $"; #endif #include #include *************** *** 438,444 **** vars[varnum].fill_value); } /* put out var_len values */ ! vars[varnum].nrecs = var_len / rec_len; if (derror_count == 0) put_variable(rec_start); free ((char *) rec_start); --- 438,444 ---- vars[varnum].fill_value); } /* put out var_len values */ ! vars[varnum].nrecs = valnum / rec_len; if (derror_count == 0) put_variable(rec_start); free ((char *) rec_start); *************** *** 559,567 **** char_valp[i] = '\0'; if (sl < len) sl = len; } - valnum += len; - char_valp += len; rec_cur = (void *) char_valp; } break; --- 559,570 ---- char_valp[i] = '\0'; if (sl < len) sl = len; + valnum += sl; + char_valp += sl; + } else { /* scalar or 1D strings */ + valnum += len; + char_valp += len; } rec_cur = (void *) char_valp; } break; Index: ncgentab.c diff -c ncgentab.c- ncgentab.c *** ncgentab.c- Mon Jun 2 14:39:04 1997 --- ncgentab.c Wed Jul 2 11:25:24 1997 *************** *** 1258,1264 **** vars[varnum].fill_value); } /* put out var_len values */ ! vars[varnum].nrecs = var_len / rec_len; if (derror_count == 0) put_variable(rec_start); free ((char *) rec_start); --- 1258,1264 ---- vars[varnum].fill_value); } /* put out var_len values */ ! vars[varnum].nrecs = valnum / rec_len; if (derror_count == 0) put_variable(rec_start); free ((char *) rec_start); *************** *** 1377,1385 **** char_valp[i] = '\0'; if (sl < len) sl = len; } - valnum += len; - char_valp += len; rec_cur = (void *) char_valp; } break; --- 1377,1388 ---- char_valp[i] = '\0'; if (sl < len) sl = len; + valnum += sl; + char_valp += sl; + } else { /* scalar or 1D strings */ + valnum += len; + char_valp += len; } rec_cur = (void *) char_valp; } break;