#include <_PDCLIB_glue.h>
#include <windows.h>
+extern const _PDCLIB_fileops_t _PDCLIB_fileops;
+
void _PDCLIB_w32errno(void);
-HANDLE _PDCLIB_open( char const * const filename, unsigned int mode )
+bool _PDCLIB_open( _PDCLIB_fd_t * pFd, const _PDCLIB_fileops_t ** pOps,
+ char const * const filename, unsigned int mode )
{
DWORD desiredAccess;
DWORD creationDisposition;
break;
default: /* Invalid mode */
errno = EINVAL;
- return NULL;
+ return false;
}
HANDLE fd = CreateFileA(filename, desiredAccess,
NULL, creationDisposition, FILE_ATTRIBUTE_NORMAL, NULL);
if(fd == INVALID_HANDLE_VALUE) {
+#if 0
+ DWORD dw = GetLastError();
+ char* msgBuf;
+ FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ dw,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPSTR) &msgBuf,
+ 0, NULL );
+
+ fprintf(stderr, "Error: %s\n", msgBuf);
+#endif
_PDCLIB_w32errno();
- return NULL;
+ return false;
}
if(mode & _PDCLIB_FAPPEND) {
if(!ok) {
_PDCLIB_w32errno();
CloseHandle(fd);
- return NULL;
+ return false;
}
}
- return fd;
+ pFd->pointer = fd;
+ *pOps = &_PDCLIB_fileops;
+ return true;
}
#endif