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);
146 FileBuf::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)
234 std::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_INVALID_HANDLE
virtual int buffer_to_device(const char *c, int n)
Writes the buffer to the "device".
handle_type get() const
Return handle of resource, retaining ownership.
virtual int buffer_from_device(char *c, int n)
Fill the buffer from the "device".
int cppModeToPOSIXMode(std::ios_base::openmode cppMode)
Converts C++ iostream open mode to POSIX io open mode.
handle_type release()
Relinquish ownership of resource and return its handle.
std::ios_base::openmode posixModeToCppMode(int posixMode)
Converts POSIX io open mode flags to C++ iostream open mode.
PURPOSE: The AutoResource class template is an analog of std::auto_ptr for managing arbitrary resourc...
FileBuf * open(FILE *fp)
If isOpen() == true, returns 0, otherwise initializes the FileBuf to use fp.
FileBuf * close()
If isOpen() == false, returns a null pointer.
The purpose of the File class is to provide an abstraction layer over the platform dependant function...
The purpose of this class is to provide an alternative implementation of std::filebuf that is based o...
#define BLOCXX_THROW_ERRNO_MSG(exType, msg)
Throw an exception using FILE, LINE, errno and strerror(errno)
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...