libc: Add fdopen()
This commit is contained in:
parent
52944ba5d8
commit
de6041fede
@ -32,6 +32,9 @@ extern "C"
|
||||
/* Opens the file specified by pathname. Returns the file handle on success, or NULL on error. */
|
||||
FILE* fopen(const char* pathname, const char* mode);
|
||||
|
||||
/* Returns a new file associated with the file descriptor fd. */
|
||||
FILE* fdopen(int fd, const char* mode);
|
||||
|
||||
/* Writes formatted output according to the string format to the file stream. */
|
||||
int fprintf(FILE* stream, const char* format, ...);
|
||||
|
||||
|
@ -40,6 +40,19 @@ extern "C"
|
||||
return stream;
|
||||
}
|
||||
|
||||
FILE* fdopen(int fd, const char*)
|
||||
{
|
||||
if (fd < 0) // FIXME: Also check if the mode string is compatible with how fd was opened.
|
||||
{
|
||||
errno = EBADF;
|
||||
return 0;
|
||||
}
|
||||
FILE* stream = (FILE*)malloc(sizeof(FILE));
|
||||
stream->f_fd = fd;
|
||||
clearerr(stream);
|
||||
return stream;
|
||||
}
|
||||
|
||||
size_t fread(void* buf, size_t size, size_t nmemb, FILE* stream)
|
||||
{
|
||||
ssize_t status = read(stream->f_fd, buf, size * nmemb);
|
||||
|
Loading…
Reference in New Issue
Block a user