]> granicus.if.org Git - postgresql/blob - src/port/win32error.c
8.4 pgindent run, with new combined Linux/FreeBSD/MinGW typedef list
[postgresql] / src / port / win32error.c
1 /*-------------------------------------------------------------------------
2  *
3  * win32error.c
4  *        Map win32 error codes to errno values
5  *
6  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
7  *
8  * IDENTIFICATION
9  *        $PostgreSQL: pgsql/src/port/win32error.c,v 1.6 2009/01/01 17:24:04 momjian Exp $
10  *
11  *-------------------------------------------------------------------------
12  */
13
14 #include "postgres.h"
15
16 static const struct
17 {
18         DWORD           winerr;
19         int                     doserr;
20 }       doserrors[] =
21
22 {
23         {
24                 ERROR_INVALID_FUNCTION, EINVAL
25         },
26         {
27                 ERROR_FILE_NOT_FOUND, ENOENT
28         },
29         {
30                 ERROR_PATH_NOT_FOUND, ENOENT
31         },
32         {
33                 ERROR_TOO_MANY_OPEN_FILES, EMFILE
34         },
35         {
36                 ERROR_ACCESS_DENIED, EACCES
37         },
38         {
39                 ERROR_INVALID_HANDLE, EBADF
40         },
41         {
42                 ERROR_ARENA_TRASHED, ENOMEM
43         },
44         {
45                 ERROR_NOT_ENOUGH_MEMORY, ENOMEM
46         },
47         {
48                 ERROR_INVALID_BLOCK, ENOMEM
49         },
50         {
51                 ERROR_BAD_ENVIRONMENT, E2BIG
52         },
53         {
54                 ERROR_BAD_FORMAT, ENOEXEC
55         },
56         {
57                 ERROR_INVALID_ACCESS, EINVAL
58         },
59         {
60                 ERROR_INVALID_DATA, EINVAL
61         },
62         {
63                 ERROR_INVALID_DRIVE, ENOENT
64         },
65         {
66                 ERROR_CURRENT_DIRECTORY, EACCES
67         },
68         {
69                 ERROR_NOT_SAME_DEVICE, EXDEV
70         },
71         {
72                 ERROR_NO_MORE_FILES, ENOENT
73         },
74         {
75                 ERROR_LOCK_VIOLATION, EACCES
76         },
77         {
78                 ERROR_SHARING_VIOLATION, EACCES
79         },
80         {
81                 ERROR_BAD_NETPATH, ENOENT
82         },
83         {
84                 ERROR_NETWORK_ACCESS_DENIED, EACCES
85         },
86         {
87                 ERROR_BAD_NET_NAME, ENOENT
88         },
89         {
90                 ERROR_FILE_EXISTS, EEXIST
91         },
92         {
93                 ERROR_CANNOT_MAKE, EACCES
94         },
95         {
96                 ERROR_FAIL_I24, EACCES
97         },
98         {
99                 ERROR_INVALID_PARAMETER, EINVAL
100         },
101         {
102                 ERROR_NO_PROC_SLOTS, EAGAIN
103         },
104         {
105                 ERROR_DRIVE_LOCKED, EACCES
106         },
107         {
108                 ERROR_BROKEN_PIPE, EPIPE
109         },
110         {
111                 ERROR_DISK_FULL, ENOSPC
112         },
113         {
114                 ERROR_INVALID_TARGET_HANDLE, EBADF
115         },
116         {
117                 ERROR_INVALID_HANDLE, EINVAL
118         },
119         {
120                 ERROR_WAIT_NO_CHILDREN, ECHILD
121         },
122         {
123                 ERROR_CHILD_NOT_COMPLETE, ECHILD
124         },
125         {
126                 ERROR_DIRECT_ACCESS_HANDLE, EBADF
127         },
128         {
129                 ERROR_NEGATIVE_SEEK, EINVAL
130         },
131         {
132                 ERROR_SEEK_ON_DEVICE, EACCES
133         },
134         {
135                 ERROR_DIR_NOT_EMPTY, ENOTEMPTY
136         },
137         {
138                 ERROR_NOT_LOCKED, EACCES
139         },
140         {
141                 ERROR_BAD_PATHNAME, ENOENT
142         },
143         {
144                 ERROR_MAX_THRDS_REACHED, EAGAIN
145         },
146         {
147                 ERROR_LOCK_FAILED, EACCES
148         },
149         {
150                 ERROR_ALREADY_EXISTS, EEXIST
151         },
152         {
153                 ERROR_FILENAME_EXCED_RANGE, ENOENT
154         },
155         {
156                 ERROR_NESTING_NOT_ALLOWED, EAGAIN
157         },
158         {
159                 ERROR_NOT_ENOUGH_QUOTA, ENOMEM
160         }
161 };
162
163 void
164 _dosmaperr(unsigned long e)
165 {
166         int                     i;
167
168         if (e == 0)
169         {
170                 errno = 0;
171                 return;
172         }
173
174         for (i = 0; i < lengthof(doserrors); i++)
175         {
176                 if (doserrors[i].winerr == e)
177                 {
178                         errno = doserrors[i].doserr;
179 #ifndef FRONTEND
180                         ereport(DEBUG5,
181                                         (errmsg_internal("mapped win32 error code %lu to %d",
182                                                                          e, errno)));
183 #elif FRONTEND_DEBUG
184                         fprintf(stderr, _("mapped win32 error code %lu to %d"), e, errno);
185 #endif
186                         return;
187                 }
188         }
189
190 #ifndef FRONTEND
191         ereport(LOG,
192                         (errmsg_internal("unrecognized win32 error code: %lu",
193                                                          e)));
194 #else
195         fprintf(stderr, _("unrecognized win32 error code: %lu"), e);
196 #endif
197
198         errno = EINVAL;
199         return;
200 }