Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 Mar 2002 18:43:13 -0700 (MST)
From:      "M. Warner Losh" <imp@village.org>
To:        kris@obsecurity.org
Cc:        current@FreeBSD.org, peter@FreeBSD.org
Subject:   Re: stdout changes break some ports
Message-ID:  <20020324.184313.30925676.imp@village.org>
In-Reply-To: <20020324173513.A75429@xor.obsecurity.org>
References:  <20020324173513.A75429@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20020324173513.A75429@xor.obsecurity.org>
            Kris Kennaway <kris@obsecurity.org> writes:
: The changes to the definitions of stdout/stdin/stderr from a while
: back caused a number of ports to break (somewhere around 84, according
: to bento).  For example, the cap port fails like this:
: 
: http://bento.freebsd.org/errorlogs/5-latest/cap-6.0.198.log
: 
: cc -DBYTESWAPPED -DPHASE2 -O -I/mnt/ports/net/cap/work/cap60   -DLWSRV_LPR_LOG -DSTAT_CACHE -DREREAD_AFPVOLS -DUSR_FILE_TYPES -DCREATE_AFPVOL=\"mac\" -DPID_FILE=\"/var/run/aufs.pid\" -DUSEVPRINTF -c ablog.c
: ablog.c:69: initializer element is not constant
: 
: where the offending line is:
: 
: static FILE *lfp = stderr;
: 
: David O'Brien committed a workaround to the clog port yesterday to
: move the initializer to main() instead of trying to do it statically.
: 
: Is this something which is supposed to work?

No.  This isn't something that is guaranteed to work per the
standards, iirc.  The proper fix is to put the initializer in main.

The pain level of going back to something the old style is too high to
even contemplate reverting.

The C standard says:
secont 7.19

               stderr
               stdin
               stdout

       which are expressions of type ``pointer to FILE'' that point
       to the  FILE  objects  associated,  respectively,  with  the
       standard error, input, and output streams.

       213The primary use of the freopen function is to change  the
          file  associated  with  a  standard  text stream (stderr,
          stdin, or stdout),  as  those  identifiers  need  not  be
          modifiable  lvalues  to  which  the value returned by the
          fopen function may be assigned.

       stderr macro, 7.19.1, 7.19.2, 7.19.3

Notice that it doesn't say that stderr is a compile time constant.


Warner

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020324.184313.30925676.imp>