linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Martin Costabel <Martin.Costabel@univ-rennes1.fr>
To: Daniel Jacobowitz <drow@false.org>,
	Wolfgang Haeuptli <whaeuptli@bluewin.ch>
Cc: linuxppc-dev@lists.linuxppc.org
Subject: Re: compile-error: stdin is not a constant
Date: Wed, 03 Nov 1999 17:53:59 +0000	[thread overview]
Message-ID: <382076B7.B14665A2@univ-rennes1.fr> (raw)
In-Reply-To: 19991103103617.A26462@drow.res.cmu.edu


Daniel Jacobowitz wrote:
> 
> On Wed, Nov 03, 1999 at 01:25:44PM +0100, Wolfgang Haeuptli wrote:
> >
> > Hello people
> >
> > sorry for the (probably) basic question...
> >
> > Since I installed R5, some programs (that used to compile OK on R4)
> > complain about :
> >
> > initializer element for 'foo' is not constant
> >
> > while compiling constructs like:
> >
> > FILE *foo = stdin;   (or FILE *foo = {(FILE *) stdin};  )
> 
> Because it isn't a constant any more.
> 
> >
> > when I replaced this line with: FILE *foo = STDIN_FILENO;

Maybe this will work (1):

FILE *foo = (FILE *) STDIN_FILENO;

> > ( defined in unistd.h), compilation works, but the resulting program
> > segfaults...
> 
> Which should generate one hell of a warning, since STDIN_FILENO is a
> small number, not a struct FILE *.
> 
> You need to initialize the variable early in main() or something along
> those lines, or you can declare a constructor using __attribute__,
> although I do not remember the syntax (search list archives).

In a similar situation, I learned from Tom Rini that the correct way
would be (2)

static file *file ;
static void file_construct (void) __attribute__((constructor));
static void file_construct (void) { file = stdin; }

This might be in the list archives somewhere. I had a similar problem
with stdout when compiling Scilab. I used Tom's version (2), and it
worked, but I saw that the Scilab people in a later version used the
shorter version (1), and this seems to work, too. 

More precisely, they just added the "|| defined(__GNUC__)" in the
following code:

#if defined(__CYGWIN32__) || defined(__MINGW32__) || defined(__GNUC__)
static FILE *file= (FILE *) 0;
#define FPRINTF(x) ( file != (FILE*) 0) ?  fprintf x  : 0 
#else 
static FILE *file= stdout ;
#define FPRINTF(x) fprintf x  
#endif


--
Martin

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

  reply	other threads:[~1999-11-03 17:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-11-03 12:25 compile-error: stdin is not a constant Wolfgang Haeuptli
1999-11-03 15:36 ` Daniel Jacobowitz
1999-11-03 17:53   ` Martin Costabel [this message]
1999-11-03 16:59     ` Daniel Jacobowitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=382076B7.B14665A2@univ-rennes1.fr \
    --to=martin.costabel@univ-rennes1.fr \
    --cc=costabel@wanadoo.fr \
    --cc=drow@false.org \
    --cc=linuxppc-dev@lists.linuxppc.org \
    --cc=whaeuptli@bluewin.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).