38#include "blocxx/BLOCXX_config.h"
42#ifdef BLOCXX_HAVE_UNISTD_H
96#pragma message(Reminder "TODO: implement it for Win!")
101 d = _open_osfhandle(
reinterpret_cast<long>(fd.
get()), flags);
104 int flags = ::fcntl(d, F_GETFL);
129 int flags = ::fcntl(f.???, F_GETFL);
146FileBuf::open(
const char* path, std::ios_base::openmode mode, mode_t permissions)
194 size_t written = ::fwrite(c, 1, n,
m_file);
195 if (written ==
static_cast<size_t>(n))
212 size_t numRead = ::fread(c, 1, n,
m_file);
213 if (numRead !=
static_cast<size_t>(n))
219 else if (feof(
m_file) && numRead == 0)
234std::ios_base::openmode
237 std::ios_base::openmode mode = posixMode & O_APPEND ? std::ios::app : std::ios_base::openmode(0);
242 switch (posixMode & O_ACCMODE)
244 case O_RDONLY: mode |= (std::ios::in | std::ios::binary);
break;
245 case O_WRONLY: mode |= (std::ios::out | std::ios::binary);
break;
246 case O_RDWR: mode |= (std::ios::in | std::ios::out | std::ios::binary);
break;
255 if (cppMode & std::ios::app)
260 if (cppMode & std::ios::trunc)
265 if (cppMode & (std::ios::in | std::ios::out))
269 else if (cppMode & std::ios::in)
273 else if (cppMode & std::ios::out)
283 cppMode = cppMode &
~std::ios::ate;
287 if( cppMode == ios::app ||
288 cppMode == (ios::in|ios::app) ||
289 cppMode == (ios::out|ios::app) )
294 else if( cppMode == (ios::binary|ios::app) ||
295 cppMode == (ios::in|ios::binary|ios::app) ||
296 cppMode == (ios::out|ios::binary|ios::app) )
301 else if (cppMode == ios::in)
306 else if (cppMode == (ios::in|ios::binary))
311 else if (cppMode == (ios::out|ios::in))
316 else if (cppMode == (ios::out|ios::in|ios::app))
321 else if (cppMode == (ios::out|ios::in|ios::binary))
326 else if (cppMode == (ios::out|ios::in|ios::binary|ios::app))
331 else if( (cppMode == ios::out) ||
332 cppMode == (ios::trunc) ||
333 cppMode == (ios::trunc|ios::app) ||
334 cppMode == (ios::trunc|ios::out) ||
335 cppMode == (ios::trunc|ios::out|ios::app) )
340 else if( (cppMode == (ios::trunc|ios::binary)) ||
341 (cppMode == (ios::trunc|ios::binary|ios::app)) ||
342 (cppMode == (ios::out|ios::binary)) ||
343 (cppMode == (ios::trunc|ios::out|ios::binary)) ||
344 (cppMode == (ios::trunc|ios::out|ios::binary|ios::app) ))
349 else if( (cppMode == (ios::trunc|ios::out|ios::in)) ||
350 (cppMode == (ios::trunc|ios::out|ios::in|ios::app)) )
355 else if( (cppMode == (ios::trunc|ios::out|ios::in|ios::binary)) ||
356 (cppMode == (ios::trunc|ios::out|ios::in|ios::binary|ios::app)) )
#define BLOCXX_THROW_ERRNO_MSG(exType, msg)
Throw an exception using FILE, LINE, errno and strerror(errno)
#define BLOCXX_INVALID_HANDLE
PURPOSE: The AutoResource class template is an analog of std::auto_ptr for managing arbitrary resourc...
handle_type get() const
Return handle of resource, retaining ownership.
handle_type release()
Relinquish ownership of resource and return its handle.
The purpose of this class is to provide an alternative implementation of std::filebuf that is based o...
const char * cppModeToCMode(std::ios_base::openmode cppMode)
Converts C++ iostream open mode to C stdio file open mode or the empty string on error (never returns...
std::ios_base::openmode posixModeToCppMode(int posixMode)
Converts POSIX io open mode flags to C++ iostream open mode.
int cppModeToPOSIXMode(std::ios_base::openmode cppMode)
Converts C++ iostream open mode to POSIX io open mode.
virtual int buffer_from_device(char *c, int n)
Fill the buffer from the "device".
virtual int buffer_to_device(const char *c, int n)
Writes the buffer to the "device".
FileBuf * close()
If isOpen() == false, returns a null pointer.
FileBuf * open(FILE *fp)
If isOpen() == true, returns 0, otherwise initializes the FileBuf to use fp.
The purpose of the File class is to provide an abstraction layer over the platform dependant function...