vector<XFile> files;
- FILE* fin = fdopen(fd.get_fd(), "r");
+ FILE* fin = fd.fdopen("r");
if (!fin)
SN_THROW(IOErrorException("reading pipe failed, fdopen failed: " + stringerror(errno)));
return marshaller;
}
+ FILE*
+ FileDescriptor::fdopen(const char* mode)
+ {
+ FILE* ret = ::fdopen(_fd, mode);
+ if (ret)
+ _fd = -1;
+ return ret;
+ }
Pipe::Pipe()
{
int get_fd() const { return _fd; }
void set_fd(int fd) { _fd = fd; }
+ FILE* fdopen(const char* mode);
+
private:
int _fd = -1;
void
FilesTransferTask::run()
{
- FILE* fout = fdopen(get_write_end().get_fd(), "w");
+ FILE* fout = get_write_end().fdopen("w");
if (!fout)
SN_THROW(StreamException());