2 * msvcrt.dll errno functions
4 * Copyright 2000 Jon Griffiths
10 DEFAULT_DEBUG_CHANNEL(msvcrt);
13 /* INTERNAL: Set the crt and dos errno's from the OS error given. */
14 void MSVCRT__set_errno(int err)
16 int *errno = GET_THREAD_VAR_PTR(errno);
17 int *doserrno = GET_THREAD_VAR_PTR(doserrno);
23 #define ERR_CASE(oserr) case oserr:
24 #define ERR_MAPS(oserr,crterr) case oserr:*errno = crterr;break;
25 ERR_CASE(ERROR_ACCESS_DENIED)
26 ERR_CASE(ERROR_NETWORK_ACCESS_DENIED)
27 ERR_CASE(ERROR_CANNOT_MAKE)
28 ERR_CASE(ERROR_SEEK_ON_DEVICE)
29 ERR_CASE(ERROR_LOCK_FAILED)
30 ERR_CASE(ERROR_FAIL_I24)
31 ERR_CASE(ERROR_CURRENT_DIRECTORY)
32 ERR_CASE(ERROR_DRIVE_LOCKED)
33 ERR_CASE(ERROR_NOT_LOCKED)
34 ERR_CASE(ERROR_INVALID_ACCESS)
35 ERR_MAPS(ERROR_LOCK_VIOLATION, MSVCRT_EACCES);
36 ERR_CASE(ERROR_FILE_NOT_FOUND)
37 ERR_CASE(ERROR_NO_MORE_FILES)
38 ERR_CASE(ERROR_BAD_PATHNAME)
39 ERR_CASE(ERROR_BAD_NETPATH)
40 ERR_CASE(ERROR_INVALID_DRIVE)
41 ERR_CASE(ERROR_BAD_NET_NAME)
42 ERR_CASE(ERROR_FILENAME_EXCED_RANGE)
43 ERR_MAPS(ERROR_PATH_NOT_FOUND, MSVCRT_ENOENT);
44 ERR_MAPS(ERROR_IO_DEVICE, MSVCRT_EIO);
45 ERR_MAPS(ERROR_BAD_FORMAT, MSVCRT_ENOEXEC);
46 ERR_MAPS(ERROR_INVALID_HANDLE, MSVCRT_EBADF);
47 ERR_CASE(ERROR_OUTOFMEMORY)
48 ERR_CASE(ERROR_INVALID_BLOCK)
49 ERR_CASE(ERROR_NOT_ENOUGH_QUOTA);
50 ERR_MAPS(ERROR_ARENA_TRASHED, MSVCRT_ENOMEM);
51 ERR_MAPS(ERROR_BUSY, MSVCRT_EBUSY);
52 ERR_CASE(ERROR_ALREADY_EXISTS)
53 ERR_MAPS(ERROR_FILE_EXISTS, MSVCRT_EEXIST);
54 ERR_MAPS(ERROR_BAD_DEVICE, MSVCRT_ENODEV);
55 ERR_MAPS(ERROR_TOO_MANY_OPEN_FILES, MSVCRT_EMFILE);
56 ERR_MAPS(ERROR_DISK_FULL, MSVCRT_ENOSPC);
57 ERR_MAPS(ERROR_BROKEN_PIPE, MSVCRT_EPIPE);
58 ERR_MAPS(ERROR_POSSIBLE_DEADLOCK, MSVCRT_EDEADLK);
59 ERR_MAPS(ERROR_DIR_NOT_EMPTY, MSVCRT_ENOTEMPTY);
60 ERR_MAPS(ERROR_BAD_ENVIRONMENT, MSVCRT_E2BIG);
61 ERR_CASE(ERROR_WAIT_NO_CHILDREN)
62 ERR_MAPS(ERROR_CHILD_NOT_COMPLETE, MSVCRT_ECHILD);
63 ERR_CASE(ERROR_NO_PROC_SLOTS)
64 ERR_CASE(ERROR_MAX_THRDS_REACHED)
65 ERR_MAPS(ERROR_NESTING_NOT_ALLOWED, MSVCRT_EAGAIN);
67 /* Remaining cases map to EINVAL */
68 /* FIXME: may be missing some errors above */
69 *errno = MSVCRT_EINVAL;
73 /*********************************************************************
76 int *__cdecl MSVCRT__errno(void)
78 return GET_THREAD_VAR_PTR(errno);
81 /*********************************************************************
82 * __doserrno (MSVCRT.@)
84 int *__cdecl MSVCRT___doserrno(void)
86 return GET_THREAD_VAR_PTR(doserrno);
91 /*********************************************************************
94 char * __cdecl MSVCRT_strerror (int err)
96 return strerror(err); /* FIXME */
99 /**********************************************************************
100 * _strerror (MSVCRT.@)
102 extern int sprintf(char *str, const char *format, ...);
104 const char *__cdecl MSVCRT__strerror (const char *err)
106 static char strerrbuff[256]; /* FIXME: Per thread, nprintf */
107 sprintf(strerrbuff,"%s: %s\n",err,MSVCRT_strerror(GET_THREAD_VAR(errno)));
111 int __cdecl MSVCRT__cprintf( const char * format, ... );
113 /*********************************************************************
116 void __cdecl MSVCRT_perror (const char *str)
118 MSVCRT__cprintf("%s: %s\n",str,MSVCRT_strerror(GET_THREAD_VAR(errno)));