Implement read()
This commit is contained in:
parent
74faa94805
commit
67309eccad
|
@ -102,7 +102,7 @@ int pause(void);
|
||||||
int pipe(int [2]);
|
int pipe(int [2]);
|
||||||
ssize_t pread(int, void *, size_t, off_t);
|
ssize_t pread(int, void *, size_t, off_t);
|
||||||
ssize_t pwrite(int, const void *, size_t, off_t);
|
ssize_t pwrite(int, const void *, size_t, off_t);
|
||||||
ssize_t read(int, void *, size_t);
|
ssize_t read(int fd, void *buffer, size_t size);
|
||||||
ssize_t readlink(const char *__restrict, char *__restrict, size_t);
|
ssize_t readlink(const char *__restrict, char *__restrict, size_t);
|
||||||
ssize_t readlinkat(int, const char *__restrict, char *__restrict, size_t);
|
ssize_t readlinkat(int, const char *__restrict, char *__restrict, size_t);
|
||||||
int rmdir(const char *);
|
int rmdir(const char *);
|
||||||
|
|
|
@ -185,10 +185,7 @@ ssize_t pwrite(int, const void *, size_t, off_t) {
|
||||||
__ensure(!"Not implemented");
|
__ensure(!"Not implemented");
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
}
|
}
|
||||||
ssize_t read(int, void *, size_t) {
|
// read is provided by the platform
|
||||||
__ensure(!"Not implemented");
|
|
||||||
__builtin_unreachable();
|
|
||||||
}
|
|
||||||
ssize_t readlink(const char *__restrict, char *__restrict, size_t) {
|
ssize_t readlink(const char *__restrict, char *__restrict, size_t) {
|
||||||
__ensure(!"Not implemented");
|
__ensure(!"Not implemented");
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
|
|
|
@ -62,6 +62,39 @@ int open(const char *path, int flags, ...) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t read(int fd, void *buffer, size_t size){
|
||||||
|
managarm::posix::ClientRequest<MemoryAllocator> request(*memoryAllocator);
|
||||||
|
request.set_request_type(managarm::posix::ClientRequestType::READ);
|
||||||
|
request.set_fd(fd);
|
||||||
|
request.set_size(size);
|
||||||
|
|
||||||
|
int64_t request_num = allocPosixRequest();
|
||||||
|
frigg::String<MemoryAllocator> serialized(*memoryAllocator);
|
||||||
|
request.SerializeToString(&serialized);
|
||||||
|
posixPipe->sendStringReq(serialized.data(), serialized.size(),
|
||||||
|
request_num, 0);
|
||||||
|
|
||||||
|
uint8_t msg_buffer[128];
|
||||||
|
size_t length;
|
||||||
|
HelError response_error;
|
||||||
|
posixPipe->recvStringRespSync(msg_buffer, 128, *eventHub,
|
||||||
|
request_num, 0, response_error, length);
|
||||||
|
HEL_CHECK(response_error);
|
||||||
|
|
||||||
|
managarm::posix::ServerResponse<MemoryAllocator> response(*memoryAllocator);
|
||||||
|
response.ParseFromArray(msg_buffer, length);
|
||||||
|
if(response.error() == managarm::posix::Errors::NO_SUCH_FD) {
|
||||||
|
errno = EBADF;
|
||||||
|
return -1;
|
||||||
|
}else if(response.error() == managarm::posix::Errors::SUCCESS) {
|
||||||
|
memcpy(buffer, response.buffer().data(), response.buffer().size());
|
||||||
|
return response.buffer().size();
|
||||||
|
}else{
|
||||||
|
__ensure(!"Unexpected error in write()!");
|
||||||
|
__builtin_unreachable();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
ssize_t write(int fd, const void *buffer, size_t size) {
|
ssize_t write(int fd, const void *buffer, size_t size) {
|
||||||
managarm::posix::ClientRequest<MemoryAllocator> request(*memoryAllocator);
|
managarm::posix::ClientRequest<MemoryAllocator> request(*memoryAllocator);
|
||||||
request.set_request_type(managarm::posix::ClientRequestType::WRITE);
|
request.set_request_type(managarm::posix::ClientRequestType::WRITE);
|
||||||
|
@ -78,7 +111,8 @@ ssize_t write(int fd, const void *buffer, size_t size) {
|
||||||
uint8_t msg_buffer[128];
|
uint8_t msg_buffer[128];
|
||||||
size_t length;
|
size_t length;
|
||||||
HelError response_error;
|
HelError response_error;
|
||||||
posixPipe->recvStringRespSync(msg_buffer, 128, *eventHub, request_num, 0, response_error, length);
|
posixPipe->recvStringRespSync(msg_buffer, 128, *eventHub,
|
||||||
|
request_num, 0, response_error, length);
|
||||||
HEL_CHECK(response_error);
|
HEL_CHECK(response_error);
|
||||||
|
|
||||||
managarm::posix::ServerResponse<MemoryAllocator> response(*memoryAllocator);
|
managarm::posix::ServerResponse<MemoryAllocator> response(*memoryAllocator);
|
||||||
|
|
Loading…
Reference in a new issue