From d176adc1826cea4703f038e68fc41ff51e632f11 Mon Sep 17 00:00:00 2001 From: yvxiang Date: Mon, 10 Oct 2016 14:21:07 +0800 Subject: [PATCH 1/3] Support seek file in write --- src/sdk/file_impl.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sdk/file_impl.cc b/src/sdk/file_impl.cc index cce4736d..15450de9 100644 --- a/src/sdk/file_impl.cc +++ b/src/sdk/file_impl.cc @@ -269,7 +269,10 @@ int32_t FileImpl::Pread(char* buf, int32_t read_len, int64_t offset, bool reada) int64_t FileImpl::Seek(int64_t offset, int32_t whence) { //printf("Seek[%s:%d:%ld]\n", _name.c_str(), whence, offset); - if (open_flags_ != O_RDONLY) { + if (open_flags_ == O_WRONLY) { + if (offset == 0 && whence == SEEK_CUR) { + return common::atomic_add64(&write_offset_, 0); + } return BAD_PARAMETER; } MutexLock lock(&read_offset_mu_); From f8d3139f3758c5d2a8f7dcf82a0eb62b199cf089 Mon Sep 17 00:00:00 2001 From: yvxiang Date: Mon, 10 Oct 2016 14:30:44 +0800 Subject: [PATCH 2/3] Add comment & fix --- src/sdk/bfs.h | 2 +- src/sdk/file_impl.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/bfs.h b/src/sdk/bfs.h index 5558d192..61952410 100644 --- a/src/sdk/bfs.h +++ b/src/sdk/bfs.h @@ -54,7 +54,7 @@ class File { File() {} virtual ~File() {} virtual int32_t Pread(char* buf, int32_t read_size, int64_t offset, bool reada = false) = 0; - virtual int64_t Seek(int64_t offset, int32_t whence) = 0; + virtual int64_t Seek(int64_t offset, int32_t whence) = 0; //for file opend with O_WRONLY, only support Seek(0, SEEK_CUR) virtual int32_t Read(char* buf, int32_t read_size) = 0; virtual int32_t Write(const char* buf, int32_t write_size) = 0; virtual int32_t Flush() = 0; diff --git a/src/sdk/file_impl.cc b/src/sdk/file_impl.cc index 15450de9..47f53659 100644 --- a/src/sdk/file_impl.cc +++ b/src/sdk/file_impl.cc @@ -269,7 +269,7 @@ int32_t FileImpl::Pread(char* buf, int32_t read_len, int64_t offset, bool reada) int64_t FileImpl::Seek(int64_t offset, int32_t whence) { //printf("Seek[%s:%d:%ld]\n", _name.c_str(), whence, offset); - if (open_flags_ == O_WRONLY) { + if (open_flags_ != O_RDONLY) { if (offset == 0 && whence == SEEK_CUR) { return common::atomic_add64(&write_offset_, 0); } From 047bb9c284794a07ea7386c5a840f3f90f83b77f Mon Sep 17 00:00:00 2001 From: yvxiang Date: Mon, 10 Oct 2016 14:53:22 +0800 Subject: [PATCH 3/3] Fix comment --- src/sdk/bfs.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sdk/bfs.h b/src/sdk/bfs.h index 61952410..9f9f977c 100644 --- a/src/sdk/bfs.h +++ b/src/sdk/bfs.h @@ -54,7 +54,8 @@ class File { File() {} virtual ~File() {} virtual int32_t Pread(char* buf, int32_t read_size, int64_t offset, bool reada = false) = 0; - virtual int64_t Seek(int64_t offset, int32_t whence) = 0; //for file opend with O_WRONLY, only support Seek(0, SEEK_CUR) + //for files opened with O_WRONLY, only support Seek(0, SEEK_CUR) + virtual int64_t Seek(int64_t offset, int32_t whence) = 0; virtual int32_t Read(char* buf, int32_t read_size) = 0; virtual int32_t Write(const char* buf, int32_t write_size) = 0; virtual int32_t Flush() = 0;