提交 b39b47ba 编写于 作者: R Rich Felker

set errno when fileno is called on a FILE with no underlying fd

this is a POSIX requirement.

also remove the gratuitous locking shenanigans and simply access f->fd
under control of the lock. there is no advantage to not doing so, and
it made the correctness non-obvious at best.
上级 baf95a5a
#include "stdio_impl.h" #include "stdio_impl.h"
#include <errno.h>
int fileno(FILE *f) int fileno(FILE *f)
{ {
/* f->fd never changes, but the lock must be obtained and released
* anyway since this function cannot return while another thread
* holds the lock. */
FLOCK(f); FLOCK(f);
int fd = f->fd;
FUNLOCK(f); FUNLOCK(f);
return f->fd; if (fd < 0) {
errno = EBADF;
return -1;
}
return fd;
} }
weak_alias(fileno, fileno_unlocked); weak_alias(fileno, fileno_unlocked);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册