#include "db_config.h"
#ifndef lint
static const char revid[] = "$Id: os_errno.c,v 1.2 2004/03/30 01:23:48 jtownsen Exp $";
#endif
#include "db_int.h"
int
__os_get_errno()
{
return (errno);
}
void
__os_set_errno(evalue)
int evalue;
{
errno = evalue;
}
int
__os_win32_errno(void)
{
DWORD last_error;
int ret;
last_error = GetLastError();
switch (last_error) {
case ERROR_FILE_NOT_FOUND:
case ERROR_INVALID_DRIVE:
case ERROR_PATH_NOT_FOUND:
ret = ENOENT;
break;
case ERROR_NO_MORE_FILES:
case ERROR_TOO_MANY_OPEN_FILES:
ret = EMFILE;
break;
case ERROR_ACCESS_DENIED:
ret = EPERM;
break;
case ERROR_INVALID_HANDLE:
ret = EBADF;
break;
case ERROR_NOT_ENOUGH_MEMORY:
ret = ENOMEM;
break;
case ERROR_DISK_FULL:
ret = ENOSPC;
break;
case ERROR_ARENA_TRASHED:
case ERROR_BAD_COMMAND:
case ERROR_BAD_ENVIRONMENT:
case ERROR_BAD_FORMAT:
case ERROR_GEN_FAILURE:
case ERROR_INVALID_ACCESS:
case ERROR_INVALID_BLOCK:
case ERROR_INVALID_DATA:
case ERROR_READ_FAULT:
case ERROR_WRITE_FAULT:
ret = EFAULT;
break;
case ERROR_FILE_EXISTS:
case ERROR_ALREADY_EXISTS:
ret = EEXIST;
break;
case ERROR_NOT_SAME_DEVICE:
ret = EXDEV;
break;
case ERROR_WRITE_PROTECT:
ret = EACCES;
break;
case ERROR_NOT_READY:
ret = EBUSY;
break;
case ERROR_LOCK_VIOLATION:
case ERROR_SHARING_VIOLATION:
ret = EBUSY;
break;
case ERROR_RETRY:
ret = EINTR;
break;
case 0:
ret = EFAULT;
break;
default:
ret = EIO;
break;
}
return (ret);
}