diff options
Diffstat (limited to 'gr-blocks/lib/file_sink_base.cc')
-rw-r--r-- | gr-blocks/lib/file_sink_base.cc | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gr-blocks/lib/file_sink_base.cc b/gr-blocks/lib/file_sink_base.cc index 42e2eae528..81bc94f351 100644 --- a/gr-blocks/lib/file_sink_base.cc +++ b/gr-blocks/lib/file_sink_base.cc @@ -53,8 +53,8 @@ namespace gr { namespace blocks { - file_sink_base::file_sink_base(const char *filename, bool is_binary) - : d_fp(0), d_new_fp(0), d_updated(false), d_is_binary(is_binary) + file_sink_base::file_sink_base(const char *filename, bool is_binary, bool append) + : d_fp(0), d_new_fp(0), d_updated(false), d_is_binary(is_binary), d_append(append) { if (!open(filename)) throw std::runtime_error ("can't open file"); @@ -76,9 +76,13 @@ namespace gr { // we use the open system call to get access to the O_LARGEFILE flag. int fd; - if((fd = ::open(filename, - O_WRONLY|O_CREAT|O_TRUNC|OUR_O_LARGEFILE|OUR_O_BINARY, - 0664)) < 0){ + int flags; + if(d_append) { + flags = O_WRONLY|O_CREAT|O_APPEND|OUR_O_LARGEFILE|OUR_O_BINARY; + } else { + flags = O_WRONLY|O_CREAT|O_TRUNC|OUR_O_LARGEFILE|OUR_O_BINARY; + } + if((fd = ::open(filename, flags, 0664)) < 0){ perror(filename); return false; } |