Thank you, I only rarely C. Changing these two lines to have the zero 
initialization    
int in_cnt=0, out_cnt=0;                                  
int    incrmt=0, inc=0, blnk_cnt=0, recout_siz=0, FEOF=0;

returned the program to working. And I know the was some re-arranging of where 
initial memory would be allocated between 11 and 13.

> -----Original Message-----
> From: IBM Mainframe Discussion List [mailto:[email protected]]
> On Behalf Of Sam Siegel
> Sent: Monday, June 23, 2014 12:45 PM
> To: [email protected]
> Subject: Re: C program stopped working with z/OS 1.13 on production rollout
> of z/OS 1.13 :(
> 
> Several variables, including FEOF, are not explicitly initialized to 0.
>  The program appears to set FEOF to 1 only when there is an error opening
> either of the DDs.
> 
> There may be residual data on the stack which is setting FEOF to a non-zero
> value.
> 
> I don't think the C standard requires the compiler or runtime to ensure any
> particular value to non-initialized variables.
> 
> Sam
> 
> 
> On Mon, Jun 23, 2014 at 12:12 PM, Gibney, Dave <[email protected]> wrote:
> 
> > I have a C program, written by someone long gone, last complied in
> > 2004 or so. Running under z/OS 1.13, it reports reading/writing zero
> records.
> > STEPLIB of CEE.SCEERUN from z/OS 1.11 returns it to its previous
> > working behavior.
> > I am opening a PMR next, but thought I would ask here also. Entire
> > program follows
> >
> > /*  This program works like the Unix tf -d command. It removes the */
> > /*  special character (hex 4f) from records, thus leaving a clean, */
> > /*  comma-delimited record in the output file.                     */
> > /*                                                                 */
> > /*  Modified 04/08/2004 by DMD; force abend if write error detected*/
> > /*  Modified 08/23/2004 by DMD; remove carriage return & line feed.*/
> > /*                                                                 */
> > #include <stdio.h>
> > #include <string.h>
> > #define  MAXREC 5000
> > main (){
> >   int  rec_in_cnt;
> >   int  rec_out_cnt;
> >   char rec_in[MAXREC];
> >   char rec_out[MAXREC];
> >   char delimitr[1]={0x00};
> >   char comma   [1]=",";
> >   char NL      [1]={0x15};  /* new-line        */
> >   char CR      [1]={0x0D};  /* carriage return */
> >   char blnks[5000];
> >   FILE * File_Out;
> >   FILE * File_In;
> >   int in_cnt, out_cnt;
> >   int    incrmt, inc, blnk_cnt, recout_siz, FEOF;
> >
> >   for (inc=0;inc<MAXREC;inc++) blnks[inc]=0x40; /* init blank array */
> >
> >   File_In = fopen("dd:stdin","rb,recfm=*,type=record");
> >   if (!File_In){
> >       printf("\n Could not open file STDIN. %d.\n",ferror);
> >       FEOF=1; } /* force exit */
> >
> >   File_Out = fopen("dd:stdout","wb,recfm=*,type=record");
> >   if (!File_Out){
> >       printf("\n Could not open file STDOUT. %d.\n,ferror");
> >       FEOF=1; } /* force exit */
> >
> >   while ( (! feof(File_In)) && (!FEOF) ){
> >     in_cnt = fread(rec_in,sizeof(char),MAXREC,File_In);
> >     for(inc=0;inc<in_cnt;inc++)rec_out[inc]=0x40;  /* clean buff-out */
> >       if (! feof(File_In)) {
> >         rec_in_cnt++;
> >         if ( !ferror(File_In) ){
> >          for (incrmt=0,inc=0,blnk_cnt=0;incrmt<in_cnt;incrmt++) {
> >           if (strncmp(&rec_in[incrmt],delimitr,1)) /* if ! fill char */
> >             if (strncmp(&rec_in[incrmt],blnks,1)){ /* if ! fill blnk */
> >               if(!(strncmp(&rec_in[incrmt],comma,1))) /* if is comma */
> >                  blnk_cnt=0;                       /* drop prev blnks*/
> >               else {
> >                 memcpy(&rec_out[inc],&blnks[1],blnk_cnt); /* do blnk */
> >                 inc+=blnk_cnt; blnk_cnt=0;       /* save & reset cnt */
> >               }  /* end of ELSE condition */
> >               if ( (strncmp(&rec_in[incrmt],NL,1))  /* not newline */
> >               && (strncmp(&rec_in[incrmt],CR,1)) )  /* not car-rtn */
> >               memcpy(&rec_out[inc++],&rec_in[incrmt],1); /* do char  */
> >               else memcpy(&rec_out[inc++],&blnks[1],1);  /* blank it */
> >             }
> >             else blnk_cnt++;                      /* count the blank */
> >          }  /* end of FOR loop     */
> >       recout_siz = fwrite(rec_out,sizeof(char),in_cnt,File_Out);
> >       if (recout_siz < in_cnt) { /* if we didn't write whole record */
> >         printf("Write error encountered."); /* for example B37. */
> >         abort();                            /* force abend.     */
> >         }
> >         rec_out_cnt++;
> >       }    /* end of IF ferror condition */
> >         else printf("\n Error reading input file.\n");
> >     }    /* end of IF feof condition */
> >   }      /* end of WHILE condition */
> >  printf("Record counts for data compression utility GNDU2200.\n\n");
> > printf("Records read %d.\nRecords written
> > %d.",rec_in_cnt,rec_out_cnt);  fclose(File_In);  fclose(File_Out); }
> > /* end of MAIN  */
> >
> > Dave Gibney
> > Information Technology Services
> > Washington State University
> >
> >
> > ----------------------------------------------------------------------
> > For IBM-MAIN subscribe / signoff / archive access instructions, send
> > email to [email protected] with the message: INFO IBM-MAIN
> >
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions, send email to
> [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to