GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
oct-errno.in.cc
Go to the documentation of this file.
1// %NO_EDIT_WARNING%
2
3////////////////////////////////////////////////////////////////////////
4//
5// Copyright (C) 2005-2022 The Octave Project Developers
6//
7// See the file COPYRIGHT.md in the top-level directory of this
8// distribution or <https://octave.org/copyright/>.
9//
10// This file is part of Octave.
11//
12// Octave is free software: you can redistribute it and/or modify it
13// under the terms of the GNU General Public License as published by
14// the Free Software Foundation, either version 3 of the License, or
15// (at your option) any later version.
16//
17// Octave is distributed in the hope that it will be useful, but
18// WITHOUT ANY WARRANTY; without even the implied warranty of
19// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20// GNU General Public License for more details.
21//
22// You should have received a copy of the GNU General Public License
23// along with Octave; see the file COPYING. If not, see
24// <https://www.gnu.org/licenses/>.
25//
26////////////////////////////////////////////////////////////////////////
27
28#if defined (HAVE_CONFIG_H)
29# include "config.h"
30#endif
31
32#include <cerrno>
33
34#include "singleton-cleanup.h"
35
36#include "oct-errno.h"
37#include "oct-map.h"
38#include "error.h"
39
41
43{
44 struct errno_struct
45 {
46 const char *name;
47 int value;
48 };
49
50 static errno_struct errno_codes[] =
51 {
52 // POSIX.
53
54#if defined (E2BIG)
55 { "E2BIG", E2BIG },
56#endif
57#if defined (EACCES)
58 { "EACCES", EACCES },
59#endif
60#if defined (EADDRINUSE)
61 { "EADDRINUSE", EADDRINUSE },
62#endif
63#if defined (EADDRNOTAVAIL)
64 { "EADDRNOTAVAIL", EADDRNOTAVAIL },
65#endif
66#if defined (EAFNOSUPPORT)
67 { "EAFNOSUPPORT", EAFNOSUPPORT },
68#endif
69#if defined (EAGAIN)
70 { "EAGAIN", EAGAIN },
71#endif
72#if defined (EALREADY)
73 { "EALREADY", EALREADY },
74#endif
75#if defined (EBADF)
76 { "EBADF", EBADF },
77#endif
78#if defined (EBUSY)
79 { "EBUSY", EBUSY },
80#endif
81#if defined (ECHILD)
82 { "ECHILD", ECHILD },
83#endif
84#if defined (ECONNABORTED)
85 { "ECONNABORTED", ECONNABORTED },
86#endif
87#if defined (ECONNREFUSED)
88 { "ECONNREFUSED", ECONNREFUSED },
89#endif
90#if defined (ECONNRESET)
91 { "ECONNRESET", ECONNRESET },
92#endif
93#if defined (EDEADLK)
94 { "EDEADLK", EDEADLK },
95#endif
96#if defined (EDESTADDRREQ)
97 { "EDESTADDRREQ", EDESTADDRREQ },
98#endif
99#if defined (EDOM)
100 { "EDOM", EDOM },
101#endif
102#if defined (EDQUOT)
103 { "EDQUOT", EDQUOT },
104#endif
105#if defined (EEXIST)
106 { "EEXIST", EEXIST },
107#endif
108#if defined (EFAULT)
109 { "EFAULT", EFAULT },
110#endif
111#if defined (EFBIG)
112 { "EFBIG", EFBIG },
113#endif
114#if defined (EHOSTDOWN)
115 { "EHOSTDOWN", EHOSTDOWN },
116#endif
117#if defined (EHOSTUNREACH)
118 { "EHOSTUNREACH", EHOSTUNREACH },
119#endif
120#if defined (EINPROGRESS)
121 { "EINPROGRESS", EINPROGRESS },
122#endif
123#if defined (EINTR)
124 { "EINTR", EINTR },
125#endif
126#if defined (EINVAL)
127 { "EINVAL", EINVAL },
128#endif
129#if defined (EIO)
130 { "EIO", EIO },
131#endif
132#if defined (EISCONN)
133 { "EISCONN", EISCONN },
134#endif
135#if defined (EISDIR)
136 { "EISDIR", EISDIR },
137#endif
138#if defined (ELOOP)
139 { "ELOOP", ELOOP },
140#endif
141#if defined (EMFILE)
142 { "EMFILE", EMFILE },
143#endif
144#if defined (EMLINK)
145 { "EMLINK", EMLINK },
146#endif
147#if defined (EMSGSIZE)
148 { "EMSGSIZE", EMSGSIZE },
149#endif
150#if defined (ENAMETOOLONG)
151 { "ENAMETOOLONG", ENAMETOOLONG },
152#endif
153#if defined (ENETDOWN)
154 { "ENETDOWN", ENETDOWN },
155#endif
156#if defined (ENETRESET)
157 { "ENETRESET", ENETRESET },
158#endif
159#if defined (ENETUNREACH)
160 { "ENETUNREACH", ENETUNREACH },
161#endif
162#if defined (ENFILE)
163 { "ENFILE", ENFILE },
164#endif
165#if defined (ENOBUFS)
166 { "ENOBUFS", ENOBUFS },
167#endif
168#if defined (ENODEV)
169 { "ENODEV", ENODEV },
170#endif
171#if defined (ENOENT)
172 { "ENOENT", ENOENT },
173#endif
174#if defined (ENOEXEC)
175 { "ENOEXEC", ENOEXEC },
176#endif
177#if defined (ENOLCK)
178 { "ENOLCK", ENOLCK },
179#endif
180#if defined (ENOMEM)
181 { "ENOMEM", ENOMEM },
182#endif
183#if defined (ENOPROTOOPT)
184 { "ENOPROTOOPT", ENOPROTOOPT },
185#endif
186#if defined (ENOSPC)
187 { "ENOSPC", ENOSPC },
188#endif
189#if defined (ENOSYS)
190 { "ENOSYS", ENOSYS },
191#endif
192#if defined (ENOTBLK)
193 { "ENOTBLK", ENOTBLK },
194#endif
195#if defined (ENOTCONN)
196 { "ENOTCONN", ENOTCONN },
197#endif
198#if defined (ENOTDIR)
199 { "ENOTDIR", ENOTDIR },
200#endif
201#if defined (ENOTEMPTY)
202 { "ENOTEMPTY", ENOTEMPTY },
203#endif
204#if defined (ENOTSOCK)
205 { "ENOTSOCK", ENOTSOCK },
206#endif
207#if defined (ENOTTY)
208 { "ENOTTY", ENOTTY },
209#endif
210#if defined (ENXIO)
211 { "ENXIO", ENXIO },
212#endif
213#if defined (EOPNOTSUPP)
214 { "EOPNOTSUPP", EOPNOTSUPP },
215#endif
216#if defined (EPERM)
217 { "EPERM", EPERM },
218#endif
219#if defined (EPFNOSUPPORT)
220 { "EPFNOSUPPORT", EPFNOSUPPORT },
221#endif
222#if defined (EPIPE)
223 { "EPIPE", EPIPE },
224#endif
225#if defined (EPROTONOSUPPORT)
226 { "EPROTONOSUPPORT", EPROTONOSUPPORT },
227#endif
228#if defined (EPROTOTYPE)
229 { "EPROTOTYPE", EPROTOTYPE },
230#endif
231#if defined (ERANGE)
232 { "ERANGE", ERANGE },
233#endif
234#if defined (EREMOTE)
235 { "EREMOTE", EREMOTE },
236#endif
237#if defined (ERESTART)
238 { "ERESTART", ERESTART },
239#endif
240#if defined (EROFS)
241 { "EROFS", EROFS },
242#endif
243#if defined (ESHUTDOWN)
244 { "ESHUTDOWN", ESHUTDOWN },
245#endif
246#if defined (ESOCKTNOSUPPORT)
247 { "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT },
248#endif
249#if defined (ESPIPE)
250 { "ESPIPE", ESPIPE },
251#endif
252#if defined (ESRCH)
253 { "ESRCH", ESRCH },
254#endif
255#if defined (ESTALE)
256 { "ESTALE", ESTALE },
257#endif
258#if defined (ETIMEDOUT)
259 { "ETIMEDOUT", ETIMEDOUT },
260#endif
261#if defined (ETOOMANYREFS)
262 { "ETOOMANYREFS", ETOOMANYREFS },
263#endif
264#if defined (ETXTBSY)
265 { "ETXTBSY", ETXTBSY },
266#endif
267#if defined (EUSERS)
268 { "EUSERS", EUSERS },
269#endif
270#if defined (EWOULDBLOCK)
271 { "EWOULDBLOCK", EWOULDBLOCK },
272#endif
273#if defined (EXDEV)
274 { "EXDEV", EXDEV },
275#endif
276
277 // Others (duplicates are OK).
278
279@SYSDEP_ERRNO_LIST@
280
281 { nullptr, 0 },
282 };
283
284 // Stuff them all in a map for fast access.
285
286 errno_struct *ptr = errno_codes;
287
288 while (ptr->name)
289 {
290 m_errno_tbl[ptr->name] = ptr->value;
291 ptr++;
292 }
293}
294
295bool
297{
298 bool retval = true;
299
300 if (! s_instance)
301 {
302 s_instance = new octave_errno ();
304 }
305
306 return retval;
307}
308
309int
310octave_errno::lookup (const std::string& name)
311{
312 return (instance_ok ()) ? s_instance->do_lookup (name) : -1;
313}
314
317{
318 return (instance_ok ()) ? s_instance->do_list () : octave_scalar_map ();
319}
320
321int
322octave_errno::do_lookup (const std::string& name)
323{
324 return (m_errno_tbl.find (name) != m_errno_tbl.end ()) ? m_errno_tbl[name] : -1;
325}
326
329{
330 octave_scalar_map retval;
331
332 for (const auto& p : m_errno_tbl)
333 {
334 retval.assign (p.first, p.second);
335 }
336
337 return retval;
338}
octave_errno(void)
Definition: oct-errno.in.cc:42
int do_lookup(const std::string &name)
std::map< std::string, int > m_errno_tbl
Definition: oct-errno.h:74
octave_scalar_map do_list(void)
static int lookup(const std::string &name)
static void cleanup_instance(void)
Definition: oct-errno.h:50
static octave_errno * s_instance
Definition: oct-errno.h:76
static bool instance_ok(void)
static octave_scalar_map list(void)
void assign(const std::string &k, const octave_value &val)
Definition: oct-map.h:238
static void add(fptr f)
QString name