|| fileno_unlocked (stderr) == -1 || (fd = __dup (fileno_unlocked (stderr))) == -1
|| (fd = fileno (stderr)) == -1 || (fd = __dup (fd)) == -1
perror (const char *s){  int errnum = errno;#ifdef USE_IN_LIBIO  FILE *fp;  int fd = -1;  /* The standard says that 'perror' must not change the orientation     of the stream.  What is supposed to happen when the stream isn't     oriented yet?  In this case we'll create a new stream which is     using the same underlying file descriptor.  */  if (__builtin_expect (_IO_fwide (stderr, 0) != 0, 1)      || fileno_unlocked (stderr) == -1      || (fd = __dup (fileno_unlocked (stderr))) == -1      || (fp = fdopen (fd, "w+")) == NULL)    {      if (__builtin_expect (fd != -1, 0))	__close (fd);      /* Use standard error as is.  */      perror_internal (stderr, s, errnum);    }  else    {      /* We don't have to do any special hacks regarding the file	 position.  Since the stderr stream wasn't used so far we just	 write to the descriptor.  */      perror_internal (fp, s, errnum);      /* Close the stream.  */      fclose (fp);      ((_IO_FILE *) stderr)->_offset = _IO_pos_BAD;    }#else  perror_internal (stderr, s, errnum);#endif}