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 d413feeb71..98acad8d8f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,6 +1,6 @@ .SUFFIXES: .c .o -CC_TOOLS = cc +CC_TOOLS = $(CC) CFLAGS = $(CC_TOOLS_CFLAGS) #-ansi LDFLAGS = DEBUG = -O0 -g @@ -30,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/data.h b/tools/data.h index 081ece8616..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], 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/fseek_test.c b/tools/fseek_test.c index c1bee099b5..7cbe2ecf1b 100644 --- a/tools/fseek_test.c +++ b/tools/fseek_test.c @@ -11,7 +11,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..0e3a0fa927 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 ; - 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 ; + int tag = 0 ; + 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] ; + char dimname[3][NAMELEN + EXTRA_FOR_DEST_BUFFER] ; + 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 + EXTRA_FOR_DEST_BUFFER] ; sym_nodeptr sym_node ; sprintf(dname_symbol, "DNAME_%s", dname_tmp ) ; @@ -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,9 +605,9 @@ 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] ; + 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 ea995d4230..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], y[NAMELEN] ; + char x[NAMELEN + EXTRA_FOR_DEST_BUFFER], y[NAMELEN] ; char indices[NAMELEN] ; int lenarg ; int only4d = 0 ; diff --git a/tools/gen_config.c b/tools/gen_config.c index c07be2e919..477d3b9bc7 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 + EXTRA_FOR_DEST_BUFFER] ; 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..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], post[NAMELEN] ; + char fname[NAMELEN+EXTRA_FOR_DEST_BUFFER], post[NAMELEN+EXTRA_FOR_DEST_BUFFER] ; char * fn = "i1_decl.inc" ; char * dimspec ; node_t * p ; @@ -139,8 +139,8 @@ 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 fname[NAMELEN], post[NAMELEN + 2 * EXTRA_FOR_DEST_BUFFER] ; + char * dimspec = ""; int bdyonly = 0 ; if ( node == NULL ) return(1) ; diff --git a/tools/gen_interp.c b/tools/gen_interp.c index e2a49ae914..f905a11512 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 + EXTRA_FOR_DEST_BUFFER] ; /*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,15 +168,15 @@ 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 + 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] ; char dexes[NAMELEN] ; 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; @@ -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 + EXTRA_FOR_DEST_BUFFER], *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 + EXTRA_FOR_DEST_BUFFER, "%s_b,%s_bt,", pp->name, pp->name ) ; } else { - sprintf( tmpstr , "%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,12 +507,12 @@ 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 + 5 * EXTRA_FOR_DEST_BUFFER], vname2[3 * NAMELEN + 5 * EXTRA_FOR_DEST_BUFFER] ; char tag[NAMELEN], tag2[NAMELEN] ; 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]; @@ -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") || - !strcmp ( ddim[1][1], "kde") || - !strcmp ( 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 048ab53af2..4ccc024940 100644 --- a/tools/gen_irr_diag.c +++ b/tools/gen_irr_diag.c @@ -7,10 +7,15 @@ #include #include +#define TABLE_ENTRY 128 +#define EXTRA_FOR_DEST_BUFFER 32 + +#define NAMELEN 256 + int nChmOpts = 0; -char rxt_tbl[5][1000][128]; -char chm_scheme[5][128]; -int rxt_cnt[5]; +char rxt_tbl[5][1000][TABLE_ENTRY] = { '\0' }; +char chm_scheme[5][TABLE_ENTRY] = { '\0' }; +short int rxt_cnt[5] = {0, 0}; void strip_blanks( char *instring, char *outstring ) { @@ -39,13 +44,13 @@ int AppendReg( char *chem_opt, int ndx ) char *strt, *end; char *token; char *wstrg1; - char path[256]; - char fname[256]; + char path[NAMELEN * 2 + EXTRA_FOR_DEST_BUFFER]; + char fname[NAMELEN]; 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 ); @@ -72,6 +77,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 +182,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 +208,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[5 * TABLE_ENTRY + 2 * EXTRA_FOR_DEST_BUFFER]; + char piece[TABLE_ENTRY + EXTRA_FOR_DEST_BUFFER]; char *blank = " "; FILE *fp_inc; @@ -255,30 +261,29 @@ int irr_diag_scalar_indices( char *dirname ) strcat( line,piece ); } strcat( line," /)\n" ); - fprintf( fp_inc,"%s",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,"%s",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"); 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,TABLE_ENTRY+EXTRA_FOR_DEST_BUFFER,"%.*s_kpp", TABLE_ENTRY, chm_scheme[i]); else - sprintf( piece," ,%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" ); - fprintf( fp_inc,"%s",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++ ) { - sprintf( line," 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 a24d75ee3c..4a563f59d5 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 + EXTRA_FOR_DEST_BUFFER] ; 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 { + snprintf(fname5, NAMELEN + 1, "%." stringify_const(NAMELEN) "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 + EXTRA_FOR_DEST_BUFFER], tmp2[NAMELEN + EXTRA_FOR_DEST_BUFFER] ; 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 + 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 */ - sprintf(fourd_bnd,"%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/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 d228f6c962..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], 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] ; + char dimname[3][NAMELEN + EXTRA_FOR_DEST_BUFFER] ; 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 + 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 ) /* 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..79d2f7c736 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 + 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("") ; @@ -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 + 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 ; 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 + 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 ; if ( p == NULL ) return("") ; diff --git a/tools/protos.h b/tools/protos.h index 3d39c2dfa7..85f72691da 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,6 +151,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 d7cf361dbf..b40e7cfb13 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 ; @@ -117,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 { @@ -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],"%s",tokens[F_USE]) ; + strncpy(tracers[ntracers], tokens[F_USE], 100); 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..45a8bb14ec 100644 --- a/tools/registry.c +++ b/tools/registry.c @@ -1,16 +1,17 @@ #include #include -#ifdef _WIN32 +#if defined(_WIN32) || defined(__CYGWIN__) # include +#endif +#ifdef _WIN32 # define rindex(X,Y) strrchr(X,Y) # define index(X,Y) strchr(X,Y) -#else +#endif # include # include # include # include # include -#endif #define DEFINE_GLOBALS #include "protos.h" @@ -23,13 +24,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 + EXTRA_FOR_DEST_BUFFER)] = {'\0'}; + char fname_wrk[NAMELEN + EXTRA_FOR_DEST_BUFFER] = {'\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 +39,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 +162,8 @@ 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 */ + 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); @@ -282,10 +285,10 @@ main( int argc, char *argv[], char *env[] ) sprintf(command,"del /F /Q %s\n",fname_tmp ); #else if( do_irr_diag ) { - 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 ) ; } diff --git a/tools/registry.h b/tools/registry.h index 0a2e627ffd..983aaff8a4 100644 --- a/tools/registry.h +++ b/tools/registry.h @@ -1,6 +1,12 @@ #ifndef REGISTRY_H +#include +#include +#include + #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 */ 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.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) ;