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>