38 #include "blocxx/BLOCXX_config.h"
42 #ifdef BLOCXX_HAVE_UNISTD_H
53 namespace BLOCXX_NAMESPACE
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)) )