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