| #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); |
| //} |
| } |