| Line | |
|---|
| 1 | #include "dietstdio.h" |
|---|
| 2 | #include <unistd.h> |
|---|
| 3 | #include <fcntl.h> |
|---|
| 4 | #include <errno.h> |
|---|
| 5 | |
|---|
| 6 | /* this is needed so the libpthread wrapper can initialize the mutex, |
|---|
| 7 | * not to lock it */ |
|---|
| 8 | |
|---|
| 9 | FILE *freopen_unlocked(const char *path, const char *mode, FILE *stream) { |
|---|
| 10 | if (stream) { |
|---|
| 11 | int f=__stdio_parse_mode(mode); |
|---|
| 12 | fflush_unlocked(stream); |
|---|
| 13 | close(stream->fd); |
|---|
| 14 | if ((stream->fd=open(path,f,0666))!=-1) { |
|---|
| 15 | //struct stat st; |
|---|
| 16 | //fstat(stream->fd,&st); |
|---|
| 17 | stream->flags = 0;//=(S_ISFIFO(st.st_mode))?FDPIPE:0; |
|---|
| 18 | switch (f&3) { |
|---|
| 19 | case O_RDWR: stream->flags|=CANWRITE; |
|---|
| 20 | case O_RDONLY: stream->flags|=CANREAD; break; |
|---|
| 21 | case O_WRONLY: stream->flags|=CANWRITE; |
|---|
| 22 | } |
|---|
| 23 | } |
|---|
| 24 | } else errno=EINVAL; |
|---|
| 25 | return stream; |
|---|
| 26 | } |
|---|
| 27 | |
|---|
| 28 | FILE *freopen(const char *path, const char *mode, FILE *stream) __attribute__((weak,alias("freopen_unlocked"))); |
|---|
Note: See
TracBrowser
for help on using the repository browser.