From e3bd712e29695bd8b28db45c1deab40af68f51e2 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 7 Dec 2018 23:27:14 -0500 Subject: [PATCH 01/28] Changes for cygwin support and silencing warnings. Registry does not segfault on V3.9.1.1 Some of these fixes should be necessary in general. I have no idea how they aren't causing problems everywhere. em_scm_xy executes without errors, but also without doing more than initialization (no successful completion message). --- arch/Config.pl | 2 +- arch/configure.defaults | 208 ++++++++++++++++++++++++++++++++++++ external/io_netcdf/makefile | 2 +- tools/Makefile | 40 +++---- tools/fseek_test.c | 2 +- tools/gen_allocs.c | 12 +-- tools/gen_args.c | 2 +- tools/gen_comms.c | 15 +++ tools/gen_config.c | 12 ++- tools/gen_defs.c | 4 +- tools/gen_interp.c | 26 ++--- tools/gen_irr_diag.c | 4 +- tools/gen_scalar_indices.c | 2 +- tools/gen_streams.c | 23 +++- tools/gen_wrf_io.c | 14 +-- tools/misc.c | 24 +++-- tools/protos.h | 18 ++++ tools/reg_parse.c | 50 ++++++--- tools/registry.c | 11 +- tools/registry.h | 4 + tools/set_dim_strs.c | 2 +- tools/sym.c | 1 + tools/sym.h | 4 + tools/symtab_gen.c | 10 +- 24 files changed, 400 insertions(+), 92 deletions(-) create mode 100644 tools/gen_comms.c diff --git a/arch/Config.pl b/arch/Config.pl index 7d8173860a..4a1dd86e6a 100644 --- a/arch/Config.pl +++ b/arch/Config.pl @@ -526,7 +526,7 @@ { $_ =~ s/CONFIGURE_WRFIO_PHDF5/wrfio_phdf5/g ; $_ =~ s:CONFIGURE_PHDF5_FLAG:-DPHDF5: ; - $_ =~ s:CONFIGURE_PHDF5_LIB_PATH:-L\$\(WRF_SRC_ROOT_DIR\)/external/io_phdf5 -lwrfio_phdf5 -L$sw_phdf5_path/lib -lhdf5_fortran -lhdf5 -lm -lz -L$sw_phdf5_path/lib -lsz: ; + $_ =~ s:CONFIGURE_PHDF5_LIB_PATH:-L\$\(WRF_SRC_ROOT_DIR\)/external/io_phdf5 -lwrfio_phdf5 -L$sw_phdf5_path/lib -lhdf5_hl -lhdf5 -lm -lz -L$sw_phdf5_path/lib -lsz: ; } else { $_ =~ s/CONFIGURE_WRFIO_PHDF5//g ; diff --git a/arch/configure.defaults b/arch/configure.defaults index 45e1079dd4..dc653b09d2 100644 --- a/arch/configure.defaults +++ b/arch/configure.defaults @@ -1367,6 +1367,214 @@ RANLIB = ranlib RLFLAGS = CC_TOOLS = gcc +########################################################### +#ARCH Linux KNL x86_64 ppc64le i486 i586 i686 #serial smpar dmpar dm+sm +# +DESCRIPTION = INTEL ($SFC/$SCC): KNL MIC +DMPARALLEL = # 1 +OMPCPP = # -D_OPENMP +OMP = # -openmp -fpp -auto +OMPCC = # -openmp -fpp -auto +SFC = ifort +SCC = icc +CCOMP = icc +DM_FC = mpif90 -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) +FC = CONFIGURE_FC +CC = CONFIGURE_CC +LD = $(FC) +RWORDSIZE = CONFIGURE_RWORDSIZE +PROMOTION = -real-size `expr 8 \* $(RWORDSIZE)` -i4 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_FUNC -DWRF_USE_CLM +CFLAGS_LOCAL = -w -O3 -ip -xHost -fp-model fast=2 -no-prec-div -no-prec-sqrt -ftz -no-multibyte-chars -xMIC-AVX512 +LDFLAGS_LOCAL = -ip -xHost -fp-model fast=2 -no-prec-div -no-prec-sqrt -ftz -align all -fno-alias -fno-common -xMIC-AVX512 +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -O3 +FCREDUCEDOPT = $(FCOPTIM) +FCNOOPT = -O0 -fno-inline -no-ip +FCDEBUG = # -g $(FCNOOPT) -traceback # -fpe0 -check noarg_temp_created,bounds,format,output_conversion,pointers,uninit -ftrapuv -unroll0 -u +FORMAT_FIXED = -FI +FORMAT_FREE = -FR +FCSUFFIX = +BYTESWAPIO = -convert big_endian +RECORDLENGTH = -assume byterecl +FCBASEOPTS_NO_G = -ip -fp-model precise -w -ftz -align all -fno-alias $(FORMAT_FREE) $(BYTESWAPIO) -xHost -fp-model fast=2 -no-heap-arrays -no-prec-div -no-prec-sqrt -fno-common -xMIC-AVX512 +FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) +MODULE_SRCH_FLAG = +TRADFLAG = CONFIGURE_TRADFLAG +CPP = /lib/cpp CONFIGURE_CPPFLAGS +AR = ar +ARFLAGS = ru +M4 = m4 +RANLIB = ranlib +RLFLAGS = +CC_TOOLS = $(SCC) + +########################################################### +#ARCH Cygwin i686 x86_64, gfortran compiler with gcc #serial smpar dmpar dm+sm +# +DESCRIPTION = GNU ($SFC/$SCC) +DMPARALLEL = # 1 +OMPCPP = # -D_OPENMP +OMP = # -fopenmp +OMPCC = # -fopenmp +SFC = gfortran +SCC = gcc +CCOMP = gcc +DM_FC = mpif90 -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) +FC = CONFIGURE_FC +CC = CONFIGURE_CC +LD = $(FC) +RWORDSIZE = CONFIGURE_RWORDSIZE +PROMOTION = #-fdefault-real-8 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM -D_WIN32 +CFLAGS_LOCAL = -w -O3 -c +LDFLAGS_LOCAL = +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -O2 -ftree-vectorize -funroll-loops +FCREDUCEDOPT = $(FCOPTIM) +FCNOOPT = -O0 +FCDEBUG = # -g $(FCNOOPT) # -ggdb -fbacktrace +FORMAT_FIXED = -ffixed-form +FORMAT_FREE = -ffree-form -ffree-line-length-none +FCSUFFIX = +BYTESWAPIO = -fconvert=big-endian -frecord-marker=4 +FCBASEOPTS_NO_G = -w $(FORMAT_FREE) $(BYTESWAPIO) +FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) +MODULE_SRCH_FLAG = +TRADFLAG = -traditional +CPP = /lib/cpp -P +AR = ar +ARFLAGS = ru +M4 = m4 -G +RANLIB = ranlib +RLFLAGS = +CC_TOOLS = $(SCC) + +LIB_EXTERNAL = \ + $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ + -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -tirpc -lhdf5_hl -lhdf5 -lm -lz \ + $(WRF_SRC_ROOT_DIR)/external/wavelet/libWavelet.a $(WRF_SRC_ROOT_DIR)/external/wavelet/lib_wavelet.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a +ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a +LIB_BUNDLED = \ + $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib1/libio_grib1.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib_share/libio_grib_share.a \ + $(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \ + $(ESMF_IO_LIB) \ + CONFIGURE_COMMS_LIB \ + $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \ + $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o + +########################################################### +#ARCH Mingw64 i686 x86_64, gfortran compiler with gcc #serial smpar dmpar dm+sm +# +DESCRIPTION = GNU ($SFC/$SCC) +DMPARALLEL = # 1 +OMPCPP = # -D_OPENMP +OMP = # -fopenmp +OMPCC = # -fopenmp +SFC = gfortran +SCC = gcc +CCOMP = gcc +DM_FC = mpif90 -f90=$(SFC) +DM_CC = mpicc -cc=$(SCC) +FC = CONFIGURE_FC +CC = CONFIGURE_CC +LD = $(FC) +RWORDSIZE = CONFIGURE_RWORDSIZE +PROMOTION = #-fdefault-real-8 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM +CFLAGS_LOCAL = -w -O3 -c +LDFLAGS_LOCAL = +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -O2 -ftree-vectorize -funroll-loops +FCREDUCEDOPT = $(FCOPTIM) +FCNOOPT = -O0 +FCDEBUG = # -g $(FCNOOPT) # -ggdb -fbacktrace +FORMAT_FIXED = -ffixed-form +FORMAT_FREE = -ffree-form -ffree-line-length-none +FCSUFFIX = +BYTESWAPIO = -fconvert=big-endian -frecord-marker=4 +FCBASEOPTS_NO_G = -w $(FORMAT_FREE) $(BYTESWAPIO) +FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) +MODULE_SRCH_FLAG = +TRADFLAG = -traditional +CPP = /lib/cpp -P +AR = ar +ARFLAGS = ru +M4 = m4 -G +RANLIB = ranlib +RLFLAGS = +CC_TOOLS = $(SCC) + +LIB_EXTERNAL = \ + $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ + -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -lhdf5_hl -lhdf5 -lm -lz \ + $(WRF_SRC_ROOT_DIR)/external/wavelet/libWavelet.a $(WRF_SRC_ROOT_DIR)/external/wavelet/lib_wavelet.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a +ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a +LIB_BUNDLED = \ + $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib1/libio_grib1.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a \ + $(WRF_SRC_ROOT_DIR)/external/io_grib_share/libio_grib_share.a \ + $(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \ + $(ESMF_IO_LIB) \ + CONFIGURE_COMMS_LIB \ + $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \ + $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o + +#insert new stanza here + +########################################################### +#ARCH Fujitsu FX10/FX100 Linux x86_64 SPARC64IXfx/SPARC64Xlfx, mpifrtpx and mpifccpx compilers #serial smpar dmpar dm+sm +# +DESCRIPTION = FUJITSU ($SFC/$SCC): FX10/FX100 SPARC64 IXfx/Xlfx +DMPARALLEL = # 1 +OMPCPP = # -D_OPENMP +OMP = # -Kopenmp +OMPCC = # -Kopenmp +SFC = frtpx +SCC = fccpx +CCOMP = fccpx +DM_FC = mpifrtpx +DM_CC = mpifccpx -DMPI2_THREAD_SUPPORT # -DMPI2_SUPPORT +FC = CONFIGURE_FC +CC = CONFIGURE_CC +LD = $(FC) +RWORDSIZE = CONFIGURE_RWORDSIZE +PROMOTION = -CcdRR$(RWORDSIZE) +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM +CFLAGS_LOCAL = -Kfast -Xg -DSUN +LDFLAGS_LOCAL = +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -Kfast +FCREDUCEDOPT = $(FCOPTIM) +FCNOOPT = -O0 +FCDEBUG = # -g $(FCNOOPT) +FORMAT_FIXED = -Fixed +FORMAT_FREE = -Free +FCSUFFIX = +BYTESWAPIO = +FCBASEOPTS_NO_G = -Kautoobjstack,ocl -fw $(FORMAT_FREE) $(BYTESWAPIO) $(OMP) +FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) +MODULE_SRCH_FLAG = +TRADFLAG = -traditional +CPP = /lib/cpp -P +AR = ar +ARFLAGS = ru +M4 = m4 +RANLIB = ranlib +RLFLAGS = +CC_TOOLS = /usr/bin/gcc -Wall ########################################################### #ARCH Linux ppc64 BG /L blxlf compiler with blxlc # dmpar diff --git a/external/io_netcdf/makefile b/external/io_netcdf/makefile index 05c7967c38..91b9aaf5c1 100644 --- a/external/io_netcdf/makefile +++ b/external/io_netcdf/makefile @@ -50,7 +50,7 @@ diffwrf: diffwrf.F90 $(FC) -c $(FFLAGS) diffwrf.f @if [ \( -f ../../frame/wrf_debug.o \) -a \( -f ../../frame/module_wrf_error.o \) -a \( -f $(ESMF_MOD_DEPENDENCE) \) -a \( -f ../../frame/clog.o \) ] ; then \ echo "diffwrf io_netcdf is being built now. " ; \ - if [ \( -f $(NETCDFPATH)/lib/libnetcdff.a -o -f $(NETCDFPATH)/lib/libnetcdff.so \) ] ; then \ + if [ \( -f $(NETCDFPATH)/lib/libnetcdff.a -o $(NETCDFPATH)/lib/libnetcdff.dll.a -o -f $(NETCDFPATH)/lib/libnetcdff.so \) ] ; then \ $(FC) $(FFLAGS) $(LDFLAGS) -o diffwrf diffwrf.o $(OBJSL) ../../frame/wrf_debug.o ../../frame/module_wrf_error.o ../../frame/clog.o $(ESMF_IO_LIB_EXT) $(LIBFFS) ;\ else \ $(FC) $(FFLAGS) $(LDFLAGS) -o diffwrf diffwrf.o $(OBJSL) ../../frame/wrf_debug.o ../../frame/module_wrf_error.o ../../frame/clog.o $(ESMF_IO_LIB_EXT) $(LIBS) ;\ diff --git a/tools/Makefile b/tools/Makefile index d2db2161f7..7d6b05bd81 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,9 +1,10 @@ .SUFFIXES: .c .o -CC_TOOLS = cc +CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = -DEBUG = -g +DEBUG = -g3 -ggdb3 -Og -fvar-tracking -fvar-tracking-assignments -gcolumn-info -fbounds-check -fstack-protector-all -fstack-protector-strong -fstack-check +WARNING = -Wall -Wextra -Werror -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-sign-compare -Wno-format-truncation OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_defs.o gen_allocs.o gen_mod_state_descr.o gen_scalar_indices.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ @@ -29,21 +30,22 @@ gen_comms.c : gen_comms.stub # DO NOT DELETE THIS LINE -- make depend depends on it. -data.o: registry.h protos.h data.h -gen_allocs.o: protos.h registry.h data.h -gen_args.o: protos.h registry.h data.h -gen_scalar_derefs.o: protos.h registry.h data.h -gen_config.o: protos.h registry.h data.h -gen_defs.o: protos.h registry.h data.h -gen_mod_state_descr.o: protos.h registry.h data.h -gen_model_data_ord.o: protos.h registry.h data.h -gen_scalar_indices.o: protos.h registry.h data.h -gen_wrf_io.o: protos.h registry.h data.h -misc.o: protos.h registry.h data.h -my_strtok.o: registry.h protos.h data.h -reg_parse.o: registry.h protos.h data.h -registry.o: protos.h registry.h data.h +data.o: registry.h protos.h data.h ../inc/streams.h +gen_allocs.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_args.o: protos.h registry.h data.h ../inc/streams.h +gen_config.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_defs.o: protos.h registry.h data.h ../inc/streams.h +gen_interp.o: protos.h registry.h data.h ../inc/streams.h +gen_mod_state_descr.o: protos.h registry.h data.h ../inc/streams.h +gen_model_data_ord.o: protos.h registry.h data.h ../inc/streams.h +gen_scalar_derefs.o: protos.h registry.h data.h ../inc/streams.h +gen_scalar_indices.o: protos.h registry.h data.h ../inc/streams.h +gen_streams.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_wrf_io.o: protos.h registry.h data.h ../inc/streams.h sym.h +misc.o: protos.h registry.h data.h ../inc/streams.h +my_strtok.o: registry.h protos.h data.h ../inc/streams.h +reg_parse.o: registry.h protos.h data.h ../inc/streams.h sym.h +registry.o: protos.h registry.h data.h ../inc/streams.h sym.h +set_dim_strs.o: protos.h registry.h data.h ../inc/streams.h sym.h sym.o: sym.h -type.o: registry.h protos.h data.h -gen_interp.o: registry.h protos.h data.h -gen_streams.o: registry.h protos.h data.h +type.o: registry.h protos.h data.h ../inc/streams.h diff --git a/tools/fseek_test.c b/tools/fseek_test.c index edd25c6035..a605075ea9 100644 --- a/tools/fseek_test.c +++ b/tools/fseek_test.c @@ -8,7 +8,7 @@ main() FILE *fp ; long long y ; int retval ; - int result1 ; + int result1 = 0 ; #ifdef TEST_FSEEKO off_t x ; off_t result2 ; diff --git a/tools/gen_allocs.c b/tools/gen_allocs.c index 7f0a80182a..40701047ac 100644 --- a/tools/gen_allocs.c +++ b/tools/gen_allocs.c @@ -80,13 +80,13 @@ int gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, int *j, int *iguy, int *fraction, int numguys, int frac, int sw ) /* 1 = allocate, 2 = just count */ { node_t * p ; - int tag ; + int tag = 0 ; char post[NAMELEN], post_for_count[NAMELEN] ; char fname[NAMELEN], dname[NAMELEN], dname_tmp[NAMELEN] ; - char x[NAMELEN] ; - char x2[NAMELEN], fname2[NAMELEN] ; - char dimname[3][NAMELEN] ; - char tchar ; + char x[NAMELEN + 4] ; + char x2[NAMELEN + 2], fname2[NAMELEN] ; + char dimname[3][NAMELEN + 12] ; + char tchar = '\0'; unsigned int *io_mask ; int nd ; int restart ; @@ -607,7 +607,7 @@ gen_dealloc2 ( FILE * fp , char * structname , node_t * node ) int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN] ; + char x[NAMELEN + 4] ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_args.c b/tools/gen_args.c index ea995d4230..014c4dd307 100644 --- a/tools/gen_args.c +++ b/tools/gen_args.c @@ -88,7 +88,7 @@ gen_args1 ( FILE * fp , char * outstr , char * structname , int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN], y[NAMELEN] ; + char x[NAMELEN + 4], y[NAMELEN] ; char indices[NAMELEN] ; int lenarg ; int only4d = 0 ; diff --git a/tools/gen_comms.c b/tools/gen_comms.c new file mode 100644 index 0000000000..b079afe8d5 --- /dev/null +++ b/tools/gen_comms.c @@ -0,0 +1,15 @@ +#include +#include + +#include "protos.h" +#include "registry.h" +#include "data.h" + +int +gen_comms ( char * dirname ) +{ + if ( sw_dm_parallel ) + fprintf(stderr,"WARNING: stub version of gen_comms is linked in with registry program.\n") ; + + return(0) ; +} diff --git a/tools/gen_config.c b/tools/gen_config.c index fc6573975f..da343ff578 100644 --- a/tools/gen_config.c +++ b/tools/gen_config.c @@ -55,7 +55,11 @@ gen_namelist_defaults ( char * dirname ) char *fn = "namelist_defaults.inc" ; node_t *p ; - if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } + if ( strlen(dirname) > 0 ) { + sprintf(fname,"%s/%s",dirname,fn) ; + } else { + sprintf(fname, "%s", fn) ; + } if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; print_warning(fp,fname) ; @@ -129,7 +133,11 @@ gen_namelist_script ( char * dirname ) char howset1[NAMELEN] ; char howset2[NAMELEN] ; - if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } + if ( strlen(dirname) > 0 ) { + sprintf(fname,"%s/%s",dirname,fn) ; + } else { + sprintf(fname, "%s", fn) ; + } if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; sym_forget() ; diff --git a/tools/gen_defs.c b/tools/gen_defs.c index 020bbac3b7..fef98474dd 100644 --- a/tools/gen_defs.c +++ b/tools/gen_defs.c @@ -90,7 +90,7 @@ int gen_i1_decls ( char * dn ) { FILE * fp ; - char fname[NAMELEN], post[NAMELEN] ; + char fname[NAMELEN+6], post[NAMELEN+6] ; char * fn = "i1_decl.inc" ; char * dimspec ; node_t * p ; @@ -140,7 +140,7 @@ gen_decls ( FILE * fp , node_t * node , int sw_ranges, int sw_point , int mask , node_t * p ; int tag, ipass ; char fname[NAMELEN], post[NAMELEN] ; - char * dimspec ; + char * dimspec = ""; int bdyonly = 0 ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_interp.c b/tools/gen_interp.c index a4a504228c..c35670cff2 100644 --- a/tools/gen_interp.c +++ b/tools/gen_interp.c @@ -66,7 +66,7 @@ int contains_tok( char *s1, char *s2, char *delims ) /* Had to increase size for SOA from 4*4096 to 4*7000 */ -char halo_define[4*7000], halo_use[NAMELEN], halo_id[NAMELEN], x[NAMELEN] ; +char halo_define[4*7000], halo_use[NAMELEN] = {'\0'}, halo_id[NAMELEN], x[NAMELEN + 1] ; /*KAL added this for vertical interpolation */ /*DJW 131202 modified to create files required for vertical interpolation from parent to nest */ @@ -130,7 +130,7 @@ else if ( down_path[ipath] == FORCE_DOWN ) { sprintf(halo_id,"HALO_FORCE_DOWN") else if ( down_path[ipath] == INTERP_UP ) { sprintf(halo_id,"HALO_INTERP_UP") ; } else if ( down_path[ipath] == SMOOTH_UP ) { sprintf(halo_id,"HALO_INTERP_SMOOTH") ; } sprintf(halo_define,"80:") ; -sprintf(halo_use,"") ; + halo_use[0] = '\0' ; gen_nest_interp1 ( fp , Domain.fields, NULL, down_path[ipath], (down_path[ipath]==FORCE_DOWN)?2:2 ) ; { node_t * comm_struct ; @@ -168,8 +168,8 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , char nddim2[3][2][NAMELEN] ; char nmdim2[3][2][NAMELEN] ; char npdim2[3][2][NAMELEN] ; - char vname[NAMELEN], vname2[NAMELEN] ; - char tag[NAMELEN], tag2[NAMELEN] ; + char vname[NAMELEN + 12], vname2[NAMELEN + 12] ; + char tag[NAMELEN] = {'\0'}, tag2[NAMELEN] = {'\0'} ; char fcn_name[NAMELEN] ; char xstag[NAMELEN], ystag[NAMELEN] ; char dexes[NAMELEN] ; @@ -200,7 +200,7 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , if ( nest_mask & down_path ) { if ( p->ntl > 1 ) { sprintf(tag,"_2") ; sprintf(tag2,"_%d", use_nest_time_level) ; } - else { sprintf(tag,"") ; sprintf(tag2,"") ; } + else { tag[0] = '\0'; tag2[0] = '\0'; } /* construct variable name */ if ( p->node_kind & FOURD ) { @@ -359,7 +359,7 @@ fprintf(fp," ngrid%%i_parent_start, ngrid%%j_parent_start, fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio &\n") ; { - char tmpstr[NAMELEN], *p1 ; + char tmpstr[NAMELEN + 7], *p1 ; node_t * nd, * pp ; pp = NULL ; if ( p->node_kind & FOURD ) { @@ -377,10 +377,10 @@ fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio strcpy( tmpstr , pp->interpu_aux_fields ) ; } else if ( down_path & FORCE_DOWN ) { /* by default, add the boundary and boundary tendency fields to the arg list */ - if ( ! p->node_kind & FOURD ) { - sprintf( tmpstr , "%s_b,%s_bt,", pp->name, pp->name ) ; + if ( ! (p->node_kind & FOURD) ) { + snprintf( tmpstr , NAMELEN , "%s_b,%s_bt,", pp->name, pp->name ) ; } else { - sprintf( tmpstr , "%s_b,%s_bt,", p->name, p->name ) ; + snprintf( tmpstr , NAMELEN , "%s_b,%s_bt,", p->name, p->name ) ; } strcat( tmpstr , pp->force_aux_fields ) ; } else if ( down_path & INTERP_DOWN ) { @@ -507,7 +507,7 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; char pdim[3][2][NAMELEN] ; - char vname[NAMELEN], vname2[NAMELEN] ; + char vname[NAMELEN + 12], vname2[NAMELEN + 12] ; char tag[NAMELEN], tag2[NAMELEN] ; char dexes[NAMELEN] ; char ndexes[NAMELEN] ; @@ -546,11 +546,11 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , set_dim_strs2 ( p , ddim , mdim , pdim , "", 1 ) ; } if ( !strcmp ( ddim[0][1], "kde") || - ( ddim[1][1], "kde") || - ( ddim[2][1], "kde")) { + !strcmp ( ddim[1][1], "kde") || + !strcmp ( ddim[2][1], "kde")) { if ( p->ntl > 1 ) { sprintf(tag,"_2") ; sprintf(tag2,"_%d", use_nest_time_level) ; } - else { sprintf(tag,"") ; sprintf(tag2,"") ; } + else { tag[0] = '\0'; tag2[0] = '\0'; } /* construct variable name */ if ( p->node_kind & FOURD ) { diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 40c4219450..50332809ea 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -5,6 +5,7 @@ #include #include #include +#include int nChmOpts = 0; char rxt_tbl[5][1000][128]; @@ -71,6 +72,7 @@ int AppendReg( char *chem_opt, int ndx ) if( fp_reg == NULL ) { fprintf(stderr,"Can not open registry.irr_diag for writing\n"); + fclose(fp_eqn); return(-2); } strcpy( buffer,"\"Integrated Reaction Rate\" \"\""); @@ -275,7 +277,7 @@ int irr_diag_scalar_indices( char *dirname ) fprintf( fp_inc,line ); fprintf( fp_inc," \n"); - for( i = 0; i < nChmOpts,rxt_cnt[i] > 0; i++ ) { + for( i = 0; /*i < nChmOpts &&*/ rxt_cnt[i] > 0; i++ ) { for( j = 0; j < rxt_cnt[i]; j++ ) { sprintf( line," rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); fprintf( fp_inc,"%s",line); diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index a24d75ee3c..a4e8e82949 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -117,7 +117,7 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) node_t * p, * memb , * pkg, * rconfig, * fourd, *x ; char * c , *pos1, *pos2 ; char assoc_namelist_var[NAMELEN], assoc_namelist_choice[NAMELEN], assoc_4d[NAMELEN_LONG], fname[NAMELEN_LONG] ; - char fname2[NAMELEN], tmp1[NAMELEN], tmp2[NAMELEN] ; + char fname2[NAMELEN], tmp1[NAMELEN + 5], tmp2[NAMELEN + 4] ; char scalars_str[NAMELEN_LONG] ; char * scalars ; int i ; diff --git a/tools/gen_streams.c b/tools/gen_streams.c index f93cf3989d..6f10befcd1 100644 --- a/tools/gen_streams.c +++ b/tools/gen_streams.c @@ -10,6 +10,25 @@ #include "data.h" #include "sym.h" +int gen_io_domain_defs ( FILE * fp ); +int gen_io_boilerplate (); +int gen_med_find_esmf_coupling ( FILE *fp ); +int gen_shutdown_closes ( FILE *fp ); +int gen_med_open_esmf_calls ( FILE *fp ); +int gen_med_last_solve_io ( FILE *fp ); +int gen_med_auxinput_in_closes ( FILE *fp ); +int gen_med_hist_out_closes ( FILE *fp ); +int gen_med_hist_out_opens ( FILE *fp ); +int gen_med_auxinput_in ( FILE *fp ); +int gen_fine_stream_input ( FILE *fp ); +int gen_check_auxstream_alarms ( FILE *fp ); +int gen_switches_and_alarms ( FILE *fp ); +int gen_io_form_for_stream ( FILE *fp ); +int gen_io_form_for_dataset ( FILE *fp ); +int gen_set_timekeeping_alarms ( FILE * fp ); +int gen_set_timekeeping_defs ( FILE *fp ); + + int gen_streams( char * dirname ) { FILE * fp ; @@ -539,7 +558,7 @@ gen_shutdown_closes ( FILE *fp ) } /* generate the calls that main/wrf_ESMFMod.F uses in wrf_state_populate() */ -gen_med_open_esmf_calls ( FILE *fp ) +int gen_med_open_esmf_calls ( FILE *fp ) { int i ; for ( i = 1 ; i < MAX_HISTORY ; i++ ) @@ -569,7 +588,7 @@ gen_med_open_esmf_calls ( FILE *fp ) } /* generate the calls that main/wrf_ESMFMod.F uses in wrf_state_populate() */ -gen_med_find_esmf_coupling ( FILE *fp ) +int gen_med_find_esmf_coupling ( FILE *fp ) { int i ; for ( i = 1 ; i < MAX_HISTORY ; i++ ) diff --git a/tools/gen_wrf_io.c b/tools/gen_wrf_io.c index 87c539b6e0..e412731a0a 100644 --- a/tools/gen_wrf_io.c +++ b/tools/gen_wrf_io.c @@ -50,7 +50,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no node_t * p ; int i , ii ; char x[NAMELEN], tag[NAMELEN], dexes[NAMELEN] ; - char dname[NAMELEN], dname_tmp[NAMELEN] ; + char dname[NAMELEN + 6], dname_tmp[NAMELEN] ; char vname[NAMELEN], vname_x[NAMELEN],vname_1[NAMELEN], vname_2[NAMELEN], memord[NAMELEN] ; char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; @@ -85,7 +85,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no { - if ( p->ndims > 3 && ! p->node_kind & FOURD ) continue ; /* short circuit anything with more than 3 dims, (not counting 4d arrays) */ + if ( p->ndims > 3 && ! (p->node_kind & FOURD) ) continue ; /* short circuit anything with more than 3 dims, (not counting 4d arrays) */ if ( p->node_kind & I1 ) continue ; /* short circuit anything that's not a state var */ @@ -115,8 +115,8 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no int ibdy ; int idx ; node_t *fourd_bound_array ; - char *bdytag, *xdomainend, *ydomainend, *zdomainend, bdytag2[10],fourd_bnd[NAMELEN] ; - char *ds1,*de1,*ds2,*de2,*ds3,*de3,*ms1,*me1,*ms2,*me2,*ms3,*me3,*ps1,*pe1,*ps2,*pe2,*ps3,*pe3 ; + char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="", bdytag2[10],fourd_bnd[NAMELEN + 2] ; + char *ds1="",*de1="",*ds2="",*de2="",*ds3="",*de3="",*ms1="",*me1="",*ms2="",*me2="",*ms3="",*me3="",*ps1="",*pe1="",*ps2="",*pe2="",*ps3="",*pe3="" ; #if ( WRFPLUS == 1 ) /* adjoint and perturbation variables should not be inputed*/ @@ -276,12 +276,12 @@ fprintf(fp, "ENDDO\n") ; /* //////// BOUNDARY ///////////////////// */ - if ( p->boundary && strcmp( p->use, "_4d_bdy_array_" ) || ( p->boundary && fourdname ) ) + if ( (p->boundary && strcmp( p->use, "_4d_bdy_array_" )) || ( p->boundary && fourdname ) ) { int ibdy ; int idx ; - char *bdytag, *xdomainend, *ydomainend, *zdomainend ; - char *ds1,*de1,*ds2,*de2,*ds3,*de3,*ms1,*me1,*ms2,*me2,*ms3,*me3,*ps1,*pe1,*ps2,*pe2,*ps3,*pe3 ; + char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="" ; + char *ds1="",*de1="",*ds2="",*de2="",*ds3="",*de3="",*ms1="",*me1="",*ms2="",*me2="",*ms3="",*me3="",*ps1="",*pe1="",*ps2="",*pe2="",*ps3="",*pe3="" ; char t1[64], t2[64] ; #if ( WRFPLUS == 1 ) diff --git a/tools/misc.c b/tools/misc.c index e0a00938dc..2bff1d0971 100644 --- a/tools/misc.c +++ b/tools/misc.c @@ -91,7 +91,7 @@ dimension_with_ranges( char * refarg , char * pre , int i ; char tx[NAMELEN] ; char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; - int bdex, xdex, ydex, zdex ; + int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; if ( p == NULL ) return("") ; @@ -182,7 +182,7 @@ index_with_firstelem( char * pre , char * dref , int bdy , /* as defined in dat char tx[NAMELEN] ; char tmp2[NAMELEN] ; /* SamT: bug fix: zdex is used but never set */ - int bdex, xdex, ydex, zdex=-999 ; + int bdex = 0, xdex, ydex, zdex=-999 ; node_t *xdim, *ydim, *zdim ; char r[NAMELEN] ; @@ -260,7 +260,7 @@ int get_elem ( char * structname , char * nlstructname , char * tx , int i , node_t * p , int first_last ) { char dref[NAMELEN], nlstruct[NAMELEN] ; - char d, d1 ; + char d, d1 = '\0' ; if ( structname == NULL ) { strcpy( dref, "" ) ;} else { strcpy( dref, structname ) ; } @@ -300,13 +300,15 @@ get_elem ( char * structname , char * nlstructname , char * tx , int i , node_t } break ; case (NAMELIST) : - if ( first_last == 0 ) { if ( !strcmp( p->dims[i]->assoc_nl_var_s , "1" ) ) { - sprintf(tx,"%s",p->dims[i]->assoc_nl_var_s) ; - } else { - sprintf(tx,"%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; - } - } - else { sprintf(tx,"%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; } + if ( first_last == 0 ) { + if ( !strcmp( p->dims[i]->assoc_nl_var_s , "1" ) ) { + snprintf(tx, NAMELEN,"%s",p->dims[i]->assoc_nl_var_s) ; + } else { + snprintf(tx,NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; + } + } else { + snprintf(tx, NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; + } break ; case (CONSTANT) : if ( first_last == 0 ) { sprintf(tx,"%d",p->dims[i]->coord_start) ; } @@ -561,7 +563,7 @@ array_size_expression ( char * refarg , char * pre , int i ; char tx[NAMELEN] ; char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; - int bdex, xdex, ydex, zdex ; + int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; if ( p == NULL ) return("") ; diff --git a/tools/protos.h b/tools/protos.h index 0191e8f4af..1180a5690a 100644 --- a/tools/protos.h +++ b/tools/protos.h @@ -4,7 +4,12 @@ int init_dim_table() ; int make_lower( char * s1 ) ; +char *make_lower_case ( char * str ) ; +char *make_upper_case ( char * str ) ; int reg_parse( FILE * infile ) ; +int init_parser() ; +int pre_parse( char * dir, FILE * infile, FILE * outfile ) ; +int check_dimspecs() ; int set_dim_len ( char * dimspec , node_t * dim_entry ) ; int set_dim_order ( char * dimorder , node_t * dim_entry ) ; int set_dim_orient ( char * dimorient , node_t * dim_entry ) ; @@ -68,16 +73,24 @@ char * get_typename_i(int i) ; int gen_alloc ( char * dirname ) ; int gen_alloc1 ( char * dirname ) ; int gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, int *j, int *iguy, int *fraction, int numguys, int frac, int sw ); +int gen_comms ( char * dirname ); +int gen_streams( char * dirname ); +int gen_io_boilerplate (); int gen_module_state_description ( char * dirname ) ; int gen_module_state_description1 ( FILE * fp , node_t * node ) ; int gen_scalar_indices ( char * dirname ) ; int gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) ; +int gen_nest_interp ( char * dirname ); +int gen_nest_v_interp ( char * dirname ); int gen_actual_args ( char * dirname ) ; +int gen_actual_args_new ( char * dirname ) ; int gen_dummy_args ( char * dirname ) ; +int gen_dummy_args_new ( char * dirname ) ; int gen_dummy_decls ( char * dn ) ; +int gen_dummy_decls_new ( char * dn ) ; int gen_args ( char * dirname , int sw ) ; int gen_args1 ( FILE * fp , char * outstr, char * structname , node_t * node , int *linelen , int sw , int deep ) ; @@ -105,6 +118,7 @@ int gen_wrf_io2 ( FILE * fp , char * fname , char * structname , char * fourdnam int gen_namelist_defines ( char * dirname , int sw_dimension ) ; int gen_namelist_defaults ( char * dirname ) ; int gen_namelist_script ( char * dirname ) ; +int gen_namelist_statements ( char * dirname ) ; int gen_model_data_ord ( char * dirname ) ; @@ -119,6 +133,9 @@ int range_of_dimension ( char *, char * , int, node_t *, char * ); int dimension_size_expression ( char *, char *, int, node_t *, char *); int gen_alloc_count ( char *); int gen_alloc_count1 ( char *); +int gen_comms ( char * dirname ); +int gen_streams( char * dirname ); +int gen_io_boilerplate (); int gen_ddt_write ( char * ); int gen_ddt_write1 ( FILE *, char *, node_t *); int gen_dealloc ( char * ); @@ -130,6 +147,7 @@ int irr_diag_scalar_indices ( char * ); int gen_scalar_tables_init ( FILE *); int gen_scalar_indices_init ( FILE *); int hash(char *); +int gen_nest_interp ( char * dirname ); int gen_nest_interp1 ( FILE *, node_t *, char *, int, int ); #if ( WRFPLUS == 1 ) int gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, int nta /* 0=NLM,1=TLM,2=ADM */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); diff --git a/tools/reg_parse.c b/tools/reg_parse.c index 01176c0ea4..41c02dea41 100644 --- a/tools/reg_parse.c +++ b/tools/reg_parse.c @@ -91,15 +91,16 @@ int pre_parse( char * dir, FILE * infile, FILE * outfile ) { /* Decreased size for SOA from 8192 to 8000--double check if necessary, Manish Shrivastava 2010 */ - char inln[8000], parseline[8000], parseline_save[8000] ; + char inln[8000], parseline[8000] = {'\0'}, parseline_save[8000] ; int found ; char *p, *q ; char *tokens[MAXTOKENS], *toktmp[MAXTOKENS], newdims[NAMELEN_LONG], newdims4d[NAMELEN_LONG],newname[NAMELEN_LONG] ; - int i, ii, len_of_tok ; + unsigned int i, ii; + ssize_t len_of_tok = 0; char x, xstr[NAMELEN_LONG] ; - int is4d, wantstend, wantsbdy ; - int ifdef_stack_ptr = 0 ; - int ifdef_stack[100] ; + unsigned char is4d = 0, wantstend = 0, wantsbdy = 0 ; + signed char ifdef_stack_ptr = 0 ; + int ifdef_stack[100] = {1} ; int inquote, retval ; ifdef_stack[0] = 1 ; @@ -139,7 +140,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 5 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* I have no clue what the next line was trying to say */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } ifdef_stack_ptr++ ; ifdef_stack[ifdef_stack_ptr] = ( sym_get(value) != NULL && ifdef_stack[ifdef_stack_ptr-1] ) ; if ( ifdef_stack_ptr >= 100 ) { fprintf(stderr,"Registry fatal: too many nested ifdefs\n") ; exit(1) ; } @@ -150,7 +157,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 6 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* I have no idea what the next line was trying to accomplish */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } ifdef_stack_ptr++ ; ifdef_stack[ifdef_stack_ptr] = ( sym_get(value) == NULL && ifdef_stack[ifdef_stack_ptr-1] ) ; if ( ifdef_stack_ptr >= 100 ) { fprintf(stderr,"Registry fatal: too many nested ifdefs\n") ; exit(1) ; } @@ -166,7 +179,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 6 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* Another instance of this distinctly odd pattern */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } sym_add( value ) ; continue ; } @@ -236,7 +255,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) } sprintf(xstr,"%c",x) ; if ( x != 'b' || inbrace ) strcat ( newdims , xstr ) ; - if ( x != 'f' && x != 't' || inbrace ) strcat( newdims4d , xstr ) ; + if ( (x != 'f' && x != 't') || inbrace ) strcat( newdims4d , xstr ) ; } if ( wantsbdy ) { @@ -305,7 +324,8 @@ reg_parse( FILE * infile ) char inln[7000], parseline[7000] ; char *p, *q ; char *tokens[MAXTOKENS], *toktmp[MAXTOKENS] ; - int i, ii, idim ; + unsigned int i, ii; + int idim ; int defining_state_field, defining_rconfig_field, defining_i1_field ; parseline[0] = '\0' ; @@ -477,7 +497,7 @@ reg_parse( FILE * infile ) char prev = '\0' ; char x ; char tmp[NAMELEN], tmp1[NAMELEN], tmp2[NAMELEN] ; - int len_of_tok ; + ssize_t len_of_tok = 0 ; char fcn_name[2048], aux_fields[2048] ; strcpy(tmp,tokens[FIELD_IO]) ; @@ -508,7 +528,7 @@ reg_parse( FILE * infile ) if (( pp = index(tmp2,'}') ) != NULL ) { *pp = '\0' ; unitid = atoi(tmp2) ; /* JM 20100416 */ - if ( unitid >= 0 || unitid < MAX_STREAMS && stream + unitid < MAX_HISTORY ) { + if ( unitid >= 0 || (unitid < MAX_STREAMS && stream + unitid < MAX_HISTORY) ) { set_mask( mask , stream + unitid ) ; } p = p + strlen(tmp2) + 1 ; @@ -535,7 +555,7 @@ reg_parse( FILE * infile ) *pp = '\0' ; iii = pp - (tmp + i + 1) ; unitid = atoi(tmp+i+1) ; /* JM 20091102 */ - if ( unitid >= 0 || unitid < MAX_STREAMS && unitid < MAX_HISTORY ) { + if ( unitid >= 0 || (unitid < MAX_STREAMS && unitid < MAX_HISTORY) ) { if ( prev == 'i' ) { set_mask( field_struct->io_mask , unitid + MAX_HISTORY ) ; } else if ( prev == 'h' ) { @@ -1057,7 +1077,7 @@ check_dimspecs() p->assoc_nl_var_s,p->name ) ; return(1) ; } - if ( ! q->node_kind & RCONFIG ) + if ( ! (q->node_kind & RCONFIG) ) { fprintf(stderr,"WARNING: no namelist variable %s defined for dimension %s\n", p->assoc_nl_var_s,p->name ) ; @@ -1082,7 +1102,7 @@ check_dimspecs() p->assoc_nl_var_e,p->name ) ; return(1) ; } - if ( ! q->node_kind & RCONFIG ) + if ( ! (q->node_kind & RCONFIG) ) { fprintf(stderr,"WARNING: no namelist variable %s defined for dimension %s\n", p->assoc_nl_var_e,p->name ) ; diff --git a/tools/registry.c b/tools/registry.c index 79f7983ed7..b2e80b7605 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -1,16 +1,15 @@ #include #include #ifdef _WIN32 +#define rindex(X,Y) strrchr(X,Y) +#define index(X,Y) strchr(X,Y) +#endif # include -# define rindex(X,Y) strrchr(X,Y) -# define index(X,Y) strchr(X,Y) -#else # include # include # include # include # include -#endif #define DEFINE_GLOBALS #include "protos.h" @@ -20,7 +19,7 @@ /* SamT: bug fix: main returns int */ int -main( int argc, char *argv[], char *env[] ) +main( int argc, char *argv[] ) { char fname_in[NAMELEN], dir[NAMELEN], fname_tmp[NAMELEN], command[NAMELEN] ; char fname_wrk[NAMELEN] ; @@ -34,7 +33,7 @@ main( int argc, char *argv[], char *env[] ) #endif mypid = (int) getpid() ; - strcpy( thiscom, argv[0] ) ; + strncpy( thiscom, argv[0], 4 * NAMELEN - 1) ; argv++ ; sw_deref_kludge = 0 ; diff --git a/tools/registry.h b/tools/registry.h index 0a2e627ffd..cafde2ad4e 100644 --- a/tools/registry.h +++ b/tools/registry.h @@ -1,4 +1,8 @@ #ifndef REGISTRY_H +#include +#include +#include + #define NAMELEN 512 #define NAMELEN_LONG 125000 #define MAXDIMS 21 diff --git a/tools/set_dim_strs.c b/tools/set_dim_strs.c index 91d75b127c..491ffd8702 100644 --- a/tools/set_dim_strs.c +++ b/tools/set_dim_strs.c @@ -18,7 +18,7 @@ set_dim_strs_x ( node_t *node , char ddim[3][2][NAMELEN], char mdim[3][2][NAMELE { int i, j, ii ; node_t *p ; - char d, d1 ; + char d = '\0', d1 = '\0' ; char * stag ; char r1[NAMELEN] ; diff --git a/tools/sym.c b/tools/sym.c index de41c2d965..1097ad7065 100644 --- a/tools/sym.c +++ b/tools/sym.c @@ -150,6 +150,7 @@ sym_nodeptr x ; int sym_forget() { + /* for (int i = 0; i < SIZEOF_SYMTAB; i++); free(symtab[i]); free(symtab); */ create_ht( &symtab ) ; if (symtab == NULL) { diff --git a/tools/sym.h b/tools/sym.h index 9431f5d2b8..c919a3e427 100644 --- a/tools/sym.h +++ b/tools/sym.h @@ -55,6 +55,7 @@ ***************************************************************************/ #ifndef SYM_H #define SYM_H +#include /* file: sym.h @@ -91,5 +92,8 @@ struct sym_node sym_nodeptr sym_add() ; sym_nodeptr sym_get() ; +int sym_forget(); +int create_ht( char *** p ) ; + #endif diff --git a/tools/symtab_gen.c b/tools/symtab_gen.c index 47870f6c88..507d2aefe2 100644 --- a/tools/symtab_gen.c +++ b/tools/symtab_gen.c @@ -36,9 +36,15 @@ For a sample main or calling program see the end of this file. #ifndef _WIN32 # include #endif +#include #define HASHSIZE 1024 +#include "sym.h" +int sym_forget(); +int create_ht( char *** p ) ; +int hash(char * name); + /* commented out 2-29-90 static char * symtab[HASHSIZE] ; */ @@ -46,7 +52,7 @@ static char * symtab[HASHSIZE] ; void * malloc() ; void * calloc() ; -char * symget(name,newnode,nodename,nodenext,symtab,flag) +sym_nodeptr symget(name,newnode,nodename,nodenext,symtab,flag) char *name ; char *(*newnode)(), **(*nodename)(), **(*nodenext)() ; char *symtab[] ; @@ -91,7 +97,7 @@ int flag ; /* 1 is create if not there, 0 return NULL if not there */ } } - return(p) ; + return ((sym_nodeptr) p) ; } int From 4b4597590929edb2e5764e023e597829eea5a85f Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 14 Dec 2018 18:49:02 -0500 Subject: [PATCH 02/28] Ignore many other files that seem to be auto-generated. I don't feel like seeing notifications that I'm not paying attention to files I haven't touched. --- .gitignore | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.gitignore b/.gitignore index da7855287a..4d34ab93e5 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,26 @@ configure.wrf* *.backup *.f90 + +*.o +*.a +*.mod +*.f90 +*.exe +Registry_tmp.* +configure.wrf* +*.log +in_use_for_config_*.inc +Registry/Registry* +namelist.input.backup.* + + +*.patch +*.orig +*.rej +*.bak +*~ +\#*\# +*.stackdump + +test/*/* From 83e29df07e6506709257a4d8a256001606f15388 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Sun, 16 Dec 2018 11:06:48 -0500 Subject: [PATCH 03/28] Quiet more compiler warnings. Mostly from -Wsign-compare, -Wformat-truncation, and -Wformat-overflow; some from -Wmaybe-uninitialized. --- inc/streams.h | 7 ++++++- tools/Makefile | 5 ++++- tools/gen_interp.c | 6 +++--- tools/gen_scalar_indices.c | 7 +++++-- tools/gen_streams.c | 10 +++++----- tools/misc.c | 24 ++++++++++++------------ tools/protos.h | 1 + tools/reg_parse.c | 7 ++++--- tools/registry.c | 9 +++++---- tools/type.c | 6 +++--- 10 files changed, 48 insertions(+), 34 deletions(-) diff --git a/inc/streams.h b/inc/streams.h index 645b02d855..07e2b019e4 100644 --- a/inc/streams.h +++ b/inc/streams.h @@ -1,5 +1,10 @@ #ifndef MAX_HISTORY -# define MAX_HISTORY 12 +# define MAX_HISTORY ((unsigned char) 12) +# if (MAX_HISTORY > 120) +# warning If changing MAX_HISTORY to be above 120, check uses, loop variables, +# warning and destination string buffers to ensure the types used are wide +# warning enough. Enabling compiler warnings for format strings should help. +# endif #endif #ifndef IWORDSIZE # define IWORDSIZE 4 diff --git a/tools/Makefile b/tools/Makefile index 7d6b05bd81..7046d635c9 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -4,7 +4,9 @@ CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = DEBUG = -g3 -ggdb3 -Og -fvar-tracking -fvar-tracking-assignments -gcolumn-info -fbounds-check -fstack-protector-all -fstack-protector-strong -fstack-check -WARNING = -Wall -Wextra -Werror -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wno-sign-compare -Wno-format-truncation +DEBUG = -Os -g +WARNING = -Wall -Wextra -Werror +GCC_WARNING = -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wformat=2 -Wformat-truncation=2 -Wformat-overflow=2 -Wno-format-security -Wno-format-nonliteral -Wno-sign-compare OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_defs.o gen_allocs.o gen_mod_state_descr.o gen_scalar_indices.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ @@ -13,6 +15,7 @@ OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ registry : $(OBJ) standard.exe $(CC_TOOLS) -o registry $(DEBUG) $(LDFLAGS) $(OBJ) + if which peflags; then peflags --stack-reserve=33554432 registry; fi standard.exe : standard.o $(CC_TOOLS) -o standard.exe $(DEBUG) $(LDFLAGS) standard.o diff --git a/tools/gen_interp.c b/tools/gen_interp.c index c35670cff2..0452d654f4 100644 --- a/tools/gen_interp.c +++ b/tools/gen_interp.c @@ -359,7 +359,7 @@ fprintf(fp," ngrid%%i_parent_start, ngrid%%j_parent_start, fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio &\n") ; { - char tmpstr[NAMELEN + 7], *p1 ; + char tmpstr[2 * NAMELEN + 8], *p1 ; node_t * nd, * pp ; pp = NULL ; if ( p->node_kind & FOURD ) { @@ -378,9 +378,9 @@ fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio } else if ( down_path & FORCE_DOWN ) { /* by default, add the boundary and boundary tendency fields to the arg list */ if ( ! (p->node_kind & FOURD) ) { - snprintf( tmpstr , NAMELEN , "%s_b,%s_bt,", pp->name, pp->name ) ; + snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", pp->name, pp->name ) ; } else { - snprintf( tmpstr , NAMELEN , "%s_b,%s_bt,", p->name, p->name ) ; + snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", p->name, p->name ) ; } strcat( tmpstr , pp->force_aux_fields ) ; } else if ( down_path & INTERP_DOWN ) { diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index a4e8e82949..d7b1111194 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -128,8 +128,11 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) for ( p = FourD ; p != NULL ; p = p->next ) { if( strncmp( p->name,"irr_diag",8 ) ) { - for ( memb = p->members ; memb != NULL ; memb = memb->next ) - if ( strcmp(memb->name,"-") ) fprintf(fp," P_%s = 1 ; F_%s = .FALSE. \n", memb->name, memb->name ) ; + for ( memb = p->members ; memb != NULL ; memb = memb->next ) { + if ( strcmp(memb->name,"-") ) { + fprintf(fp," P_%s = 1 ; F_%s = .FALSE. \n", memb->name, memb->name); + } + } } } diff --git a/tools/gen_streams.c b/tools/gen_streams.c index 6f10befcd1..f8c4b19b5e 100644 --- a/tools/gen_streams.c +++ b/tools/gen_streams.c @@ -179,7 +179,7 @@ gen_io_domain_defs ( FILE * fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } @@ -207,7 +207,7 @@ gen_set_timekeeping_defs ( FILE *fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } @@ -241,7 +241,7 @@ gen_set_timekeeping_alarms ( FILE * fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } if ( i == 0 ) continue ; /* skip just input */ @@ -324,7 +324,7 @@ int gen_io_form_for_dataset ( FILE *fp ) { char * aux , *streamtype , streamno[5] ; - int i ; + unsigned char i ; fprintf(fp," IF ( DataSet .eq. 'RESTART' ) THEN\n") ; fprintf(fp," CALL nl_get_io_form_restart( 1, io_form )\n") ; @@ -352,7 +352,7 @@ int gen_io_form_for_stream ( FILE *fp ) { char * aux , *streamtype , streamno[5] ; - int i ; + unsigned char i ; fprintf(fp," IF ( stream .eq. restart_only ) THEN\n") ; fprintf(fp," CALL nl_get_io_form_restart( 1, io_form )\n") ; diff --git a/tools/misc.c b/tools/misc.c index 2bff1d0971..c7977396e1 100644 --- a/tools/misc.c +++ b/tools/misc.c @@ -15,7 +15,7 @@ char * dimension_with_colons( char * pre , char * tmp , node_t * p , char * post ) { - int i ; + unsigned int i ; if ( p == NULL ) return("") ; if ( p->ndims <= 0 && ! p->boundary_array ) return("") ; strcpy(tmp,"") ; @@ -42,7 +42,7 @@ dimension_with_colons( char * pre , char * tmp , node_t * p , char * post ) char * dimension_with_ones( char * pre , char * tmp , node_t * p , char * post ) { - int i ; + unsigned int i ; char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; char *pp ; if ( p == NULL ) return("") ; @@ -88,7 +88,7 @@ dimension_with_ranges( char * refarg , char * pre , which a namelist supplied dimension should be dereference from, or "" */ { - int i ; + unsigned int i ; char tx[NAMELEN] ; char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; int bdex = 0, xdex, ydex, zdex ; @@ -178,8 +178,8 @@ char * index_with_firstelem( char * pre , char * dref , int bdy , /* as defined in data.h */ char * tmp , node_t * p , char * post ) { - int i ; - char tx[NAMELEN] ; + unsigned int i ; + char tx[NAMELEN * 3] = {'\0'} ; char tmp2[NAMELEN] ; /* SamT: bug fix: zdex is used but never set */ int bdex = 0, xdex, ydex, zdex=-999 ; @@ -288,26 +288,26 @@ get_elem ( char * structname , char * nlstructname , char * tx , int i , node_t if ( p->dims[i]->subgrid ) { if ( first_last == 0 ) { /*first*/ - sprintf(tx,"(%ssm3%d%s-1)*%ssr_%c+1",dref,p->dims[i]->dim_order,ornt,dref,d1) ; + snprintf(tx, 3 * NAMELEN, "(%ssm3%d%s-1)*%ssr_%c+1",dref,p->dims[i]->dim_order,ornt,dref,d1) ; }else{ /*last*/ - sprintf(tx,"%sem3%d%s*%ssr_%c" ,dref,p->dims[i]->dim_order,ornt,dref,d1) ; + snprintf(tx, 3 * NAMELEN, "%sem3%d%s*%ssr_%c" ,dref,p->dims[i]->dim_order,ornt,dref,d1) ; } } else { - sprintf(tx,"%s%cm3%d%s",dref,first_last==0?'s':'e',p->dims[i]->dim_order,ornt) ; + snprintf(tx, 3 * NAMELEN, "%s%cm3%d%s",dref,first_last==0?'s':'e',p->dims[i]->dim_order,ornt) ; } } break ; case (NAMELIST) : if ( first_last == 0 ) { if ( !strcmp( p->dims[i]->assoc_nl_var_s , "1" ) ) { - snprintf(tx, NAMELEN,"%s",p->dims[i]->assoc_nl_var_s) ; + snprintf(tx, 3 * NAMELEN,"%s",p->dims[i]->assoc_nl_var_s) ; } else { - snprintf(tx,NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; + snprintf(tx, 3 * NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; } } else { - snprintf(tx, NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; + snprintf(tx, 3 * NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; } break ; case (CONSTANT) : @@ -560,7 +560,7 @@ array_size_expression ( char * refarg , char * pre , which a namelist supplied dimension should be dereference from, or "" */ { - int i ; + unsigned int i ; char tx[NAMELEN] ; char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; int bdex = 0, xdex, ydex, zdex ; diff --git a/tools/protos.h b/tools/protos.h index 1180a5690a..b9041aac92 100644 --- a/tools/protos.h +++ b/tools/protos.h @@ -84,6 +84,7 @@ int gen_scalar_indices ( char * dirname ) ; int gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) ; int gen_nest_interp ( char * dirname ); int gen_nest_v_interp ( char * dirname ); +int gen_nest_interp2(FILE *fp, node_t *node, char *fourdname, int down_path, int use_nest_time_level); int gen_actual_args ( char * dirname ) ; int gen_actual_args_new ( char * dirname ) ; diff --git a/tools/reg_parse.c b/tools/reg_parse.c index 41c02dea41..19727c0773 100644 --- a/tools/reg_parse.c +++ b/tools/reg_parse.c @@ -84,7 +84,7 @@ #define COMM_USE 2 #define COMM_DEFINE 3 -static int ntracers = 0 ; +static unsigned int ntracers = 0 ; static char tracers[1000][100] ; int @@ -274,7 +274,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) if ( !strcmp( tokens[F_USE] , tracers[i] ) ) found = 1 ; } if ( found == 0 ) { - sprintf(tracers[ntracers],tokens[F_USE]) ; + snprintf(tracers[ntracers], 100, tokens[F_USE]) ; ntracers++ ; /* add entries for _b and _bt arrays */ @@ -586,7 +586,8 @@ reg_parse( FILE * infile ) if ( tokens[FIELD_IO][i+1] == '=' ) { - int ii, jj, state ; + unsigned int ii; + int jj, state ; state = 0 ; jj = 0 ; for ( ii = i+3 ; ii < len_of_tok ; ii++ ) diff --git a/tools/registry.c b/tools/registry.c index b2e80b7605..8700458190 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -21,11 +21,12 @@ int main( int argc, char *argv[] ) { - char fname_in[NAMELEN], dir[NAMELEN], fname_tmp[NAMELEN], command[NAMELEN] ; - char fname_wrk[NAMELEN] ; + char fname_in[NAMELEN] = {'\0'}, dir[NAMELEN] = {'\0'}; + char fname_tmp[NAMELEN] = {'\0'}, command[NAMELEN] = {'\0'}; + char fname_wrk[NAMELEN] = {'\0'}; FILE * fp_in, *fp_tmp ; - char * thisprog ; - char *env_val ; + char * thisprog = ""; + char *env_val = ""; int mypid ; int do_irr_diag ; #ifndef _WIN32 diff --git a/tools/type.c b/tools/type.c index 0ef42c74d1..e40d4ef7c1 100644 --- a/tools/type.c +++ b/tools/type.c @@ -230,7 +230,7 @@ get_entry_r ( char * name , char * use , node_t * node ) node_t * get_dimnode_for_coord ( node_t * node , int coord_axis ) { - int i ; + unsigned int i ; if ( node == NULL ) return(NULL) ; for ( i = 0 ; i < node->ndims ; i++ ) { @@ -246,7 +246,7 @@ get_dimnode_for_coord ( node_t * node , int coord_axis ) int get_index_for_coord ( node_t * node , int coord_axis ) { - int i ; + unsigned int i ; if ( node == NULL ) return( -1 ) ; for ( i = 0 ; i < node->ndims ; i++ ) { @@ -263,7 +263,7 @@ get_index_for_coord ( node_t * node , int coord_axis ) char * set_mem_order( node_t * node , char * str , int n ) { - int i ; + unsigned int i ; node_t * p ; if ( str == NULL || node == NULL ) return(NULL) ; From a126d32ca1bfea1bb2b0a2e343fdd3d139af041e Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Sun, 16 Dec 2018 20:32:40 -0500 Subject: [PATCH 04/28] Changes to configure system to try to better support Cygwin. This should get things to work somewhat reliably with how I set up Cygwin. It may not need the repeated -lstuff options on Linux systems, but it does on anything with a Windows linker model. --- arch/configure.defaults | 6 +++--- arch/postamble | 13 ------------- arch/preamble | 13 +++++++++++++ main/Makefile | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/configure.defaults b/arch/configure.defaults index dc653b09d2..dbeb1e9478 100644 --- a/arch/configure.defaults +++ b/arch/configure.defaults @@ -1429,7 +1429,7 @@ CC = CONFIGURE_CC LD = $(FC) RWORDSIZE = CONFIGURE_RWORDSIZE PROMOTION = #-fdefault-real-8 -ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM -D_WIN32 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM CFLAGS_LOCAL = -w -O3 -c LDFLAGS_LOCAL = CPLUSPLUSLIB = @@ -1456,7 +1456,7 @@ CC_TOOLS = $(SCC) LIB_EXTERNAL = \ $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ - -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -tirpc -lhdf5_hl -lhdf5 -lm -lz \ + -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -ltirpc -lhdf5_hl -lhdf5 -lm -lz \ $(WRF_SRC_ROOT_DIR)/external/wavelet/libWavelet.a $(WRF_SRC_ROOT_DIR)/external/wavelet/lib_wavelet.a \ $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a @@ -1764,7 +1764,7 @@ CC_TOOLS = $(SCC) ########################################################### #ARCH CYGWIN_NT i686, PGI compiler on Windows # serial smpar dmpar dm+sm # -DESCRIPTION = PGI ($SFC/$SCC): Windows +DESCRIPTION = PGI ($SFC/$SCC): Windows native DMPARALLEL = # 1 OMPCPP = # -D_OPENMP OMP = # -mp -Minfo=mp diff --git a/arch/postamble b/arch/postamble index fb31cbdc0a..a63454aca3 100644 --- a/arch/postamble +++ b/arch/postamble @@ -55,19 +55,6 @@ INCLUDE_MODULES = $(MODULE_SRCH_FLAG) \ REGISTRY = Registry CC_TOOLS_CFLAGS = CONFIGURE_NMM_CORE -#NOWIN LIB_BUNDLED = \ -#NOWIN $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \ -#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_grib1/libio_grib1.a \ -#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_grib_share/libio_grib_share.a \ -#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \ -#NOWIN $(ESMF_IO_LIB) \ -#NOWIN CONFIGURE_COMMS_LIB \ -#NOWIN $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \ -#NOWIN $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o - -#NOWIN LIB_EXTERNAL = \ -#NOWIN CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PNETCDF_LIB_PATH CONFIGURE_GRIB2_LIB CONFIGURE_ATMOCN_LIB CONFIGURE_HDF5_LIB_PATH - LIB = $(LIB_BUNDLED) $(LIB_EXTERNAL) $(LIB_LOCAL) $(LIB_WRF_HYDRO) LDFLAGS = $(OMP) $(FCFLAGS) $(LDFLAGS_LOCAL) CONFIGURE_LDFLAGS ENVCOMPDEFS = CONFIGURE_COMPILEFLAGS diff --git a/arch/preamble b/arch/preamble index 45354bffa9..38a0773c74 100644 --- a/arch/preamble +++ b/arch/preamble @@ -105,6 +105,19 @@ NETCDF4_DEP_LIB = $(DEP_LIB_PATH) $(HDF5) $(ZLIB) $(GPFS) $(CURL) LIBWRFLIB = libwrflib.a +#NOWIN LIB_BUNDLED = \ +#NOWIN $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \ +#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_grib1/libio_grib1.a \ +#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_grib_share/libio_grib_share.a \ +#NOWIN $(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \ +#NOWIN $(ESMF_IO_LIB) \ +#NOWIN CONFIGURE_COMMS_LIB \ +#NOWIN $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \ +#NOWIN $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o + +#NOWIN LIB_EXTERNAL = \ +#NOWIN CONFIGURE_NETCDF_LIB_PATH CONFIGURE_PNETCDF_LIB_PATH CONFIGURE_GRIB2_LIB CONFIGURE_ATMOCN_LIB CONFIGURE_HDF5_LIB_PATH + #### Architecture specific settings #### diff --git a/main/Makefile b/main/Makefile index 718582df15..f89a9e154b 100644 --- a/main/Makefile +++ b/main/Makefile @@ -14,7 +14,7 @@ include ../configure.wrf $(SOLVER)_wrf : wrf.o ../main/module_wrf_top.o $(RANLIB) $(RLFLAGS) $(LIBWRFLIB) - $(LD) -o wrf.exe $(LDFLAGS) wrf.o ../main/module_wrf_top.o $(LIBWRFLIB) $(LIB) + $(LD) -o wrf.exe $(LDFLAGS) wrf.o ../main/module_wrf_top.o $(LIBWRFLIB) $(LIB) $(SOLVER)_wrfplus : wrf.o ../main/module_wrf_top.o $(RANLIB) $(RLFLAGS) $(LIBWRFLIB) From b9f403ae3af85ab3563f9aa8c8790a6fbfa418b0 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 24 Jan 2019 19:56:17 -0500 Subject: [PATCH 05/28] Allow configure to run on cygwin without specifying an explicit OS. --- arch/configure.defaults | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/configure.defaults b/arch/configure.defaults index dbeb1e9478..637efe3459 100644 --- a/arch/configure.defaults +++ b/arch/configure.defaults @@ -1412,7 +1412,7 @@ RLFLAGS = CC_TOOLS = $(SCC) ########################################################### -#ARCH Cygwin i686 x86_64, gfortran compiler with gcc #serial smpar dmpar dm+sm +#ARCH CYGWIN_NT i686 x86_64, gfortran compiler with gcc #serial smpar dmpar dm+sm # DESCRIPTION = GNU ($SFC/$SCC) DMPARALLEL = # 1 From c857fe1b66ce0dfcd735135f6ec8b5aaf8a7b4bc Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 24 Jan 2019 20:57:53 -0500 Subject: [PATCH 06/28] Get netCDF4 detection working on Cygwin. --- arch/Config.pl | 8 +++++--- configure | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/Config.pl b/arch/Config.pl index 4a1dd86e6a..74e924d118 100644 --- a/arch/Config.pl +++ b/arch/Config.pl @@ -604,9 +604,11 @@ $_ .= " \$\(NETCDF4_IO_OPTS\)\n" ; } if (/^LIB.*=/) - { $_ =~ s/\r|\n//g ; - $_ .=" \$\(NETCDF4_DEP_LIB\)\n" ; - } + { + # $_ =~ s/\r|\n//g ; + # $_ .=" \$\(NETCDF4_DEP_LIB\)\n" ; + $_ =~ s/(\\?)[\r\n]/ \$\(NETCDF4_DEP_LIB\)\1\n/g ; + } } } diff --git a/configure b/configure index c1f52f4a21..294500ca29 100755 --- a/configure +++ b/configure @@ -180,12 +180,12 @@ USENETCDF="" if [ -n "$NETCDF" ] ; then echo "Will use NETCDF in dir: $NETCDF" # Oh UNIDATA, why make it so hard ... - if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" ] ; then + if [ -f "$NETCDF/lib/libnetcdff.a" -o -f "$NETCDF/lib/libnetcdff.so" -o -f "${NETCDF}/lib/libnetcdff.dll.a" ] ; then USENETCDFF="-lnetcdff" else USENETCDFF=" " fi - if [ -f "$NETCDF/lib/libnetcdf.a" -o -f "$NETCDF/lib/libnetcdf.so" ] ; then + if [ -f "$NETCDF/lib/libnetcdf.a" -o -f "$NETCDF/lib/libnetcdf.so" -o -f "${NETCDF}/lib/libnetcdf.dll.a" ] ; then USENETCDF="-lnetcdf" else USENETCDF=" " @@ -204,7 +204,7 @@ fi # If the user asked for classic netcdf, acquiesce to the request. -if [ "`uname`" = "Linux" ] ; then +if [ "`uname`" = "Linux" -o "`uname -o`" = "Cygwin" ] ; then ans="`whereis nf-config`" elif [ "`uname`" = "Darwin" ] ; then ans="`which nf-config`" From 8f98759213dacc39e386f8139a82964451c0042f Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 12 Apr 2019 13:06:13 -0400 Subject: [PATCH 07/28] Remove the links to libWavelet, since the build system doesn't. It tries to link with a library it didn't build. This does not work terribly well. --- arch/configure.defaults | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/configure.defaults b/arch/configure.defaults index 637efe3459..0c887a751e 100644 --- a/arch/configure.defaults +++ b/arch/configure.defaults @@ -1457,7 +1457,6 @@ CC_TOOLS = $(SCC) LIB_EXTERNAL = \ $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -ltirpc -lhdf5_hl -lhdf5 -lm -lz \ - $(WRF_SRC_ROOT_DIR)/external/wavelet/libWavelet.a $(WRF_SRC_ROOT_DIR)/external/wavelet/lib_wavelet.a \ $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a LIB_BUNDLED = \ @@ -1517,7 +1516,6 @@ CC_TOOLS = $(SCC) LIB_EXTERNAL = \ $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -lhdf5_hl -lhdf5 -lm -lz \ - $(WRF_SRC_ROOT_DIR)/external/wavelet/libWavelet.a $(WRF_SRC_ROOT_DIR)/external/wavelet/lib_wavelet.a \ $(WRF_SRC_ROOT_DIR)/external/io_grib2/libio_grib2.a ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a LIB_BUNDLED = \ @@ -1806,7 +1804,6 @@ CC_TOOLS = $(SCC) LIB_EXTERNAL = \ ../external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.lib \ - ../external/wavelet/libWavelet.a ../external/wavelet/lib_wavelet.a ESMF_IO_LIB = ../external/esmf_time_f90/libesmf_time.a LIB_BUNDLED = \ ../external/fftpack/fftpack5/libfftpack.a \ From bb4cda9a4b28f3c4b064d7c8e8f6603c13a4484c Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Sun, 16 Dec 2018 20:07:03 -0500 Subject: [PATCH 08/28] Set up outline for using posix_spawn rather than system(), I looked up system functions for copy, but those seem to be unique to C++17. Removing a file might be done with unlink(), but I don't know the C API that well, so copying what I did for posix_spawn() it is. --- tools/registry.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tools/registry.c b/tools/registry.c index 8700458190..6365b85b30 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -157,7 +157,23 @@ main( int argc, char *argv[] ) sprintf( fname_wrk,"%s/Registry_irr_diag",dir ) ; } // fprintf(stderr,"Registry tmp file = %s\n",fname_wrk); - sprintf(command,"/bin/cp %s %s\n",fname_in,fname_wrk); + /* we should be able to implement this using posix_spawn */ + /* + #include + extern char **environ; + pid_t child_pid; + // There doesn't seem to be a way to specify the length, so I'm + // assuming it's null-terminated + char *command_argv[4] = {"/bin/cp", NULL, NULL, NULL}; + command_argv[1] = fname_in; + command_argv[2] = fname_wrk; + + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not copy %s to %s\n", fname_in, fname_wrk); + exit(2); + } + */ + sprintf(command,"/bin/cp \'%s\' \'%s\'\n",fname_in,fname_wrk); // fprintf(stderr,"Command = %s\n",command); if( system( command ) ) { fprintf(stderr,"Could not copy %s to %s\n",fname_in,fname_wrk); @@ -169,6 +185,15 @@ main( int argc, char *argv[] ) exit(2) ; } if( !access( "Registry/registry.irr_diag",F_OK ) ) { + /* + command_argv[0] = "/bin/rm"; + command_argv[1] = "-f"; + command_argv[2] = "Registry/registry.irr_diag"; + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not remove Registry/registry.irr_diag\n", fname_in, fname_wrk); + exit(2); + } + */ sprintf(command,"/bin/rm -f Registry/registry.irr_diag\n"); if( system( command ) ) { fprintf(stderr,"Could not remove Registry/registry.irr_diag\n"); @@ -279,6 +304,15 @@ main( int argc, char *argv[] ) sprintf(command,"del /F /Q %s\n",fname_tmp ); #else if( do_irr_diag ) { + /* + command_argv[0] = "/bin/rm"; + command_argv[1] = "-f"; + command_argv[2] = fname_wrk; + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not remove %s\n", fname_wrk); + exit(2); + } + */ sprintf(command,"/bin/rm -f %s\n",fname_wrk ); system( command ) ; } From 13d8dffcd456f2a86767c3e50fd05b1cf79e0e04 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 24 Jan 2019 17:31:50 -0500 Subject: [PATCH 09/28] Add the warnings to the registry compiler line, as well as some optimization. --- tools/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/Makefile b/tools/Makefile index 7046d635c9..38a6355965 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -4,7 +4,7 @@ CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = DEBUG = -g3 -ggdb3 -Og -fvar-tracking -fvar-tracking-assignments -gcolumn-info -fbounds-check -fstack-protector-all -fstack-protector-strong -fstack-check -DEBUG = -Os -g +DEBUG = -Os -g -fuse-linker-plugin -flto=3 WARNING = -Wall -Wextra -Werror GCC_WARNING = -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter -Wformat=2 -Wformat-truncation=2 -Wformat-overflow=2 -Wno-format-security -Wno-format-nonliteral -Wno-sign-compare OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ @@ -12,6 +12,7 @@ OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ gen_model_data_ord.o gen_interp.o gen_comms.o gen_scalar_derefs.o set_dim_strs.o gen_wrf_io.o\ gen_streams.o +DEBUG += $(WARNING) $(GCC_WARNING) registry : $(OBJ) standard.exe $(CC_TOOLS) -o registry $(DEBUG) $(LDFLAGS) $(OBJ) From 0ab3bb9d276c4bc33614104d295fc06e990e712e Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 20 Jan 2023 09:21:04 -0500 Subject: [PATCH 10/28] STY: First pass at eliminating compiler warnings. There might be more I wanted to add, but I don't remember. I'll have to add those the way I did the first time, compiling with -Werror until it works. This pass is almost exclusively focused on the registry. I'll have a few more for Fortran once I figure out how. Inspiration: registry was segfaulting, so I tried fixing the warnings in case it was one of those. It didn't work, but it's worth doing regardless. --- inc/streams.h | 8 +++++- tools/Makefile | 46 +++++++++++++++++------------- tools/data.h | 2 +- tools/fseek_test.c | 2 +- tools/gen_allocs.c | 16 +++++------ tools/gen_args.c | 2 +- tools/gen_config.c | 20 ++++++++++--- tools/gen_defs.c | 4 +-- tools/gen_interp.c | 26 ++++++++--------- tools/gen_irr_diag.c | 27 +++++++++--------- tools/gen_scalar_indices.c | 32 +++++++++++++++------ tools/gen_streams.c | 29 +++++++++++++++---- tools/gen_wrf_io.c | 16 +++++------ tools/misc.c | 52 +++++++++++++++++----------------- tools/protos.h | 25 +++++++++++++++-- tools/reg_parse.c | 57 ++++++++++++++++++++++++++------------ tools/registry.c | 56 +++++++++++++++++++++++++++++-------- tools/registry.h | 4 +++ tools/set_dim_strs.c | 2 +- tools/sym.c | 1 + tools/sym.h | 1 + tools/symtab_gen.c | 7 +++-- tools/type.c | 6 ++-- 23 files changed, 294 insertions(+), 147 deletions(-) diff --git a/inc/streams.h b/inc/streams.h index 645b02d855..f7fe57d98e 100644 --- a/inc/streams.h +++ b/inc/streams.h @@ -1,5 +1,11 @@ #ifndef MAX_HISTORY -# define MAX_HISTORY 12 +# include +# define MAX_HISTORY (UINT8_C(12)) +# if (MAX_HISTORY > 120) +# warning If changing MAX_HISTORY to be above 120, check uses, loop variables, +# warning and destination string buffers to ensure the types used are wide +# warning enough. Enabling compiler warnings for format strings should help. +# endif #endif #ifndef IWORDSIZE # define IWORDSIZE 4 diff --git a/tools/Makefile b/tools/Makefile index a2c0acf50b..8b0723a57f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,14 +1,21 @@ .SUFFIXES: .c .o -CC_TOOLS = cc +CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = -DEBUG = -g +DEBUG = -g3 -ggdb3 -Og -fvar-tracking -fvar-tracking-assignments -gcolumn-info -fbounds-check -fstack-protector-all -fstack-protector-strong -fstack-check +DEBUG = -Og -g -fuse-linker-plugin -flto=3 +WARNING = -Wall -Wextra # -Werror +GCC_WARNING = -Wno-unused-variable -Wno-unused-but-set-variable \ + -Wno-unused-parameter -Wformat=2 -Wformat-truncation=2 \ + -Wformat-overflow=2 -Wno-format-security -Wno-format-nonliteral \ + -Wno-sign-compare -Wno-misleading-indentation OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_defs.o gen_allocs.o gen_mod_state_descr.o gen_scalar_indices.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ gen_model_data_ord.o gen_interp.o gen_comms.o gen_scalar_derefs.o set_dim_strs.o gen_wrf_io.o\ gen_streams.o +DEBUG += $(WARNING) $(GCC_WARNING) registry : $(OBJ) standard.exe $(CC_TOOLS) -o registry $(DEBUG) $(LDFLAGS) $(OBJ) @@ -30,21 +37,22 @@ gen_comms.c : gen_comms.stub # DO NOT DELETE THIS LINE -- make depend depends on it. -data.o: registry.h protos.h data.h -gen_allocs.o: protos.h registry.h data.h -gen_args.o: protos.h registry.h data.h -gen_scalar_derefs.o: protos.h registry.h data.h -gen_config.o: protos.h registry.h data.h -gen_defs.o: protos.h registry.h data.h -gen_mod_state_descr.o: protos.h registry.h data.h -gen_model_data_ord.o: protos.h registry.h data.h -gen_scalar_indices.o: protos.h registry.h data.h -gen_wrf_io.o: protos.h registry.h data.h -misc.o: protos.h registry.h data.h -my_strtok.o: registry.h protos.h data.h -reg_parse.o: registry.h protos.h data.h -registry.o: protos.h registry.h data.h +data.o: registry.h protos.h data.h ../inc/streams.h +gen_allocs.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_args.o: protos.h registry.h data.h ../inc/streams.h +gen_config.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_defs.o: protos.h registry.h data.h ../inc/streams.h +gen_interp.o: protos.h registry.h data.h ../inc/streams.h +gen_mod_state_descr.o: protos.h registry.h data.h ../inc/streams.h +gen_model_data_ord.o: protos.h registry.h data.h ../inc/streams.h +gen_scalar_derefs.o: protos.h registry.h data.h ../inc/streams.h +gen_scalar_indices.o: protos.h registry.h data.h ../inc/streams.h +gen_streams.o: protos.h registry.h data.h ../inc/streams.h sym.h +gen_wrf_io.o: protos.h registry.h data.h ../inc/streams.h sym.h +misc.o: protos.h registry.h data.h ../inc/streams.h +my_strtok.o: registry.h protos.h data.h ../inc/streams.h +reg_parse.o: registry.h protos.h data.h ../inc/streams.h sym.h +registry.o: protos.h registry.h data.h ../inc/streams.h sym.h +set_dim_strs.o: protos.h registry.h data.h ../inc/streams.h sym.h sym.o: sym.h -type.o: registry.h protos.h data.h -gen_interp.o: registry.h protos.h data.h -gen_streams.o: registry.h protos.h data.h +type.o: registry.h protos.h data.h ../inc/streams.h diff --git a/tools/data.h b/tools/data.h index 081ece8616..a70240a8ea 100644 --- a/tools/data.h +++ b/tools/data.h @@ -119,7 +119,7 @@ EXTERN node_t * Cycles ; EXTERN node_t Domain ; -EXTERN char t1[NAMELEN], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN], t5[NAMELEN], t6[NAMELEN] ; +EXTERN char t1[NAMELEN], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN + 11], t5[NAMELEN], t6[NAMELEN] ; EXTERN char thiscom[4*NAMELEN] ; EXTERN int model_order[3] ; diff --git a/tools/fseek_test.c b/tools/fseek_test.c index edd25c6035..a605075ea9 100644 --- a/tools/fseek_test.c +++ b/tools/fseek_test.c @@ -8,7 +8,7 @@ main() FILE *fp ; long long y ; int retval ; - int result1 ; + int result1 = 0 ; #ifdef TEST_FSEEKO off_t x ; off_t result2 ; diff --git a/tools/gen_allocs.c b/tools/gen_allocs.c index abafbcb893..5d86eff2f8 100644 --- a/tools/gen_allocs.c +++ b/tools/gen_allocs.c @@ -80,13 +80,13 @@ int gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, int *j, int *iguy, int *fraction, int numguys, int frac, int sw ) /* 1 = allocate, 2 = just count */ { node_t * p ; - int tag ; + int tag = 0 ; char post[NAMELEN], post_for_count[NAMELEN] ; - char fname[NAMELEN], dname[NAMELEN], dname_tmp[NAMELEN] ; - char x[NAMELEN] ; - char x2[NAMELEN], fname2[NAMELEN] ; - char dimname[3][NAMELEN] ; - char tchar ; + char fname[NAMELEN], dname[NAMELEN + 11], dname_tmp[NAMELEN] ; + char x[NAMELEN + 4] ; + char x2[NAMELEN + 2], fname2[2 * NAMELEN + 1] ; + char dimname[3][NAMELEN + 12] ; + char tchar = '\0'; unsigned int *io_mask ; int nd ; int restart ; @@ -120,7 +120,7 @@ gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, */ if ( tag == 1 ) { - char dname_symbol[128] ; + char dname_symbol[NAMELEN + 7] ; sym_nodeptr sym_node ; sprintf(dname_symbol, "DNAME_%s", dname_tmp ) ; @@ -607,7 +607,7 @@ gen_dealloc2 ( FILE * fp , char * structname , node_t * node ) int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN] ; + char x[NAMELEN + 4] ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_args.c b/tools/gen_args.c index ea995d4230..014c4dd307 100644 --- a/tools/gen_args.c +++ b/tools/gen_args.c @@ -88,7 +88,7 @@ gen_args1 ( FILE * fp , char * outstr , char * structname , int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN], y[NAMELEN] ; + char x[NAMELEN + 4], y[NAMELEN] ; char indices[NAMELEN] ; int lenarg ; int only4d = 0 ; diff --git a/tools/gen_config.c b/tools/gen_config.c index c07be2e919..399961a364 100644 --- a/tools/gen_config.c +++ b/tools/gen_config.c @@ -15,12 +15,16 @@ int gen_namelist_defines ( char * dirname , int sw_dimension ) { FILE * fp ; - char fname[NAMELEN] ; + char fname[NAMELEN + 4] ; char fn[NAMELEN] ; node_t *p ; sprintf( fn, "namelist_defines%s.inc", sw_dimension?"":"2" ) ; - if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } + if ( strlen(dirname) > 0 ) { + sprintf(fname,"%s/%s",dirname,fn) ; + } else { + sprintf(fname, "%s", fn) ; + } if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; print_warning(fp,fname) ; @@ -56,7 +60,11 @@ gen_namelist_defaults ( char * dirname ) char *fn = "namelist_defaults.inc" ; node_t *p ; - if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } + if ( strlen(dirname) > 0 ) { + sprintf(fname,"%s/%s",dirname,fn) ; + } else { + sprintf(fname, "%s", fn) ; + } if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; print_warning(fp,fname) ; @@ -130,7 +138,11 @@ gen_namelist_script ( char * dirname ) char howset1[NAMELEN] ; char howset2[NAMELEN] ; - if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } + if ( strlen(dirname) > 0 ) { + sprintf(fname,"%s/%s",dirname,fn) ; + } else { + sprintf(fname, "%s", fn) ; + } if ((fp = fopen( fname , "w" )) == NULL ) return(1) ; sym_forget() ; diff --git a/tools/gen_defs.c b/tools/gen_defs.c index 020bbac3b7..fef98474dd 100644 --- a/tools/gen_defs.c +++ b/tools/gen_defs.c @@ -90,7 +90,7 @@ int gen_i1_decls ( char * dn ) { FILE * fp ; - char fname[NAMELEN], post[NAMELEN] ; + char fname[NAMELEN+6], post[NAMELEN+6] ; char * fn = "i1_decl.inc" ; char * dimspec ; node_t * p ; @@ -140,7 +140,7 @@ gen_decls ( FILE * fp , node_t * node , int sw_ranges, int sw_point , int mask , node_t * p ; int tag, ipass ; char fname[NAMELEN], post[NAMELEN] ; - char * dimspec ; + char * dimspec = ""; int bdyonly = 0 ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_interp.c b/tools/gen_interp.c index a4a504228c..1771b5815d 100644 --- a/tools/gen_interp.c +++ b/tools/gen_interp.c @@ -66,7 +66,7 @@ int contains_tok( char *s1, char *s2, char *delims ) /* Had to increase size for SOA from 4*4096 to 4*7000 */ -char halo_define[4*7000], halo_use[NAMELEN], halo_id[NAMELEN], x[NAMELEN] ; +char halo_define[4*7000], halo_use[NAMELEN] = {'\0'}, halo_id[NAMELEN], x[2 * NAMELEN + 1] ; /*KAL added this for vertical interpolation */ /*DJW 131202 modified to create files required for vertical interpolation from parent to nest */ @@ -130,7 +130,7 @@ else if ( down_path[ipath] == FORCE_DOWN ) { sprintf(halo_id,"HALO_FORCE_DOWN") else if ( down_path[ipath] == INTERP_UP ) { sprintf(halo_id,"HALO_INTERP_UP") ; } else if ( down_path[ipath] == SMOOTH_UP ) { sprintf(halo_id,"HALO_INTERP_SMOOTH") ; } sprintf(halo_define,"80:") ; -sprintf(halo_use,"") ; + halo_use[0] = '\0' ; gen_nest_interp1 ( fp , Domain.fields, NULL, down_path[ipath], (down_path[ipath]==FORCE_DOWN)?2:2 ) ; { node_t * comm_struct ; @@ -168,8 +168,8 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , char nddim2[3][2][NAMELEN] ; char nmdim2[3][2][NAMELEN] ; char npdim2[3][2][NAMELEN] ; - char vname[NAMELEN], vname2[NAMELEN] ; - char tag[NAMELEN], tag2[NAMELEN] ; + char vname[3 * NAMELEN + 88], vname2[3 * NAMELEN + 88] ; + char tag[NAMELEN] = {'\0'}, tag2[NAMELEN] = {'\0'} ; char fcn_name[NAMELEN] ; char xstag[NAMELEN], ystag[NAMELEN] ; char dexes[NAMELEN] ; @@ -200,7 +200,7 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , if ( nest_mask & down_path ) { if ( p->ntl > 1 ) { sprintf(tag,"_2") ; sprintf(tag2,"_%d", use_nest_time_level) ; } - else { sprintf(tag,"") ; sprintf(tag2,"") ; } + else { tag[0] = '\0'; tag2[0] = '\0'; } /* construct variable name */ if ( p->node_kind & FOURD ) { @@ -359,7 +359,7 @@ fprintf(fp," ngrid%%i_parent_start, ngrid%%j_parent_start, fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio &\n") ; { - char tmpstr[NAMELEN], *p1 ; + char tmpstr[2 * NAMELEN + 8], *p1 ; node_t * nd, * pp ; pp = NULL ; if ( p->node_kind & FOURD ) { @@ -377,10 +377,10 @@ fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio strcpy( tmpstr , pp->interpu_aux_fields ) ; } else if ( down_path & FORCE_DOWN ) { /* by default, add the boundary and boundary tendency fields to the arg list */ - if ( ! p->node_kind & FOURD ) { - sprintf( tmpstr , "%s_b,%s_bt,", pp->name, pp->name ) ; + if ( ! (p->node_kind & FOURD) ) { + snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", pp->name, pp->name ) ; } else { - sprintf( tmpstr , "%s_b,%s_bt,", p->name, p->name ) ; + snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", p->name, p->name ) ; } strcat( tmpstr , pp->force_aux_fields ) ; } else if ( down_path & INTERP_DOWN ) { @@ -507,7 +507,7 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; char pdim[3][2][NAMELEN] ; - char vname[NAMELEN], vname2[NAMELEN] ; + char vname[3 * NAMELEN + 88], vname2[3 * NAMELEN + 88] ; char tag[NAMELEN], tag2[NAMELEN] ; char dexes[NAMELEN] ; char ndexes[NAMELEN] ; @@ -546,11 +546,11 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , set_dim_strs2 ( p , ddim , mdim , pdim , "", 1 ) ; } if ( !strcmp ( ddim[0][1], "kde") || - ( ddim[1][1], "kde") || - ( ddim[2][1], "kde")) { + !strcmp ( ddim[1][1], "kde") || + !strcmp ( ddim[2][1], "kde")) { if ( p->ntl > 1 ) { sprintf(tag,"_2") ; sprintf(tag2,"_%d", use_nest_time_level) ; } - else { sprintf(tag,"") ; sprintf(tag2,"") ; } + else { tag[0] = '\0'; tag2[0] = '\0'; } /* construct variable name */ if ( p->node_kind & FOURD ) { diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 13071f239f..e310f4e3a1 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -7,10 +7,10 @@ #include #include -int nChmOpts = 0; -char rxt_tbl[5][1000][128]; -char chm_scheme[5][128]; -int rxt_cnt[5]; +short int nChmOpts = 0; +char rxt_tbl[5][1000][128] = { '\0' }; +char chm_scheme[5][128] = { '\0' }; +short int rxt_cnt[5]; void strip_blanks( char *instring, char *outstring ) { @@ -39,7 +39,7 @@ int AppendReg( char *chem_opt, int ndx ) char *strt, *end; char *token; char *wstrg1; - char path[256]; + char path[256 * 2 + 25]; char fname[256]; char inln[1024],winln[1024],s[1024]; char rxtstr[128]; @@ -72,6 +72,7 @@ int AppendReg( char *chem_opt, int ndx ) if( fp_reg == NULL ) { fprintf(stderr,"Can not open registry.irr_diag for writing\n"); + fclose(fp_eqn); return(-2); } strcpy( buffer,"\"Integrated Reaction Rate\" \"\""); @@ -176,7 +177,7 @@ int AppendReg( char *chem_opt, int ndx ) for( i=0; i < slen; i++ ) { if( ! strncmp( rxtsym+i, "+", 1 ) ) - strncpy( rxtsym+i, "_", 1 ); + strncpy( rxtsym+i, "_", 2 ); } strcat( rxtsym,"_IRR" ); // @@ -202,11 +203,11 @@ int AppendReg( char *chem_opt, int ndx ) int irr_diag_scalar_indices( char *dirname ) { int Nrxt; - int i, j; + short int i, j; int first, flush, s1; char fname[256]; - char line[132]; - char piece[132]; + char line[135]; + char piece[135]; char *blank = " "; FILE *fp_inc; @@ -267,18 +268,18 @@ int irr_diag_scalar_indices( char *dirname ) sprintf( line," chm_opts_ndx(:nchm_opts) = (/ "); for( i = 0; i < nChmOpts; i++ ) { if( i == 0 ) - sprintf( piece,"%s_kpp",chm_scheme[i]); + snprintf( piece,135,"%.128s_kpp",chm_scheme[i]); else - sprintf( piece," ,%s_kpp",chm_scheme[i]); + snprintf( piece,135," ,%.128s_kpp",chm_scheme[i]); strcat( line,piece ); } strcat( line," /)\n" ); fprintf( fp_inc,line ); fprintf( fp_inc," \n"); - for( i = 0; i < nChmOpts,rxt_cnt[i] > 0; i++ ) { + for( i = 0; /*i < nChmOpts &&*/ rxt_cnt[i] > 0; i++ ) { for( j = 0; j < rxt_cnt[i]; j++ ) { - sprintf( line," rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); + snprintf( line,132," rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); fprintf( fp_inc,"%s",line); } fprintf( fp_inc," \n"); diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index a24d75ee3c..7456ad37cf 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -14,18 +14,24 @@ #define NULLCHARPTR (char *) 0 +/* About the only place the stringify macro is useful is in the + definition of the stringify_const macro. Most other places, you + can put the quotes on yourself. */ +#define stringify_const(value) stringify(value) +#define stringify(value) #value + int gen_scalar_indices ( char * dirname ) { FILE * fp, *fp5[26] ; - char fname[NAMELEN], fname5[NAMELEN] ; + char fname[NAMELEN], fname5[2 * NAMELEN + 1] ; char * fn = "scalar_indices.inc" ; char * fn2 = "scalar_tables.inc" ; char * fn3 = "scalar_tables_init.inc" ; char * fn4 = "scalar_indices_init.inc" ; int i ; - char fn5[26][NAMELEN] ; + char fn5[26][NAMELEN] = { '\0' } ; strcpy( fname, fn ) ; if ( strlen(dirname) > 0 ) { sprintf(fname,"%s/%s",dirname,fn) ; } @@ -37,7 +43,14 @@ gen_scalar_indices ( char * dirname ) { sprintf(fn5[i],"in_use_for_config_%c.inc",'a'+i) ; strcpy( fname5, fn5[i] ) ; - if ( strlen(dirname) > 0 ) { sprintf(fname5,"%s/%s",dirname,fn5[i]) ; } + if ( strlen(dirname) > 0 ) { + /* The stringify_const(NAMELEN) is to get something like %.512s + in the format string, so snprintf won't copy more than + NAMELEN elements of the entry of fn5 (each NAMELEN chars long) */ + snprintf(fname5,sizeof(fname5),"%s/%." stringify_const(NAMELEN) "s",dirname,fn5[i]) ; + } else { + sprintf(fname5,"%s", fn5[i]); + } if ((fp5[i] = fopen( fname5 , "w" )) == NULL ) return(1) ; print_warning(fp5[i],fname5) ; } @@ -117,7 +130,7 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) node_t * p, * memb , * pkg, * rconfig, * fourd, *x ; char * c , *pos1, *pos2 ; char assoc_namelist_var[NAMELEN], assoc_namelist_choice[NAMELEN], assoc_4d[NAMELEN_LONG], fname[NAMELEN_LONG] ; - char fname2[NAMELEN], tmp1[NAMELEN], tmp2[NAMELEN] ; + char fname2[NAMELEN], tmp1[NAMELEN + 5], tmp2[NAMELEN + 4] ; char scalars_str[NAMELEN_LONG] ; char * scalars ; int i ; @@ -128,8 +141,11 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) for ( p = FourD ; p != NULL ; p = p->next ) { if( strncmp( p->name,"irr_diag",8 ) ) { - for ( memb = p->members ; memb != NULL ; memb = memb->next ) - if ( strcmp(memb->name,"-") ) fprintf(fp," P_%s = 1 ; F_%s = .FALSE. \n", memb->name, memb->name ) ; + for ( memb = p->members ; memb != NULL ; memb = memb->next ) { + if ( strcmp(memb->name,"-") ) { + fprintf(fp," P_%s = 1 ; F_%s = .FALSE. \n", memb->name, memb->name); + } + } } } @@ -171,11 +187,11 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) fprintf(fp," P_%s = %s_index_table( PARAM_%s , idomain )\n",c,assoc_4d,c) ; fprintf(fp," END IF\n") ; { - char fourd_bnd[NAMELEN] ; + char fourd_bnd[NAMELEN_LONG + 3] = { '\0' } ; /* check for the existence of a fourd boundary array associated with this 4D array */ /* set io_mask accordingly for gen_wrf_io to know that it should generate i/o for _b and _bt */ /* arrays */ - sprintf(fourd_bnd,"%s_b",assoc_4d) ; + snprintf(fourd_bnd, NAMELEN_LONG + 3,"%s_b",assoc_4d) ; if ( get_entry_r( fourd_bnd, NULL, Domain.fields) != NULL ) { x->boundary = 1 ; } diff --git a/tools/gen_streams.c b/tools/gen_streams.c index ad5251ff4d..a7e055413e 100644 --- a/tools/gen_streams.c +++ b/tools/gen_streams.c @@ -10,6 +10,25 @@ #include "data.h" #include "sym.h" +int gen_io_domain_defs ( FILE * fp ); +int gen_io_boilerplate (); +int gen_med_find_esmf_coupling ( FILE *fp ); +int gen_shutdown_closes ( FILE *fp ); +int gen_med_open_esmf_calls ( FILE *fp ); +int gen_med_last_solve_io ( FILE *fp ); +int gen_med_auxinput_in_closes ( FILE *fp ); +int gen_med_hist_out_closes ( FILE *fp ); +int gen_med_hist_out_opens ( FILE *fp ); +int gen_med_auxinput_in ( FILE *fp ); +int gen_fine_stream_input ( FILE *fp ); +int gen_check_auxstream_alarms ( FILE *fp ); +int gen_switches_and_alarms ( FILE *fp ); +int gen_io_form_for_stream ( FILE *fp ); +int gen_io_form_for_dataset ( FILE *fp ); +int gen_set_timekeeping_alarms ( FILE * fp ); +int gen_set_timekeeping_defs ( FILE *fp ); + + int gen_streams( char * dirname ) { FILE * fp ; @@ -160,7 +179,7 @@ gen_io_domain_defs ( FILE * fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } @@ -188,7 +207,7 @@ gen_set_timekeeping_defs ( FILE *fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } @@ -222,7 +241,7 @@ gen_set_timekeeping_alarms ( FILE * fp ) for ( i = 0 ; i < 2*MAX_HISTORY ; i++ ) { if ( i % MAX_HISTORY == 0 ) { aux = "" ; streamno[0] = '\0' ; } - else { aux="aux" ; sprintf(streamno,"%d",i%MAX_HISTORY) ; } + else { aux="aux" ; sprintf(streamno,"%d",(signed char) i%MAX_HISTORY) ; } if ( i < MAX_HISTORY ) { streamtype = "input" ; } else { streamtype = ( i%MAX_HISTORY == 0 )?"history":"hist" ; } if ( i == 0 ) continue ; /* skip just input */ @@ -305,7 +324,7 @@ int gen_io_form_for_dataset ( FILE *fp ) { char * aux , *streamtype , streamno[5] ; - int i ; + unsigned char i ; fprintf(fp," IF ( DataSet .eq. 'RESTART' ) THEN\n") ; fprintf(fp," CALL nl_get_io_form_restart( 1, io_form )\n") ; @@ -333,7 +352,7 @@ int gen_io_form_for_stream ( FILE *fp ) { char * aux , *streamtype , streamno[5] ; - int i ; + unsigned char i ; fprintf(fp," IF ( stream .eq. restart_only ) THEN\n") ; fprintf(fp," CALL nl_get_io_form_restart( 1, io_form )\n") ; diff --git a/tools/gen_wrf_io.c b/tools/gen_wrf_io.c index 87c539b6e0..bbd3fcbd59 100644 --- a/tools/gen_wrf_io.c +++ b/tools/gen_wrf_io.c @@ -50,7 +50,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no node_t * p ; int i , ii ; char x[NAMELEN], tag[NAMELEN], dexes[NAMELEN] ; - char dname[NAMELEN], dname_tmp[NAMELEN] ; + char dname[NAMELEN + 6], dname_tmp[NAMELEN] ; char vname[NAMELEN], vname_x[NAMELEN],vname_1[NAMELEN], vname_2[NAMELEN], memord[NAMELEN] ; char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; @@ -58,7 +58,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no char ddim_no[3][2][NAMELEN] ; char mdim_no[3][2][NAMELEN] ; char pdim_no[3][2][NAMELEN] ; - char dimname[3][NAMELEN] ; + char dimname[3][NAMELEN + 6] ; char stagstr[NAMELEN] ; char * tend_tag ; @@ -85,7 +85,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no { - if ( p->ndims > 3 && ! p->node_kind & FOURD ) continue ; /* short circuit anything with more than 3 dims, (not counting 4d arrays) */ + if ( p->ndims > 3 && ! (p->node_kind & FOURD) ) continue ; /* short circuit anything with more than 3 dims, (not counting 4d arrays) */ if ( p->node_kind & I1 ) continue ; /* short circuit anything that's not a state var */ @@ -115,8 +115,8 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no int ibdy ; int idx ; node_t *fourd_bound_array ; - char *bdytag, *xdomainend, *ydomainend, *zdomainend, bdytag2[10],fourd_bnd[NAMELEN] ; - char *ds1,*de1,*ds2,*de2,*ds3,*de3,*ms1,*me1,*ms2,*me2,*ms3,*me3,*ps1,*pe1,*ps2,*pe2,*ps3,*pe3 ; + char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="", bdytag2[10],fourd_bnd[NAMELEN + 2] ; + char *ds1="",*de1="",*ds2="",*de2="",*ds3="",*de3="",*ms1="",*me1="",*ms2="",*me2="",*ms3="",*me3="",*ps1="",*pe1="",*ps2="",*pe2="",*ps3="",*pe3="" ; #if ( WRFPLUS == 1 ) /* adjoint and perturbation variables should not be inputed*/ @@ -276,12 +276,12 @@ fprintf(fp, "ENDDO\n") ; /* //////// BOUNDARY ///////////////////// */ - if ( p->boundary && strcmp( p->use, "_4d_bdy_array_" ) || ( p->boundary && fourdname ) ) + if ( (p->boundary && strcmp( p->use, "_4d_bdy_array_" )) || ( p->boundary && fourdname ) ) { int ibdy ; int idx ; - char *bdytag, *xdomainend, *ydomainend, *zdomainend ; - char *ds1,*de1,*ds2,*de2,*ds3,*de3,*ms1,*me1,*ms2,*me2,*ms3,*me3,*ps1,*pe1,*ps2,*pe2,*ps3,*pe3 ; + char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="" ; + char *ds1="",*de1="",*ds2="",*de2="",*ds3="",*de3="",*ms1="",*me1="",*ms2="",*me2="",*ms3="",*me3="",*ps1="",*pe1="",*ps2="",*pe2="",*ps3="",*pe3="" ; char t1[64], t2[64] ; #if ( WRFPLUS == 1 ) diff --git a/tools/misc.c b/tools/misc.c index a794fd692a..40136d13fc 100644 --- a/tools/misc.c +++ b/tools/misc.c @@ -17,7 +17,7 @@ char * dimension_with_colons( char * pre , char * tmp , node_t * p , char * post ) { - int i ; + unsigned int i ; if ( p == NULL ) return("") ; if ( p->ndims <= 0 && ! p->boundary_array ) return("") ; strcpy(tmp,"") ; @@ -44,8 +44,8 @@ dimension_with_colons( char * pre , char * tmp , node_t * p , char * post ) char * dimension_with_ones( char * pre , char * tmp , node_t * p , char * post ) { - int i ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; + unsigned int i ; + char r[NAMELEN + 12],s[NAMELEN],four_d[NAMELEN + 6] ; char *pp ; if ( p == NULL ) return("") ; if ( p->ndims <= 0 && ! p->boundary_array ) return("") ; @@ -90,10 +90,10 @@ dimension_with_ranges( char * refarg , char * pre , which a namelist supplied dimension should be dereference from, or "" */ { - int i ; - char tx[NAMELEN] ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; - int bdex, xdex, ydex, zdex ; + unsigned int i ; + char tx[6 * NAMELEN + 82] ; + char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + 5] ; + int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; if ( p == NULL ) return("") ; @@ -180,11 +180,11 @@ char * index_with_firstelem( char * pre , char * dref , int bdy , /* as defined in data.h */ char * tmp , node_t * p , char * post ) { - int i ; - char tx[NAMELEN] ; + unsigned int i ; + char tx[NAMELEN * 3] = {'\0'} ; char tmp2[NAMELEN] ; /* SamT: bug fix: zdex is used but never set */ - int bdex, xdex, ydex, zdex=-999 ; + int bdex = 0, xdex, ydex, zdex=-999 ; node_t *xdim, *ydim, *zdim ; char r[NAMELEN] ; @@ -262,7 +262,7 @@ int get_elem ( char * structname , char * nlstructname , char * tx , int i , node_t * p , int first_last ) { char dref[NAMELEN], nlstruct[NAMELEN] ; - char d, d1 ; + char d, d1 = '\0' ; if ( structname == NULL ) { strcpy( dref, "" ) ;} else { strcpy( dref, structname ) ; } @@ -290,25 +290,27 @@ get_elem ( char * structname , char * nlstructname , char * tx , int i , node_t if ( p->dims[i]->subgrid ) { if ( first_last == 0 ) { /*first*/ - sprintf(tx,"(%ssm3%d%s-1)*%ssr_%c+1",dref,p->dims[i]->dim_order,ornt,dref,d1) ; + snprintf(tx, 3 * NAMELEN, "(%ssm3%d%s-1)*%ssr_%c+1",dref,p->dims[i]->dim_order,ornt,dref,d1) ; }else{ /*last*/ - sprintf(tx,"%sem3%d%s*%ssr_%c" ,dref,p->dims[i]->dim_order,ornt,dref,d1) ; + snprintf(tx, 3 * NAMELEN, "%sem3%d%s*%ssr_%c" ,dref,p->dims[i]->dim_order,ornt,dref,d1) ; } } else { - sprintf(tx,"%s%cm3%d%s",dref,first_last==0?'s':'e',p->dims[i]->dim_order,ornt) ; + snprintf(tx, 3 * NAMELEN, "%s%cm3%d%s",dref,first_last==0?'s':'e',p->dims[i]->dim_order,ornt) ; } } break ; case (NAMELIST) : - if ( first_last == 0 ) { if ( !strcmp( p->dims[i]->assoc_nl_var_s , "1" ) ) { - sprintf(tx,"%s",p->dims[i]->assoc_nl_var_s) ; - } else { - sprintf(tx,"%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; - } - } - else { sprintf(tx,"%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; } + if ( first_last == 0 ) { + if ( !strcmp( p->dims[i]->assoc_nl_var_s , "1" ) ) { + snprintf(tx, 3 * NAMELEN,"%s",p->dims[i]->assoc_nl_var_s) ; + } else { + snprintf(tx, 3 * NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_s) ; + } + } else { + snprintf(tx, 3 * NAMELEN, "%s%s%s",nlstructname,structname,p->dims[i]->assoc_nl_var_e) ; + } break ; case (CONSTANT) : if ( first_last == 0 ) { sprintf(tx,"%d",p->dims[i]->coord_start) ; } @@ -560,10 +562,10 @@ array_size_expression ( char * refarg , char * pre , which a namelist supplied dimension should be dereference from, or "" */ { - int i ; - char tx[NAMELEN] ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; - int bdex, xdex, ydex, zdex ; + unsigned int i ; + char tx[6 * NAMELEN + 87] ; + char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + 6] ; + int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; if ( p == NULL ) return("") ; diff --git a/tools/protos.h b/tools/protos.h index 3d39c2dfa7..eae5afab18 100644 --- a/tools/protos.h +++ b/tools/protos.h @@ -4,7 +4,12 @@ int init_dim_table() ; int make_lower( char * s1 ) ; +char *make_lower_case ( char * str ) ; +char *make_upper_case ( char * str ) ; int reg_parse( FILE * infile ) ; +int init_parser() ; +int pre_parse( char * dir, FILE * infile, FILE * outfile ) ; +int check_dimspecs() ; int set_dim_len ( char * dimspec , node_t * dim_entry ) ; int set_dim_order ( char * dimorder , node_t * dim_entry ) ; int set_dim_orient ( char * dimorient , node_t * dim_entry ) ; @@ -71,16 +76,25 @@ char * get_typename_i(int i) ; int gen_alloc ( char * dirname ) ; int gen_alloc1 ( char * dirname ) ; int gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, int *j, int *iguy, int *fraction, int numguys, int frac, int sw ); +int gen_comms ( char * dirname ); +int gen_streams( char * dirname ); +int gen_io_boilerplate (); int gen_module_state_description ( char * dirname ) ; int gen_module_state_description1 ( FILE * fp , node_t * node ) ; int gen_scalar_indices ( char * dirname ) ; int gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) ; +int gen_nest_interp ( char * dirname ); +int gen_nest_v_interp ( char * dirname ); +int gen_nest_interp2(FILE *fp, node_t *node, char *fourdname, int down_path, int use_nest_time_level); int gen_actual_args ( char * dirname ) ; +int gen_actual_args_new ( char * dirname ) ; int gen_dummy_args ( char * dirname ) ; +int gen_dummy_args_new ( char * dirname ) ; int gen_dummy_decls ( char * dn ) ; +int gen_dummy_decls_new ( char * dn ) ; int gen_args ( char * dirname , int sw ) ; int gen_args1 ( FILE * fp , char * outstr, char * structname , node_t * node , int *linelen , int sw , int deep ) ; @@ -108,6 +122,7 @@ int gen_wrf_io2 ( FILE * fp , char * fname , char * structname , char * fourdnam int gen_namelist_defines ( char * dirname , int sw_dimension ) ; int gen_namelist_defaults ( char * dirname ) ; int gen_namelist_script ( char * dirname ) ; +int gen_namelist_statements ( char * dirname ) ; int gen_model_data_ord ( char * dirname ) ; @@ -122,6 +137,9 @@ int range_of_dimension ( char *, char * , int, node_t *, char * ); int dimension_size_expression ( char *, char *, int, node_t *, char *); int gen_alloc_count ( char *); int gen_alloc_count1 ( char *); +int gen_comms ( char * dirname ); +int gen_streams( char * dirname ); +int gen_io_boilerplate (); int gen_ddt_write ( char * ); int gen_ddt_write1 ( FILE *, char *, node_t *); int gen_dealloc ( char * ); @@ -133,13 +151,14 @@ int irr_diag_scalar_indices ( char * ); int gen_scalar_tables_init ( FILE *); int gen_scalar_indices_init ( FILE *); int hash(char *); +int gen_nest_interp ( char * dirname ); int gen_nest_interp1 ( FILE *, node_t *, char *, int, int ); #if ( WRFPLUS == 1 ) -int gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, int nta /* 0=NLM,1=TLM,2=ADM */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); +void gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, int nta /* 0=NLM,1=TLM,2=ADM */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); #else -int gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); +void gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); #endif -int gen_packs ( FILE *fp , node_t *p, int shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname ); +void gen_packs ( FILE *fp , node_t *p, int shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname ); int gen_periods ( char * dirname , node_t * periods ); int gen_swaps ( char * dirname , node_t * swaps ); int gen_cycles ( char * dirname , node_t * cycles ); diff --git a/tools/reg_parse.c b/tools/reg_parse.c index 3fe67fca9e..d7b08e4f07 100644 --- a/tools/reg_parse.c +++ b/tools/reg_parse.c @@ -85,22 +85,23 @@ #define COMM_USE 2 #define COMM_DEFINE 3 -static int ntracers = 0 ; +static unsigned int ntracers = 0 ; static char tracers[1000][100] ; int pre_parse( char * dir, FILE * infile, FILE * outfile ) { /* Decreased size for SOA from 8192 to 8000--double check if necessary, Manish Shrivastava 2010 */ - char inln[8000], parseline[8000], parseline_save[8000] ; + char inln[8000], parseline[8000] = {'\0'}, parseline_save[8000] ; int found ; char *p, *q ; char *tokens[MAXTOKENS], *toktmp[MAXTOKENS], newdims[NAMELEN_LONG], newdims4d[NAMELEN_LONG],newname[NAMELEN_LONG] ; - int i, ii, len_of_tok ; + unsigned int i, ii; + ssize_t len_of_tok = 0; char x, xstr[NAMELEN_LONG] ; - int is4d, wantstend, wantsbdy ; - int ifdef_stack_ptr = 0 ; - int ifdef_stack[100] ; + unsigned char is4d = 0, wantstend = 0, wantsbdy = 0 ; + signed char ifdef_stack_ptr = 0 ; + int ifdef_stack[100] = {1} ; int inquote, retval ; ifdef_stack[0] = 1 ; @@ -149,7 +150,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 5 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* I have no clue what the next line was trying to say */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } ifdef_stack_ptr++ ; ifdef_stack[ifdef_stack_ptr] = ( sym_get(value) != NULL && ifdef_stack[ifdef_stack_ptr-1] ) ; if ( ifdef_stack_ptr >= 100 ) { fprintf(stderr,"Registry fatal: too many nested ifdefs\n") ; exit(1) ; } @@ -160,7 +167,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 6 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* I have no idea what the next line was trying to accomplish */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } ifdef_stack_ptr++ ; ifdef_stack[ifdef_stack_ptr] = ( sym_get(value) == NULL && ifdef_stack[ifdef_stack_ptr-1] ) ; if ( ifdef_stack_ptr >= 100 ) { fprintf(stderr,"Registry fatal: too many nested ifdefs\n") ; exit(1) ; } @@ -176,7 +189,13 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) p += 6 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; strncpy(value, p, 31 ) ; value[31] = '\0' ; if ( (p=index(value,'\n')) != NULL ) *p = '\0' ; - if ( (p=index(value,' ')) != NULL ) *p = '\0' ; if ( (p=index(value,' ')) != NULL ) *p = '\0' ; + /* Another instance of this distinctly odd pattern */ + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } + if ( (p=index(value,' ')) != NULL ) { + *p = '\0' ; + } sym_add( value ) ; continue ; } @@ -246,7 +265,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) } sprintf(xstr,"%c",x) ; if ( x != 'b' || inbrace ) strcat ( newdims , xstr ) ; - if ( x != 'f' && x != 't' || inbrace ) strcat( newdims4d , xstr ) ; + if ( (x != 'f' && x != 't') || inbrace ) strcat( newdims4d , xstr ) ; } if ( wantsbdy ) { @@ -265,7 +284,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) if ( !strcmp( tokens[F_USE] , tracers[i] ) ) found = 1 ; } if ( found == 0 ) { - sprintf(tracers[ntracers],tokens[F_USE]) ; + snprintf(tracers[ntracers], 100, tokens[F_USE]) ; ntracers++ ; /* add entries for _b and _bt arrays */ @@ -315,7 +334,8 @@ reg_parse( FILE * infile ) char inln[7000], parseline[7000] ; char *p, *q ; char *tokens[MAXTOKENS], *toktmp[MAXTOKENS] ; - int i, ii, idim ; + unsigned int i, ii; + int idim ; int defining_state_field, defining_rconfig_field, defining_i1_field ; parseline[0] = '\0' ; @@ -487,7 +507,7 @@ reg_parse( FILE * infile ) char prev = '\0' ; char x ; char tmp[NAMELEN], tmp1[NAMELEN], tmp2[NAMELEN] ; - int len_of_tok ; + ssize_t len_of_tok = 0 ; char fcn_name[2048], aux_fields[2048] ; strcpy(tmp,tokens[FIELD_IO]) ; @@ -518,7 +538,7 @@ reg_parse( FILE * infile ) if (( pp = index(tmp2,'}') ) != NULL ) { *pp = '\0' ; unitid = atoi(tmp2) ; /* JM 20100416 */ - if ( unitid >= 0 || unitid < MAX_STREAMS && stream + unitid < MAX_HISTORY ) { + if ( unitid >= 0 || (unitid < MAX_STREAMS && stream + unitid < MAX_HISTORY) ) { set_mask( mask , stream + unitid ) ; } p = p + strlen(tmp2) + 1 ; @@ -545,7 +565,7 @@ reg_parse( FILE * infile ) *pp = '\0' ; iii = pp - (tmp + i + 1) ; unitid = atoi(tmp+i+1) ; /* JM 20091102 */ - if ( unitid >= 0 || unitid < MAX_STREAMS && unitid < MAX_HISTORY ) { + if ( unitid >= 0 || (unitid < MAX_STREAMS && unitid < MAX_HISTORY) ) { if ( prev == 'i' ) { set_mask( field_struct->io_mask , unitid + MAX_HISTORY ) ; } else if ( prev == 'h' ) { @@ -576,7 +596,8 @@ reg_parse( FILE * infile ) if ( tokens[FIELD_IO][i+1] == '=' ) { - int ii, jj, state ; + unsigned int ii; + int jj, state ; state = 0 ; jj = 0 ; for ( ii = i+3 ; ii < len_of_tok ; ii++ ) @@ -1067,7 +1088,7 @@ check_dimspecs() p->assoc_nl_var_s,p->name ) ; return(1) ; } - if ( ! q->node_kind & RCONFIG ) + if ( ! (q->node_kind & RCONFIG) ) { fprintf(stderr,"WARNING: no namelist variable %s defined for dimension %s\n", p->assoc_nl_var_s,p->name ) ; @@ -1092,7 +1113,7 @@ check_dimspecs() p->assoc_nl_var_e,p->name ) ; return(1) ; } - if ( ! q->node_kind & RCONFIG ) + if ( ! (q->node_kind & RCONFIG) ) { fprintf(stderr,"WARNING: no namelist variable %s defined for dimension %s\n", p->assoc_nl_var_e,p->name ) ; diff --git a/tools/registry.c b/tools/registry.c index b2dd0a5f6a..2d246a8bfa 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -1,16 +1,15 @@ #include #include #ifdef _WIN32 +#define rindex(X,Y) strrchr(X,Y) +#define index(X,Y) strchr(X,Y) +#endif # include -# define rindex(X,Y) strrchr(X,Y) -# define index(X,Y) strchr(X,Y) -#else # include # include # include # include # include -#endif #define DEFINE_GLOBALS #include "protos.h" @@ -23,13 +22,14 @@ /* SamT: bug fix: main returns int */ int -main( int argc, char *argv[], char *env[] ) +main( int argc, char *argv[] ) { - char fname_in[NAMELEN], dir[NAMELEN], fname_tmp[NAMELEN], command[NAMELEN] ; - char fname_wrk[NAMELEN] ; + char fname_in[NAMELEN] = {'\0'}, dir[NAMELEN] = {'\0'}; + char fname_tmp[NAMELEN] = {'\0'}, command[2 * NAMELEN + 32] = {'\0'}; + char fname_wrk[NAMELEN + 18] = {'\0'}; FILE * fp_in, *fp_tmp ; - char * thisprog ; - char *env_val ; + char * thisprog = ""; + char *env_val = ""; int mypid ; int do_irr_diag ; #ifndef _WIN32 @@ -37,7 +37,7 @@ main( int argc, char *argv[], char *env[] ) #endif mypid = (int) getpid() ; - strcpy( thiscom, argv[0] ) ; + strncpy( thiscom, argv[0], 4 * NAMELEN - 1) ; argv++ ; sw_deref_kludge = 0 ; @@ -160,7 +160,23 @@ main( int argc, char *argv[], char *env[] ) sprintf( fname_wrk,"%s/Registry_irr_diag",dir ) ; } // fprintf(stderr,"Registry tmp file = %s\n",fname_wrk); - sprintf(command,"/bin/cp %s %s\n",fname_in,fname_wrk); + /* we should be able to implement this using posix_spawn */ + /* + #include + extern char **environ; + pid_t child_pid; + // There doesn't seem to be a way to specify the length, so I'm + // assuming it's null-terminated + char *command_argv[4] = {"/bin/cp", NULL, NULL, NULL}; + command_argv[1] = fname_in; + command_argv[2] = fname_wrk; + + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not copy %s to %s\n", fname_in, fname_wrk); + exit(2); + } + */ + sprintf(command,"/bin/cp \'%s\' \'%s\'\n",fname_in,fname_wrk); // fprintf(stderr,"Command = %s\n",command); if( system( command ) ) { fprintf(stderr,"Could not copy %s to %s\n",fname_in,fname_wrk); @@ -172,6 +188,15 @@ main( int argc, char *argv[], char *env[] ) exit(2) ; } if( !access( "Registry/registry.irr_diag",F_OK ) ) { + /* + command_argv[0] = "/bin/rm"; + command_argv[1] = "-f"; + command_argv[2] = "Registry/registry.irr_diag"; + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not remove Registry/registry.irr_diag\n", fname_in, fname_wrk); + exit(2); + } + */ sprintf(command,"/bin/rm -f Registry/registry.irr_diag\n"); if( system( command ) ) { fprintf(stderr,"Could not remove Registry/registry.irr_diag\n"); @@ -282,6 +307,15 @@ main( int argc, char *argv[], char *env[] ) sprintf(command,"del /F /Q %s\n",fname_tmp ); #else if( do_irr_diag ) { + /* + command_argv[0] = "/bin/rm"; + command_argv[1] = "-f"; + command_argv[2] = fname_wrk; + if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { + fprintf(stderr, "Could not remove %s\n", fname_wrk); + exit(2); + } + */ sprintf(command,"/bin/rm -f %s\n",fname_wrk ); system( command ) ; } diff --git a/tools/registry.h b/tools/registry.h index 0a2e627ffd..cafde2ad4e 100644 --- a/tools/registry.h +++ b/tools/registry.h @@ -1,4 +1,8 @@ #ifndef REGISTRY_H +#include +#include +#include + #define NAMELEN 512 #define NAMELEN_LONG 125000 #define MAXDIMS 21 diff --git a/tools/set_dim_strs.c b/tools/set_dim_strs.c index 91d75b127c..491ffd8702 100644 --- a/tools/set_dim_strs.c +++ b/tools/set_dim_strs.c @@ -18,7 +18,7 @@ set_dim_strs_x ( node_t *node , char ddim[3][2][NAMELEN], char mdim[3][2][NAMELE { int i, j, ii ; node_t *p ; - char d, d1 ; + char d = '\0', d1 = '\0' ; char * stag ; char r1[NAMELEN] ; diff --git a/tools/sym.c b/tools/sym.c index d6977116f5..702365d34a 100644 --- a/tools/sym.c +++ b/tools/sym.c @@ -152,6 +152,7 @@ show_entry(sym_nodeptr x) int sym_forget() { + /* for (int i = 0; i < SIZEOF_SYMTAB; i++); free(symtab[i]); free(symtab); */ create_ht( &symtab ) ; if (symtab == NULL) { diff --git a/tools/sym.h b/tools/sym.h index 5480b9d908..75e7bb22bd 100644 --- a/tools/sym.h +++ b/tools/sym.h @@ -55,6 +55,7 @@ ***************************************************************************/ #ifndef SYM_H #define SYM_H +#include /* file: sym.h diff --git a/tools/symtab_gen.c b/tools/symtab_gen.c index a6ddcf9661..4ea58d5171 100644 --- a/tools/symtab_gen.c +++ b/tools/symtab_gen.c @@ -41,6 +41,9 @@ For a sample main or calling program see the end of this file. #define HASHSIZE 1024 +#include "sym.h" +int hash(char * name); + /* commented out 2-29-90 static char * symtab[HASHSIZE] ; */ @@ -49,7 +52,7 @@ void * malloc() ; void * calloc() ; */ -char * symget(char *name,char *(*newnode)(),char **(*nodename)(char *),char **(*nodenext)(char *), char *symtab[], int flag) /* flag = 1 is create if not there, 0 return NULL if not there */ +sym_nodeptr symget(char *name,char *(*newnode)(),char **(*nodename)(char *),char **(*nodenext)(char *), char *symtab[], int flag) /* flag = 1 is create if not there, 0 return NULL if not there */ { int index ; int found ; @@ -90,7 +93,7 @@ char * symget(char *name,char *(*newnode)(),char **(*nodename)(char *),char **(* } } - return(p) ; + return ((sym_nodeptr) p) ; } int hash(char * name ) diff --git a/tools/type.c b/tools/type.c index 0ef42c74d1..e40d4ef7c1 100644 --- a/tools/type.c +++ b/tools/type.c @@ -230,7 +230,7 @@ get_entry_r ( char * name , char * use , node_t * node ) node_t * get_dimnode_for_coord ( node_t * node , int coord_axis ) { - int i ; + unsigned int i ; if ( node == NULL ) return(NULL) ; for ( i = 0 ; i < node->ndims ; i++ ) { @@ -246,7 +246,7 @@ get_dimnode_for_coord ( node_t * node , int coord_axis ) int get_index_for_coord ( node_t * node , int coord_axis ) { - int i ; + unsigned int i ; if ( node == NULL ) return( -1 ) ; for ( i = 0 ; i < node->ndims ; i++ ) { @@ -263,7 +263,7 @@ get_index_for_coord ( node_t * node , int coord_axis ) char * set_mem_order( node_t * node , char * str , int n ) { - int i ; + unsigned int i ; node_t * p ; if ( str == NULL || node == NULL ) return(NULL) ; From 9e252e519617737b8cb4fac67f935fbbd7d131a0 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Sat, 21 Oct 2023 13:02:25 -0400 Subject: [PATCH 11/28] STY: Create macro for extra space in destination buffer. --- tools/Makefile | 2 +- tools/data.h | 2 +- tools/gen_allocs.c | 12 ++++++------ tools/gen_args.c | 2 +- tools/gen_interp.c | 12 ++++++------ tools/gen_irr_diag.c | 19 +++++++++++-------- tools/gen_scalar_indices.c | 10 +++++----- tools/gen_wrf_io.c | 6 +++--- tools/misc.c | 10 +++++----- tools/registry.c | 4 ++-- tools/registry.h | 2 ++ 11 files changed, 43 insertions(+), 38 deletions(-) diff --git a/tools/Makefile b/tools/Makefile index 8b0723a57f..4e2dc3733c 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -9,7 +9,7 @@ WARNING = -Wall -Wextra # -Werror GCC_WARNING = -Wno-unused-variable -Wno-unused-but-set-variable \ -Wno-unused-parameter -Wformat=2 -Wformat-truncation=2 \ -Wformat-overflow=2 -Wno-format-security -Wno-format-nonliteral \ - -Wno-sign-compare -Wno-misleading-indentation + -Wno-sign-compare -Wno-misleading-indentation -Wno-error=format-truncation OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_defs.o gen_allocs.o gen_mod_state_descr.o gen_scalar_indices.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ diff --git a/tools/data.h b/tools/data.h index a70240a8ea..e59c616261 100644 --- a/tools/data.h +++ b/tools/data.h @@ -119,7 +119,7 @@ EXTERN node_t * Cycles ; EXTERN node_t Domain ; -EXTERN char t1[NAMELEN], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN + 11], t5[NAMELEN], t6[NAMELEN] ; +EXTERN char t1[NAMELEN], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN + EXTRA_FOR_DEST_BUFFER], t5[NAMELEN], t6[NAMELEN] ; EXTERN char thiscom[4*NAMELEN] ; EXTERN int model_order[3] ; diff --git a/tools/gen_allocs.c b/tools/gen_allocs.c index 5d86eff2f8..891e7728f5 100644 --- a/tools/gen_allocs.c +++ b/tools/gen_allocs.c @@ -82,10 +82,10 @@ gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, node_t * p ; int tag = 0 ; char post[NAMELEN], post_for_count[NAMELEN] ; - char fname[NAMELEN], dname[NAMELEN + 11], dname_tmp[NAMELEN] ; - char x[NAMELEN + 4] ; - char x2[NAMELEN + 2], fname2[2 * NAMELEN + 1] ; - char dimname[3][NAMELEN + 12] ; + char fname[NAMELEN], dname[NAMELEN + EXTRA_FOR_DEST_BUFFER], dname_tmp[NAMELEN] ; + char x[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; + char x2[NAMELEN + EXTRA_FOR_DEST_BUFFER], fname2[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER] ; + char dimname[3][NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char tchar = '\0'; unsigned int *io_mask ; int nd ; @@ -120,7 +120,7 @@ gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, */ if ( tag == 1 ) { - char dname_symbol[NAMELEN + 7] ; + char dname_symbol[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; sym_nodeptr sym_node ; sprintf(dname_symbol, "DNAME_%s", dname_tmp ) ; @@ -607,7 +607,7 @@ gen_dealloc2 ( FILE * fp , char * structname , node_t * node ) int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN + 4] ; + char x[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_args.c b/tools/gen_args.c index 014c4dd307..3121ec3947 100644 --- a/tools/gen_args.c +++ b/tools/gen_args.c @@ -88,7 +88,7 @@ gen_args1 ( FILE * fp , char * outstr , char * structname , int tag ; char post[NAMELEN] ; char fname[NAMELEN] ; - char x[NAMELEN + 4], y[NAMELEN] ; + char x[NAMELEN + EXTRA_FOR_DEST_BUFFER], y[NAMELEN] ; char indices[NAMELEN] ; int lenarg ; int only4d = 0 ; diff --git a/tools/gen_interp.c b/tools/gen_interp.c index 1771b5815d..f53d8253fa 100644 --- a/tools/gen_interp.c +++ b/tools/gen_interp.c @@ -66,7 +66,7 @@ int contains_tok( char *s1, char *s2, char *delims ) /* Had to increase size for SOA from 4*4096 to 4*7000 */ -char halo_define[4*7000], halo_use[NAMELEN] = {'\0'}, halo_id[NAMELEN], x[2 * NAMELEN + 1] ; +char halo_define[4*7000], halo_use[NAMELEN] = {'\0'}, halo_id[NAMELEN], x[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER] ; /*KAL added this for vertical interpolation */ /*DJW 131202 modified to create files required for vertical interpolation from parent to nest */ @@ -168,7 +168,7 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , char nddim2[3][2][NAMELEN] ; char nmdim2[3][2][NAMELEN] ; char npdim2[3][2][NAMELEN] ; - char vname[3 * NAMELEN + 88], vname2[3 * NAMELEN + 88] ; + char vname[3 * NAMELEN + 5 * EXTRA_FOR_DEST_BUFFER], vname2[3 * NAMELEN + 5 * EXTRA_FOR_DEST_BUFFER] ; char tag[NAMELEN] = {'\0'}, tag2[NAMELEN] = {'\0'} ; char fcn_name[NAMELEN] ; char xstag[NAMELEN], ystag[NAMELEN] ; @@ -359,7 +359,7 @@ fprintf(fp," ngrid%%i_parent_start, ngrid%%j_parent_start, fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio &\n") ; { - char tmpstr[2 * NAMELEN + 8], *p1 ; + char tmpstr[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER], *p1 ; node_t * nd, * pp ; pp = NULL ; if ( p->node_kind & FOURD ) { @@ -378,9 +378,9 @@ fprintf(fp," ngrid%%parent_grid_ratio, ngrid%%parent_grid_ratio } else if ( down_path & FORCE_DOWN ) { /* by default, add the boundary and boundary tendency fields to the arg list */ if ( ! (p->node_kind & FOURD) ) { - snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", pp->name, pp->name ) ; + snprintf( tmpstr , 2 * NAMELEN + EXTRA_FOR_DEST_BUFFER, "%s_b,%s_bt,", pp->name, pp->name ) ; } else { - snprintf( tmpstr , 2 * NAMELEN + 8, "%s_b,%s_bt,", p->name, p->name ) ; + snprintf( tmpstr , 2 * NAMELEN + EXTRA_FOR_DEST_BUFFER, "%s_b,%s_bt,", p->name, p->name ) ; } strcat( tmpstr , pp->force_aux_fields ) ; } else if ( down_path & INTERP_DOWN ) { @@ -507,7 +507,7 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; char pdim[3][2][NAMELEN] ; - char vname[3 * NAMELEN + 88], vname2[3 * NAMELEN + 88] ; + char vname[3 * NAMELEN + 5 * EXTRA_FOR_DEST_BUFFER], vname2[3 * NAMELEN + 5 * EXTRA_FOR_DEST_BUFFER] ; char tag[NAMELEN], tag2[NAMELEN] ; char dexes[NAMELEN] ; char ndexes[NAMELEN] ; diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index e310f4e3a1..0b7f9be023 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -7,9 +7,12 @@ #include #include +#define TABLE_ENTRY 128 +#define EXTRA_FOR_DEST_BUFFER 32 + short int nChmOpts = 0; -char rxt_tbl[5][1000][128] = { '\0' }; -char chm_scheme[5][128] = { '\0' }; +char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; +char chm_scheme[5][TABLE_ENTRY] = { '\0' }; short int rxt_cnt[5]; void strip_blanks( char *instring, char *outstring ) @@ -42,10 +45,10 @@ int AppendReg( char *chem_opt, int ndx ) char path[256 * 2 + 25]; char fname[256]; char inln[1024],winln[1024],s[1024]; - char rxtstr[128]; - char rxtstr_tbl[1000][128]; - char buffer[128]; - char rxtsym[128]; + char rxtstr[TABLE_ENTRY]; + char rxtstr_tbl[1000][TABLE_ENTRY]; + char buffer[TABLE_ENTRY]; + char rxtsym[TABLE_ENTRY]; FILE *fp_eqn, *fp_reg; strcpy( fname,chem_opt ); @@ -206,7 +209,7 @@ int irr_diag_scalar_indices( char *dirname ) short int i, j; int first, flush, s1; char fname[256]; - char line[135]; + char line[TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER + 1]; char piece[135]; char *blank = " "; FILE *fp_inc; @@ -279,7 +282,7 @@ int irr_diag_scalar_indices( char *dirname ) for( i = 0; /*i < nChmOpts &&*/ rxt_cnt[i] > 0; i++ ) { for( j = 0; j < rxt_cnt[i]; j++ ) { - snprintf( line,132," rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); + snprintf( line, TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER, " rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); fprintf( fp_inc,"%s",line); } fprintf( fp_inc," \n"); diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index 7456ad37cf..fe88f58afd 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -24,7 +24,7 @@ int gen_scalar_indices ( char * dirname ) { FILE * fp, *fp5[26] ; - char fname[NAMELEN], fname5[2 * NAMELEN + 1] ; + char fname[NAMELEN], fname5[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char * fn = "scalar_indices.inc" ; char * fn2 = "scalar_tables.inc" ; char * fn3 = "scalar_tables_init.inc" ; @@ -49,7 +49,7 @@ gen_scalar_indices ( char * dirname ) NAMELEN elements of the entry of fn5 (each NAMELEN chars long) */ snprintf(fname5,sizeof(fname5),"%s/%." stringify_const(NAMELEN) "s",dirname,fn5[i]) ; } else { - sprintf(fname5,"%s", fn5[i]); + snprintf(fname5, NAMELEN + 1, "%." stringify_const(NAMELEN) "s", fn5[i]); } if ((fp5[i] = fopen( fname5 , "w" )) == NULL ) return(1) ; print_warning(fp5[i],fname5) ; @@ -130,7 +130,7 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) node_t * p, * memb , * pkg, * rconfig, * fourd, *x ; char * c , *pos1, *pos2 ; char assoc_namelist_var[NAMELEN], assoc_namelist_choice[NAMELEN], assoc_4d[NAMELEN_LONG], fname[NAMELEN_LONG] ; - char fname2[NAMELEN], tmp1[NAMELEN + 5], tmp2[NAMELEN + 4] ; + char fname2[NAMELEN], tmp1[NAMELEN + EXTRA_FOR_DEST_BUFFER], tmp2[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char scalars_str[NAMELEN_LONG] ; char * scalars ; int i ; @@ -187,11 +187,11 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) fprintf(fp," P_%s = %s_index_table( PARAM_%s , idomain )\n",c,assoc_4d,c) ; fprintf(fp," END IF\n") ; { - char fourd_bnd[NAMELEN_LONG + 3] = { '\0' } ; + char fourd_bnd[NAMELEN_LONG + 4] = { '\0' } ; /* check for the existence of a fourd boundary array associated with this 4D array */ /* set io_mask accordingly for gen_wrf_io to know that it should generate i/o for _b and _bt */ /* arrays */ - snprintf(fourd_bnd, NAMELEN_LONG + 3,"%s_b",assoc_4d) ; + snprintf(fourd_bnd, NAMELEN_LONG + 3, "%s_b",assoc_4d) ; if ( get_entry_r( fourd_bnd, NULL, Domain.fields) != NULL ) { x->boundary = 1 ; } diff --git a/tools/gen_wrf_io.c b/tools/gen_wrf_io.c index bbd3fcbd59..89996f0b78 100644 --- a/tools/gen_wrf_io.c +++ b/tools/gen_wrf_io.c @@ -50,7 +50,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no node_t * p ; int i , ii ; char x[NAMELEN], tag[NAMELEN], dexes[NAMELEN] ; - char dname[NAMELEN + 6], dname_tmp[NAMELEN] ; + char dname[NAMELEN + EXTRA_FOR_DEST_BUFFER], dname_tmp[NAMELEN] ; char vname[NAMELEN], vname_x[NAMELEN],vname_1[NAMELEN], vname_2[NAMELEN], memord[NAMELEN] ; char ddim[3][2][NAMELEN] ; char mdim[3][2][NAMELEN] ; @@ -58,7 +58,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no char ddim_no[3][2][NAMELEN] ; char mdim_no[3][2][NAMELEN] ; char pdim_no[3][2][NAMELEN] ; - char dimname[3][NAMELEN + 6] ; + char dimname[3][NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char stagstr[NAMELEN] ; char * tend_tag ; @@ -115,7 +115,7 @@ gen_wrf_io2 ( FILE * fp , char * fname, char * structname , char * fourdname, no int ibdy ; int idx ; node_t *fourd_bound_array ; - char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="", bdytag2[10],fourd_bnd[NAMELEN + 2] ; + char *bdytag="", *xdomainend="", *ydomainend="", *zdomainend="", bdytag2[10],fourd_bnd[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char *ds1="",*de1="",*ds2="",*de2="",*ds3="",*de3="",*ms1="",*me1="",*ms2="",*me2="",*ms3="",*me3="",*ps1="",*pe1="",*ps2="",*pe2="",*ps3="",*pe3="" ; #if ( WRFPLUS == 1 ) diff --git a/tools/misc.c b/tools/misc.c index 40136d13fc..79d2f7c736 100644 --- a/tools/misc.c +++ b/tools/misc.c @@ -45,7 +45,7 @@ char * dimension_with_ones( char * pre , char * tmp , node_t * p , char * post ) { unsigned int i ; - char r[NAMELEN + 12],s[NAMELEN],four_d[NAMELEN + 6] ; + char r[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER],s[NAMELEN],four_d[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char *pp ; if ( p == NULL ) return("") ; if ( p->ndims <= 0 && ! p->boundary_array ) return("") ; @@ -91,8 +91,8 @@ dimension_with_ranges( char * refarg , char * pre , should be dereference from, or "" */ { unsigned int i ; - char tx[6 * NAMELEN + 82] ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + 5] ; + char tx[6 * (NAMELEN + EXTRA_FOR_DEST_BUFFER)] ; + char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; @@ -563,8 +563,8 @@ array_size_expression ( char * refarg , char * pre , should be dereference from, or "" */ { unsigned int i ; - char tx[6 * NAMELEN + 87] ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + 6] ; + char tx[6 * (NAMELEN + EXTRA_FOR_DEST_BUFFER)] ; + char r[NAMELEN],s[NAMELEN],four_d[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; int bdex = 0, xdex, ydex, zdex ; node_t *xdim, *ydim, *zdim ; char *pp ; diff --git a/tools/registry.c b/tools/registry.c index 2d246a8bfa..f591928dd7 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -25,8 +25,8 @@ int main( int argc, char *argv[] ) { char fname_in[NAMELEN] = {'\0'}, dir[NAMELEN] = {'\0'}; - char fname_tmp[NAMELEN] = {'\0'}, command[2 * NAMELEN + 32] = {'\0'}; - char fname_wrk[NAMELEN + 18] = {'\0'}; + char fname_tmp[NAMELEN] = {'\0'}, command[2 * (NAMELEN + EXTRA_FOR_DEST_BUFFER)] = {'\0'}; + char fname_wrk[NAMELEN + EXTRA_FOR_DEST_BUFFER] = {'\0'}; FILE * fp_in, *fp_tmp ; char * thisprog = ""; char *env_val = ""; diff --git a/tools/registry.h b/tools/registry.h index cafde2ad4e..983aaff8a4 100644 --- a/tools/registry.h +++ b/tools/registry.h @@ -5,6 +5,8 @@ #define NAMELEN 512 #define NAMELEN_LONG 125000 +#define EXTRA_FOR_DEST_BUFFER 20 + #define MAXDIMS 21 #define MAX_DYNCORES 50 /* ha ha, just kidding */ /* #define MAX_ARGLINE 175 WRF uses 128 by default, but the nested chem version hit the continuation line limit for efc so it had to be increased, wig 14-Oct-2004 */ From 334a1a22e424f6b505e24564f9356408d1ec9230 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Mon, 8 May 2023 16:10:07 -0400 Subject: [PATCH 12/28] BLD,BUG: Don't add warning flags to default compilation Change compile flags back to what they were before. --- tools/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/Makefile b/tools/Makefile index 4e2dc3733c..d5266e5629 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -3,8 +3,7 @@ CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = -DEBUG = -g3 -ggdb3 -Og -fvar-tracking -fvar-tracking-assignments -gcolumn-info -fbounds-check -fstack-protector-all -fstack-protector-strong -fstack-check -DEBUG = -Og -g -fuse-linker-plugin -flto=3 +DEBUG = -g WARNING = -Wall -Wextra # -Werror GCC_WARNING = -Wno-unused-variable -Wno-unused-but-set-variable \ -Wno-unused-parameter -Wformat=2 -Wformat-truncation=2 \ @@ -15,7 +14,6 @@ OBJ = registry.o my_strtok.o reg_parse.o data.o type.o misc.o \ gen_args.o gen_config.o sym.o symtab_gen.o gen_irr_diag.o \ gen_model_data_ord.o gen_interp.o gen_comms.o gen_scalar_derefs.o set_dim_strs.o gen_wrf_io.o\ gen_streams.o -DEBUG += $(WARNING) $(GCC_WARNING) registry : $(OBJ) standard.exe $(CC_TOOLS) -o registry $(DEBUG) $(LDFLAGS) $(OBJ) From afd1c1ac0397980dc4929dbbcef73ba8211fda65 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Tue, 9 May 2023 16:52:44 -0400 Subject: [PATCH 13/28] BUG: io.h only available on Windows/Cygwin Guard io.h #include to avoid Linux compilation failures. --- tools/registry.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/registry.c b/tools/registry.c index f591928dd7..30cc38b711 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -1,10 +1,12 @@ #include #include +#if defined(_WIN32) || defined(__CYGWIN__) +# include +#endif #ifdef _WIN32 -#define rindex(X,Y) strrchr(X,Y) -#define index(X,Y) strchr(X,Y) +# define rindex(X,Y) strrchr(X,Y) +# define index(X,Y) strchr(X,Y) #endif -# include # include # include # include From 173864f27954efd9249c4d19a06ed2ab9ad2023a Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Sun, 22 Oct 2023 11:29:59 -0400 Subject: [PATCH 14/28] STY: Add sufficient space to more destination buffers. Given how much space this provides at the moment, this had better not run over. --- tools/data.h | 2 +- tools/gen_allocs.c | 6 +++--- tools/gen_defs.c | 2 +- tools/gen_interp.c | 4 ++-- tools/reg_parse.c | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/data.h b/tools/data.h index e59c616261..c609788c03 100644 --- a/tools/data.h +++ b/tools/data.h @@ -119,7 +119,7 @@ EXTERN node_t * Cycles ; EXTERN node_t Domain ; -EXTERN char t1[NAMELEN], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN + EXTRA_FOR_DEST_BUFFER], t5[NAMELEN], t6[NAMELEN] ; +EXTERN char t1[NAMELEN + EXTRA_FOR_DEST_BUFFER], t2[NAMELEN], t3[NAMELEN], t4[NAMELEN + EXTRA_FOR_DEST_BUFFER], t5[NAMELEN], t6[NAMELEN] ; EXTERN char thiscom[4*NAMELEN] ; EXTERN int model_order[3] ; diff --git a/tools/gen_allocs.c b/tools/gen_allocs.c index 891e7728f5..0e3a0fa927 100644 --- a/tools/gen_allocs.c +++ b/tools/gen_allocs.c @@ -81,7 +81,7 @@ gen_alloc2 ( FILE * fp , char * structname , char * structname2 , node_t * node, { node_t * p ; int tag = 0 ; - char post[NAMELEN], post_for_count[NAMELEN] ; + char post[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER], post_for_count[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER] ; char fname[NAMELEN], dname[NAMELEN + EXTRA_FOR_DEST_BUFFER], dname_tmp[NAMELEN] ; char x[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char x2[NAMELEN + EXTRA_FOR_DEST_BUFFER], fname2[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER] ; @@ -544,7 +544,7 @@ gen_ddt_write1 ( FILE * fp , char * structname , node_t * node ) { node_t * p ; int tag ; - char post[NAMELEN] ; + char post[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER] ; char fname[NAMELEN] ; char x[NAMELEN] ; @@ -605,7 +605,7 @@ gen_dealloc2 ( FILE * fp , char * structname , node_t * node ) { node_t * p ; int tag ; - char post[NAMELEN] ; + char post[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER] ; char fname[NAMELEN] ; char x[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; diff --git a/tools/gen_defs.c b/tools/gen_defs.c index fef98474dd..0668d80702 100644 --- a/tools/gen_defs.c +++ b/tools/gen_defs.c @@ -139,7 +139,7 @@ gen_decls ( FILE * fp , node_t * node , int sw_ranges, int sw_point , int mask , { node_t * p ; int tag, ipass ; - char fname[NAMELEN], post[NAMELEN] ; + char fname[NAMELEN], post[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER] ; char * dimspec = ""; int bdyonly = 0 ; diff --git a/tools/gen_interp.c b/tools/gen_interp.c index f53d8253fa..f905a11512 100644 --- a/tools/gen_interp.c +++ b/tools/gen_interp.c @@ -176,7 +176,7 @@ gen_nest_interp1 ( FILE * fp , node_t * node, char * fourdname, int down_path , char ndexes[NAMELEN] ; char *maskstr ; char *grid ; - char *colon, r[10],tx[80],temp[80],moredims[80] ; + char *colon, r[10],tx[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER],temp[80],moredims[80] ; int d ; double real_store; long long_store; @@ -512,7 +512,7 @@ gen_nest_interp2 ( FILE * fp , node_t * node, char * fourdname, int down_path , char dexes[NAMELEN] ; char ndexes[NAMELEN] ; char *grid ; - char *colon,r[10],tx[80],temp[80],moredims[80] ; + char *colon,r[10],tx[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER],temp[80],moredims[80] ; int d ; char zstag[NAMELEN]; char fcn_name[NAMELEN]; diff --git a/tools/reg_parse.c b/tools/reg_parse.c index d7b08e4f07..dc9fc07702 100644 --- a/tools/reg_parse.c +++ b/tools/reg_parse.c @@ -118,8 +118,8 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) for ( p = inln ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; if ( !strncmp( p , "include", 7 ) && ! ( ifdef_stack_ptr >= 0 && ! ifdef_stack[ifdef_stack_ptr] ) ) { FILE *include_fp ; - char include_file_name_local_registry[128] ; - char include_file_name[128] ; + char include_file_name_local_registry[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; + char include_file_name[2 * NAMELEN + EXTRA_FOR_DEST_BUFFER] ; p += 7 ; for ( ; ( *p == ' ' || *p == ' ' ) && *p != '\0' ; p++ ) ; if ( strlen( p ) > 127 ) { fprintf(stderr,"Registry warning: invalid include file name: %s\n", p ) ; } else { From ba2eb1c9557e586832ab71984c15795277e44b9d Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:46:27 -0400 Subject: [PATCH 15/28] ENH: Include the nChmOpts check in the loop condition in gen_irr_diag.c --- tools/gen_irr_diag.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 0b7f9be023..9eeb7f26cc 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -13,7 +13,7 @@ short int nChmOpts = 0; char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; char chm_scheme[5][TABLE_ENTRY] = { '\0' }; -short int rxt_cnt[5]; +short int rxt_cnt[5] = {0, 0}; void strip_blanks( char *instring, char *outstring ) { @@ -280,7 +280,7 @@ int irr_diag_scalar_indices( char *dirname ) fprintf( fp_inc,line ); fprintf( fp_inc," \n"); - for( i = 0; /*i < nChmOpts &&*/ rxt_cnt[i] > 0; i++ ) { + for( i = 0; i < nChmOpts && rxt_cnt[i] > 0; i++ ) { for( j = 0; j < rxt_cnt[i]; j++ ) { snprintf( line, TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER, " rxtsym(%d,%d) = '%s'\n",j+1,i+1,rxt_tbl[i][j]); fprintf( fp_inc,"%s",line); From 22c4ba06a014219048ec087c423348d38656e5fb Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:21:11 -0400 Subject: [PATCH 16/28] STY: Delete the partial posix_spawn calls. Most likely the better solution is to look up functions to copy or delete files directly. I'm not sure where to look for those, but I'm pretty sure they're not in the C standard. --- tools/registry.c | 37 ++----------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/tools/registry.c b/tools/registry.c index 30cc38b711..45a8bb14ec 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -163,21 +163,6 @@ main( int argc, char *argv[] ) } // fprintf(stderr,"Registry tmp file = %s\n",fname_wrk); /* we should be able to implement this using posix_spawn */ - /* - #include - extern char **environ; - pid_t child_pid; - // There doesn't seem to be a way to specify the length, so I'm - // assuming it's null-terminated - char *command_argv[4] = {"/bin/cp", NULL, NULL, NULL}; - command_argv[1] = fname_in; - command_argv[2] = fname_wrk; - - if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { - fprintf(stderr, "Could not copy %s to %s\n", fname_in, fname_wrk); - exit(2); - } - */ sprintf(command,"/bin/cp \'%s\' \'%s\'\n",fname_in,fname_wrk); // fprintf(stderr,"Command = %s\n",command); if( system( command ) ) { @@ -190,15 +175,6 @@ main( int argc, char *argv[] ) exit(2) ; } if( !access( "Registry/registry.irr_diag",F_OK ) ) { - /* - command_argv[0] = "/bin/rm"; - command_argv[1] = "-f"; - command_argv[2] = "Registry/registry.irr_diag"; - if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { - fprintf(stderr, "Could not remove Registry/registry.irr_diag\n", fname_in, fname_wrk); - exit(2); - } - */ sprintf(command,"/bin/rm -f Registry/registry.irr_diag\n"); if( system( command ) ) { fprintf(stderr,"Could not remove Registry/registry.irr_diag\n"); @@ -309,19 +285,10 @@ main( int argc, char *argv[] ) sprintf(command,"del /F /Q %s\n",fname_tmp ); #else if( do_irr_diag ) { - /* - command_argv[0] = "/bin/rm"; - command_argv[1] = "-f"; - command_argv[2] = fname_wrk; - if (posix_spawn(&child_pid, command_argv[0], NULL, NULL, command_argv, environ)) { - fprintf(stderr, "Could not remove %s\n", fname_wrk); - exit(2); - } - */ - sprintf(command,"/bin/rm -f %s\n",fname_wrk ); + sprintf(command,"/bin/rm -f \'%s\'\n",fname_wrk ); system( command ) ; } - sprintf(command,"/bin/rm -f %s\n",fname_tmp ); + sprintf(command,"/bin/rm -f \'%s\'\n",fname_tmp ); #endif return system( command ) ; } From 1208434fdf160c033f01909c625b0b0b45f3479b Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:34:19 -0400 Subject: [PATCH 17/28] STY: Remove the partial memory leak fix. I pushed it to another branch, so a PR version can get some eyes on it. --- tools/sym.c | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/sym.c b/tools/sym.c index 702365d34a..d6977116f5 100644 --- a/tools/sym.c +++ b/tools/sym.c @@ -152,7 +152,6 @@ show_entry(sym_nodeptr x) int sym_forget() { - /* for (int i = 0; i < SIZEOF_SYMTAB; i++); free(symtab[i]); free(symtab); */ create_ht( &symtab ) ; if (symtab == NULL) { From 317d219d8e042b8008585364f0665d8e650b5561 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:33:17 -0500 Subject: [PATCH 18/28] BUG: Declare gen_packs and gen_packs_halo return types as int external/RSL_LITE implements these as int, so they need to be declared with int returns, not void. --- tools/protos.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/protos.h b/tools/protos.h index eae5afab18..85f72691da 100644 --- a/tools/protos.h +++ b/tools/protos.h @@ -154,11 +154,11 @@ int hash(char *); int gen_nest_interp ( char * dirname ); int gen_nest_interp1 ( FILE *, node_t *, char *, int, int ); #if ( WRFPLUS == 1 ) -void gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, int nta /* 0=NLM,1=TLM,2=ADM */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); +int gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, int nta /* 0=NLM,1=TLM,2=ADM */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); #else -void gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); +int gen_packs_halo ( FILE *fp , node_t *p, char *shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname, int always_interp_mp /* 1 for ARW, varies for NMM */ ); #endif -void gen_packs ( FILE *fp , node_t *p, int shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname ); +int gen_packs ( FILE *fp , node_t *p, int shw, int xy /* 0=y,1=x */ , int pu /* 0=pack,1=unpack */, char * packname, char * commname ); int gen_periods ( char * dirname , node_t * periods ); int gen_swaps ( char * dirname , node_t * swaps ); int gen_cycles ( char * dirname , node_t * cycles ); From 8bdb29dfa7614557994d45e0db48dc87208a23dc Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:52:01 -0500 Subject: [PATCH 19/28] STY: Replace more integer literals with named constants. Not quite all of them yet, but there's only one other, that one without an existing named constant. EDIT: There's about seventy left: I'll have to go through those again. --- tools/gen_config.c | 2 +- tools/gen_defs.c | 2 +- tools/gen_irr_diag.c | 4 ++-- tools/gen_scalar_indices.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/gen_config.c b/tools/gen_config.c index 399961a364..477d3b9bc7 100644 --- a/tools/gen_config.c +++ b/tools/gen_config.c @@ -15,7 +15,7 @@ int gen_namelist_defines ( char * dirname , int sw_dimension ) { FILE * fp ; - char fname[NAMELEN + 4] ; + char fname[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; char fn[NAMELEN] ; node_t *p ; diff --git a/tools/gen_defs.c b/tools/gen_defs.c index 0668d80702..5010f263e3 100644 --- a/tools/gen_defs.c +++ b/tools/gen_defs.c @@ -90,7 +90,7 @@ int gen_i1_decls ( char * dn ) { FILE * fp ; - char fname[NAMELEN+6], post[NAMELEN+6] ; + char fname[NAMELEN+EXTRA_FOR_DEST_BUFFER], post[NAMELEN+EXTRA_FOR_DEST_BUFFER] ; char * fn = "i1_decl.inc" ; char * dimspec ; node_t * p ; diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 9eeb7f26cc..7d0cd29203 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -209,8 +209,8 @@ int irr_diag_scalar_indices( char *dirname ) short int i, j; int first, flush, s1; char fname[256]; - char line[TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER + 1]; - char piece[135]; + char line[TABLE_ENTRY + 2 * EXTRA_FOR_DEST_BUFFER]; + char piece[TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER]; char *blank = " "; FILE *fp_inc; diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index fe88f58afd..1587ec72b3 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -187,11 +187,11 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) fprintf(fp," P_%s = %s_index_table( PARAM_%s , idomain )\n",c,assoc_4d,c) ; fprintf(fp," END IF\n") ; { - char fourd_bnd[NAMELEN_LONG + 4] = { '\0' } ; + char fourd_bnd[NAMELEN_LONG + EXTRA_FOR_DEST_BUFFER] = { '\0' } ; /* check for the existence of a fourd boundary array associated with this 4D array */ /* set io_mask accordingly for gen_wrf_io to know that it should generate i/o for _b and _bt */ /* arrays */ - snprintf(fourd_bnd, NAMELEN_LONG + 3, "%s_b",assoc_4d) ; + snprintf(fourd_bnd, NAMELEN_LONG + EXTRA_FOR_DEST_BUFFER, "%s_b",assoc_4d) ; if ( get_entry_r( fourd_bnd, NULL, Domain.fields) != NULL ) { x->boundary = 1 ; } From d51f4ca2f84bf53e655d26afc3aed4aa08977af3 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 25 Jan 2024 17:00:01 -0500 Subject: [PATCH 20/28] STY: Use TABLE_ENTRY for the max length of the KPP names I think there's a way to pass this as a parameter to snprintf instead, but I don't remember what that is at the moment. --- tools/gen_irr_diag.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 7d0cd29203..1d5e523615 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -271,9 +271,9 @@ int irr_diag_scalar_indices( char *dirname ) sprintf( line," chm_opts_ndx(:nchm_opts) = (/ "); for( i = 0; i < nChmOpts; i++ ) { if( i == 0 ) - snprintf( piece,135,"%.128s_kpp",chm_scheme[i]); + snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER,"%." #TABLE_ENTRY "s_kpp",chm_scheme[i]); else - snprintf( piece,135," ,%.128s_kpp",chm_scheme[i]); + snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER," ,%." #TABLE_ENTRY "s_kpp",chm_scheme[i]); strcat( line,piece ); } strcat( line," /)\n" ); From c116e169ed3dc165349fbfcf3ce2de11654fee20 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 25 Jan 2024 21:16:08 -0500 Subject: [PATCH 21/28] STY: Pass number of characters in KPP name as printf argument I looked up how to do this. Apparently you just stick a star for the width and put the variable with the width before the variable you want to have that width. --- tools/gen_irr_diag.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 1d5e523615..0e808834bd 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -271,9 +271,9 @@ int irr_diag_scalar_indices( char *dirname ) sprintf( line," chm_opts_ndx(:nchm_opts) = (/ "); for( i = 0; i < nChmOpts; i++ ) { if( i == 0 ) - snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER,"%." #TABLE_ENTRY "s_kpp",chm_scheme[i]); + snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER,"%.*s_kpp", TABLE_ENTRY, chm_scheme[i]); else - snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER," ,%." #TABLE_ENTRY "s_kpp",chm_scheme[i]); + snprintf( piece,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER," ,%.*s_kpp", TABLE_ENTRY, chm_scheme[i]); strcat( line,piece ); } strcat( line," /)\n" ); From 4ba1aab2dd75bb5d62f78e04593398e3cd175a7c Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 8 Feb 2024 12:47:37 -0500 Subject: [PATCH 22/28] STY: Two more file-path variables using NAMELEN. grep -E -e '\[[[:digit:]]{2,}\]' *.[CcHhFf]* --- tools/gen_irr_diag.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 0e808834bd..f75012196f 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -42,8 +42,8 @@ int AppendReg( char *chem_opt, int ndx ) char *strt, *end; char *token; char *wstrg1; - char path[256 * 2 + 25]; - char fname[256]; + char path[2 * (NAMELEN + EXTRA_FOR_DEST_BUFFER)]; + char fname[NAMELEN]; char inln[1024],winln[1024],s[1024]; char rxtstr[TABLE_ENTRY]; char rxtstr_tbl[1000][TABLE_ENTRY]; From 764c90dee4e50534ff5569f477ea55837b4d28a6 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 8 Feb 2024 13:32:33 -0500 Subject: [PATCH 23/28] STY: combine fprintf calls, replace sprintf with strcpy. Lots of unused variables, but I should be able to leave those for a bit. Unused parameters would be a pain, so I'm leaving those. --- tools/gen_irr_diag.c | 15 ++++++++------- tools/gen_scalar_indices.c | 2 +- tools/reg_parse.c | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index f75012196f..dcb5b738e0 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -10,6 +10,8 @@ #define TABLE_ENTRY 128 #define EXTRA_FOR_DEST_BUFFER 32 +#define NAMELEN 256 + short int nChmOpts = 0; char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; char chm_scheme[5][TABLE_ENTRY] = { '\0' }; @@ -42,7 +44,7 @@ int AppendReg( char *chem_opt, int ndx ) char *strt, *end; char *token; char *wstrg1; - char path[2 * (NAMELEN + EXTRA_FOR_DEST_BUFFER)]; + char path[NAMELEN * 2 + EXTRA_FOR_DEST_BUFFER]; char fname[NAMELEN]; char inln[1024],winln[1024],s[1024]; char rxtstr[TABLE_ENTRY]; @@ -259,12 +261,12 @@ int irr_diag_scalar_indices( char *dirname ) strcat( line,piece ); } strcat( line," /)\n" ); - fprintf( fp_inc,line ); - fprintf( fp_inc," \n"); + fprintf( fp_inc,"%s \n", line); for( i = 0; i < nChmOpts; i++ ) { - sprintf( line," chm_opts_name(%d) = '%s'\n",i+1,chm_scheme[i]); - fprintf( fp_inc,line ); + /* I don't see the point of saving this in line when line get + overwritten immediately afterwards */ + fprintf(fp_inc, " chm_opts_name(%d) = '%s'\n",i+1,chm_scheme[i]); } fprintf( fp_inc," \n"); @@ -277,8 +279,7 @@ int irr_diag_scalar_indices( char *dirname ) strcat( line,piece ); } strcat( line," /)\n" ); - fprintf( fp_inc,line ); - fprintf( fp_inc," \n"); + fprintf( fp_inc,"%s \n", line); for( i = 0; i < nChmOpts && rxt_cnt[i] > 0; i++ ) { for( j = 0; j < rxt_cnt[i]; j++ ) { diff --git a/tools/gen_scalar_indices.c b/tools/gen_scalar_indices.c index 1587ec72b3..4a563f59d5 100644 --- a/tools/gen_scalar_indices.c +++ b/tools/gen_scalar_indices.c @@ -191,7 +191,7 @@ gen_scalar_indices1 ( FILE * fp, FILE ** fp2 ) /* check for the existence of a fourd boundary array associated with this 4D array */ /* set io_mask accordingly for gen_wrf_io to know that it should generate i/o for _b and _bt */ /* arrays */ - snprintf(fourd_bnd, NAMELEN_LONG + EXTRA_FOR_DEST_BUFFER, "%s_b",assoc_4d) ; + sprintf(fourd_bnd, "%s_b",assoc_4d) ; if ( get_entry_r( fourd_bnd, NULL, Domain.fields) != NULL ) { x->boundary = 1 ; } diff --git a/tools/reg_parse.c b/tools/reg_parse.c index dc9fc07702..b40e7cfb13 100644 --- a/tools/reg_parse.c +++ b/tools/reg_parse.c @@ -284,7 +284,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile ) if ( !strcmp( tokens[F_USE] , tracers[i] ) ) found = 1 ; } if ( found == 0 ) { - snprintf(tracers[ntracers], 100, tokens[F_USE]) ; + strncpy(tracers[ntracers], tokens[F_USE], 100); ntracers++ ; /* add entries for _b and _bt arrays */ From 894373e0a46515aca3cbd4897088edef4367ce99 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Mon, 19 Feb 2024 15:20:38 -0500 Subject: [PATCH 24/28] STY: Keep nChmOpts an int I wanted to make it a short to save space in the strings based on this, but given the push to optimize for clarity that's less relevant. --- tools/gen_irr_diag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index dcb5b738e0..3655bfd5eb 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -12,7 +12,7 @@ #define NAMELEN 256 -short int nChmOpts = 0; +int nChmOpts = 0; char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; char chm_scheme[5][TABLE_ENTRY] = { '\0' }; short int rxt_cnt[5] = {0, 0}; From 77fbd16d5375754bcf600b551cf9bed26b7bb620 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 29 Feb 2024 08:29:32 -0500 Subject: [PATCH 25/28] STY: Ensure line has enough space for all table entries. --- tools/gen_irr_diag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index dcb5b738e0..282216c897 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -211,7 +211,7 @@ int irr_diag_scalar_indices( char *dirname ) short int i, j; int first, flush, s1; char fname[256]; - char line[TABLE_ENTRY + 2 * EXTRA_FOR_DEST_BUFFER]; + char line[5 * TABLE_ENTRY + 2 * EXTRA_FOR_DEST_BUFFER]; char piece[TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER]; char *blank = " "; FILE *fp_inc; From 6dc8eb0818b53ecbf071f5e24563de5f6373fcd0 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Thu, 29 Feb 2024 08:32:30 -0500 Subject: [PATCH 26/28] STY: Revert narrowing of nChmOpts. I made nChmOpts a short int to keep buffer size down. Given the change to named constants, this is likely irrelevant. On the other hand, it may currently max out at five. --- tools/gen_irr_diag.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 282216c897..4ccc024940 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -12,7 +12,7 @@ #define NAMELEN 256 -short int nChmOpts = 0; +int nChmOpts = 0; char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; char chm_scheme[5][TABLE_ENTRY] = { '\0' }; short int rxt_cnt[5] = {0, 0}; From d9e8cae15b48e727a0be9b4873d201c01adb54b5 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 18 Apr 2025 12:13:10 -0400 Subject: [PATCH 27/28] STY: Enlarge buffers for path vars. --- inc/streams.h | 10 +++++----- tools/gen_config.c | 2 +- tools/gen_irr_diag.c | 2 +- tools/misc.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/inc/streams.h b/inc/streams.h index 07e2b019e4..384e76019e 100644 --- a/inc/streams.h +++ b/inc/streams.h @@ -1,10 +1,10 @@ #ifndef MAX_HISTORY # define MAX_HISTORY ((unsigned char) 12) -# if (MAX_HISTORY > 120) -# warning If changing MAX_HISTORY to be above 120, check uses, loop variables, -# warning and destination string buffers to ensure the types used are wide -# warning enough. Enabling compiler warnings for format strings should help. -# endif +/* # if (MAX_HISTORY > 120) */ +/* # warning If changing MAX_HISTORY to be above 120, check uses, loop variables, */ +/* # warning and destination string buffers to ensure the types used are wide */ +/* # warning enough. Enabling compiler warnings for format strings should help. */ +/* # endif */ #endif #ifndef IWORDSIZE # define IWORDSIZE 4 diff --git a/tools/gen_config.c b/tools/gen_config.c index da343ff578..003dbd60e2 100644 --- a/tools/gen_config.c +++ b/tools/gen_config.c @@ -14,7 +14,7 @@ int gen_namelist_defines ( char * dirname , int sw_dimension ) { FILE * fp ; - char fname[NAMELEN] ; + char fname[2*NAMELEN+2] ; char fn[NAMELEN] ; node_t *p ; diff --git a/tools/gen_irr_diag.c b/tools/gen_irr_diag.c index 50332809ea..5afa669798 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -177,7 +177,7 @@ int AppendReg( char *chem_opt, int ndx ) for( i=0; i < slen; i++ ) { if( ! strncmp( rxtsym+i, "+", 1 ) ) - strncpy( rxtsym+i, "_", 1 ); + strncpy( rxtsym+i, "_", 2 ); } strcat( rxtsym,"_IRR" ); // diff --git a/tools/misc.c b/tools/misc.c index c7977396e1..0a34252b58 100644 --- a/tools/misc.c +++ b/tools/misc.c @@ -43,7 +43,7 @@ char * dimension_with_ones( char * pre , char * tmp , node_t * p , char * post ) { unsigned int i ; - char r[NAMELEN],s[NAMELEN],four_d[NAMELEN] ; + char r[NAMELEN+12],s[NAMELEN],four_d[NAMELEN+5] ; char *pp ; if ( p == NULL ) return("") ; if ( p->ndims <= 0 && ! p->boundary_array ) return("") ; From cb492e01973e38f33045ed6577ead7e022d221c7 Mon Sep 17 00:00:00 2001 From: DWesl <22566757+DWesl@users.noreply.github.com> Date: Fri, 18 Apr 2025 13:36:26 -0400 Subject: [PATCH 28/28] BUG: Remove duplicate Cygwin configuration --- arch/configure.defaults | 60 ----------------------------------------- 1 file changed, 60 deletions(-) diff --git a/arch/configure.defaults b/arch/configure.defaults index a963facd6e..99860b4120 100644 --- a/arch/configure.defaults +++ b/arch/configure.defaults @@ -2169,66 +2169,6 @@ RLFLAGS = CC_TOOLS = $(SCC) NETCDFPAR_BUILD = CONFIGURE_NETCDFPAR_BUILD -########################################################### -#ARCH CYGWIN_NT i686 x86_64 Cygwin, gfortran compiler with gcc #serial smpar dmpar dm+sm -# -DESCRIPTION = GNU ($SFC/$SCC) -DMPARALLEL = # 1 -OMPCPP = # -D_OPENMP -OMP = # -fopenmp -OMPCC = # -fopenmp -SFC = gfortran -SCC = gcc -CCOMP = gcc -DM_FC = mpif90 -DM_CC = mpicc -FC = CONFIGURE_FC -CC = CONFIGURE_CC -LD = $(FC) -RWORDSIZE = CONFIGURE_RWORDSIZE -PROMOTION = #-fdefault-real-8 -ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR CONFIGURE_D_CTSM -CFLAGS_LOCAL = -w -O3 -c # -LDFLAGS_LOCAL = -CPLUSPLUSLIB = -ESMF_LDFLAG = $(CPLUSPLUSLIB) -FCOPTIM = -O2 -ftree-vectorize -funroll-loops -FCREDUCEDOPT = $(FCOPTIM) -FCNOOPT = -O0 -FCDEBUG = # -g $(FCNOOPT) # -ggdb -fbacktrace -FORMAT_FIXED = -ffixed-form -FORMAT_FREE = -ffree-form -ffree-line-length-none -FCSUFFIX = -FCCOMPAT = -BYTESWAPIO = -fconvert=big-endian -frecord-marker=4 -FCBASEOPTS_NO_G = -w $(FORMAT_FREE) $(BYTESWAPIO) $(FCCOMPAT) -FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) -MODULE_SRCH_FLAG = -TRADFLAG = -traditional -CPP = /lib/cpp -P -AR = ar -ARFLAGS = ru -M4 = m4 -G -RANLIB = ranlib -RLFLAGS = -CC_TOOLS = $(SCC) -NETCDFPAR_BUILD = CONFIGURE_NETCDFPAR_BUILD - -LIB_EXTERNAL = \ - $(WRF_SRC_ROOT_DIR)/external/io_netcdf/libwrfio_nf.a CONFIGURE_NETCDF_PATH/lib/libnetcdf.dll.a \ - -L CONFIGURE_NETCDF_PATH -lnetcdff -lnetcdf -lnetcdf -ltirpc -lhdf5_hl -lhdf5 -lm -lz \ - CONFIGURE_GRIB2_LIB -ESMF_IO_LIB = $(WRF_SRC_ROOT_DIR)/external/esmf_time_f90/libesmf_time.a -LIB_BUNDLED = \ - $(WRF_SRC_ROOT_DIR)/external/fftpack/fftpack5/libfftpack.a \ - $(WRF_SRC_ROOT_DIR)/external/io_grib1/libio_grib1.a \ - $(WRF_SRC_ROOT_DIR)/external/io_grib_share/libio_grib_share.a \ - $(WRF_SRC_ROOT_DIR)/external/io_int/libwrfio_int.a \ - $(ESMF_IO_LIB) \ - CONFIGURE_COMMS_LIB \ - $(WRF_SRC_ROOT_DIR)/frame/module_internal_header_util.o \ - $(WRF_SRC_ROOT_DIR)/frame/pack_utils.o - ########################################################### #ARCH Linux armv7l aarch64, gnu OpenMPI #serial smpar dmpar dm+sm #