Check the pos parameter before calling into kernel.
This does prevent the unwanted side effect of reading or writing at the current file pointer position when the functions are called with a -1 position. It's save to do this check in user space, because calling the _kern_* function with -1 pos has the same effect as calling the normal read/write posix functions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21701 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
f14a8c5801
commit
85b3a71e69
|
@ -30,7 +30,12 @@ readv(int fd, const struct iovec *vecs, size_t count)
|
|||
ssize_t
|
||||
readv_pos(int fd, off_t pos, const struct iovec *vecs, size_t count)
|
||||
{
|
||||
ssize_t bytes = _kern_readv(fd, pos, vecs, count);
|
||||
ssize_t bytes;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
bytes = _kern_readv(fd, pos, vecs, count);
|
||||
|
||||
RETURN_AND_SET_ERRNO(bytes);
|
||||
}
|
||||
|
@ -48,7 +53,12 @@ writev(int fd, const struct iovec *vecs, size_t count)
|
|||
ssize_t
|
||||
writev_pos(int fd, off_t pos, const struct iovec *vecs, size_t count)
|
||||
{
|
||||
ssize_t bytes = _kern_writev(fd, pos, vecs, count);
|
||||
ssize_t bytes;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
bytes = _kern_writev(fd, pos, vecs, count);
|
||||
|
||||
RETURN_AND_SET_ERRNO(bytes);
|
||||
}
|
||||
|
|
|
@ -34,7 +34,12 @@ read(int fd, void *buffer, size_t bufferSize)
|
|||
ssize_t
|
||||
read_pos(int fd, off_t pos, void *buffer, size_t bufferSize)
|
||||
{
|
||||
ssize_t status = _kern_read(fd, pos, buffer, bufferSize);
|
||||
ssize_t status;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
status = _kern_read(fd, pos, buffer, bufferSize);
|
||||
|
||||
RETURN_AND_SET_ERRNO(status);
|
||||
}
|
||||
|
@ -43,7 +48,12 @@ read_pos(int fd, off_t pos, void *buffer, size_t bufferSize)
|
|||
ssize_t
|
||||
pread(int fd, void *buffer, size_t bufferSize, off_t pos)
|
||||
{
|
||||
ssize_t status = _kern_read(fd, pos, buffer, bufferSize);
|
||||
ssize_t status;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
status = _kern_read(fd, pos, buffer, bufferSize);
|
||||
|
||||
RETURN_AND_SET_ERRNO(status);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,12 @@ write(int fd, void const *buffer, size_t bufferSize)
|
|||
ssize_t
|
||||
write_pos(int fd, off_t pos, const void *buffer, size_t bufferSize)
|
||||
{
|
||||
int status = _kern_write(fd, pos, buffer, bufferSize);
|
||||
ssize_t status;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
status = _kern_write(fd, pos, buffer, bufferSize);
|
||||
|
||||
RETURN_AND_SET_ERRNO(status);
|
||||
}
|
||||
|
@ -41,7 +46,12 @@ write_pos(int fd, off_t pos, const void *buffer, size_t bufferSize)
|
|||
ssize_t
|
||||
pwrite(int fd, const void *buffer, size_t bufferSize, off_t pos)
|
||||
{
|
||||
int status = _kern_write(fd, pos, buffer, bufferSize);
|
||||
ssize_t status;
|
||||
if (pos < 0) {
|
||||
errno = B_BAD_VALUE;
|
||||
return -1;
|
||||
}
|
||||
status = _kern_write(fd, pos, buffer, bufferSize);
|
||||
|
||||
RETURN_AND_SET_ERRNO(status);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue