C coding question

Bill Moran wmoran at collaborativefusion.com
Wed May 17 11:41:40 PDT 2006


On Wed, 17 May 2006 12:36:40 -0600
Lorin Lund <wbs at infowest.com> wrote:

> Andy Greenwood wrote:
> 
> > I am helping someone work on porting some code to Freebsd, and the
> > code below works on Linux, but not on FreeBSD (compiles, but gives
> > Segmentation Fault: 11). I'm not sure where the problem is, and any
> > pointers would be much appreciated.
> >
> >        /* Check if we must stop */
> >        if(tf_stat_file != NULL)
> >        {
> >            tf_stat = fopen(tf_stat_file, "r");
> >            if (tf_stat != NULL)
> >            {
> >                /* Get state */
> >                stat_state=fgetc(tf_stat);
> >
> >                /* Torrentflux asked to shutdown the torrent */
> >                if (stat_state == '0')
> >                {
> >                    mustDie = 1;
> >                }
> >            }
> >            fclose(tf_stat);
> >        }
> > _______________________________________________ 
> 
> I think I would move the
>     fclose( tf_stat)
> up a line.  No need to close a file that failed to open.  The fclose( ) 
> acting on
> a NULL pointer might be your error.

>From man fclose:
  The fclose() function does not handle NULL arguments; they will result in
  a segmentation violation.  This is intentional - it makes it easier to
  make sure programs written under FreeBSD are bug free.  This behaviour is
  an implementation detail, and programs should not rely upon it.

Good catch.

-- 
Bill Moran
Collaborative Fusion Inc.


More information about the freebsd-questions mailing list