blob: 7ecb2137ffadfc682fc7829ee08a457d97f8b96c [file] [log] [blame] [raw]
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <wchar.h>
#if 1
char *strerror_r(int, char *, size_t);
#endif
static void perror_internal(FILE *fp, const char *s, int number) {
char buf[1024];
const char *colon;
const char *errstring;
if(!s || !*s) s = colon = "";
else colon = ": ";
errstring = strerror_r(number, buf, sizeof buf);
fprintf(fp, "%s%s%s\n", s, colon, errstring);
}
/* Print a line on stderr consisting of the text in S, a colon, a space,
a message describing the meaning of the contents of `errno' and a newline.
If S is NULL or "", the colon and space are omitted. */
void perror(const char *s) {
int e = errno;
//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)
|| (fd = fileno (stderr)) == -1
|| (fd = __dup (fd)) == -1
|| (fp = fdopen (fd, "w+")) == NULL)
{
if (__builtin_expect (fd != -1, 0))
__close (fd);
*/
/* Use standard error as is. */
perror_internal(stderr, s, e);
/*
}
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);
//}
}