jpayne@69
|
1 #ifndef Py_ERRORS_H
|
jpayne@69
|
2 #define Py_ERRORS_H
|
jpayne@69
|
3 #ifdef __cplusplus
|
jpayne@69
|
4 extern "C" {
|
jpayne@69
|
5 #endif
|
jpayne@69
|
6
|
jpayne@69
|
7 /* Error handling definitions */
|
jpayne@69
|
8
|
jpayne@69
|
9 PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
|
jpayne@69
|
10 PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);
|
jpayne@69
|
11 PyAPI_FUNC(void) PyErr_SetString(
|
jpayne@69
|
12 PyObject *exception,
|
jpayne@69
|
13 const char *string /* decoded from utf-8 */
|
jpayne@69
|
14 );
|
jpayne@69
|
15 PyAPI_FUNC(PyObject *) PyErr_Occurred(void);
|
jpayne@69
|
16 PyAPI_FUNC(void) PyErr_Clear(void);
|
jpayne@69
|
17 PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **);
|
jpayne@69
|
18 PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *);
|
jpayne@69
|
19 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
jpayne@69
|
20 PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **);
|
jpayne@69
|
21 PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
|
jpayne@69
|
22 #endif
|
jpayne@69
|
23
|
jpayne@69
|
24 /* Defined in Python/pylifecycle.c */
|
jpayne@69
|
25 PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message);
|
jpayne@69
|
26
|
jpayne@69
|
27 #if defined(Py_DEBUG) || defined(Py_LIMITED_API)
|
jpayne@69
|
28 #define _PyErr_OCCURRED() PyErr_Occurred()
|
jpayne@69
|
29 #else
|
jpayne@69
|
30 #define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type)
|
jpayne@69
|
31 #endif
|
jpayne@69
|
32
|
jpayne@69
|
33 /* Error testing and normalization */
|
jpayne@69
|
34 PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *);
|
jpayne@69
|
35 PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *);
|
jpayne@69
|
36 PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
|
jpayne@69
|
37
|
jpayne@69
|
38 /* Traceback manipulation (PEP 3134) */
|
jpayne@69
|
39 PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *);
|
jpayne@69
|
40 PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *);
|
jpayne@69
|
41
|
jpayne@69
|
42 /* Cause manipulation (PEP 3134) */
|
jpayne@69
|
43 PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *);
|
jpayne@69
|
44 PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *);
|
jpayne@69
|
45
|
jpayne@69
|
46 /* Context manipulation (PEP 3134) */
|
jpayne@69
|
47 PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *);
|
jpayne@69
|
48 PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
|
jpayne@69
|
49
|
jpayne@69
|
50 /* */
|
jpayne@69
|
51
|
jpayne@69
|
52 #define PyExceptionClass_Check(x) \
|
jpayne@69
|
53 (PyType_Check((x)) && \
|
jpayne@69
|
54 PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
|
jpayne@69
|
55
|
jpayne@69
|
56 #define PyExceptionInstance_Check(x) \
|
jpayne@69
|
57 PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS)
|
jpayne@69
|
58
|
jpayne@69
|
59 PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *);
|
jpayne@69
|
60
|
jpayne@69
|
61 #define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type))
|
jpayne@69
|
62
|
jpayne@69
|
63
|
jpayne@69
|
64 /* Predefined exceptions */
|
jpayne@69
|
65
|
jpayne@69
|
66 PyAPI_DATA(PyObject *) PyExc_BaseException;
|
jpayne@69
|
67 PyAPI_DATA(PyObject *) PyExc_Exception;
|
jpayne@69
|
68 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
jpayne@69
|
69 PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration;
|
jpayne@69
|
70 #endif
|
jpayne@69
|
71 PyAPI_DATA(PyObject *) PyExc_StopIteration;
|
jpayne@69
|
72 PyAPI_DATA(PyObject *) PyExc_GeneratorExit;
|
jpayne@69
|
73 PyAPI_DATA(PyObject *) PyExc_ArithmeticError;
|
jpayne@69
|
74 PyAPI_DATA(PyObject *) PyExc_LookupError;
|
jpayne@69
|
75
|
jpayne@69
|
76 PyAPI_DATA(PyObject *) PyExc_AssertionError;
|
jpayne@69
|
77 PyAPI_DATA(PyObject *) PyExc_AttributeError;
|
jpayne@69
|
78 PyAPI_DATA(PyObject *) PyExc_BufferError;
|
jpayne@69
|
79 PyAPI_DATA(PyObject *) PyExc_EOFError;
|
jpayne@69
|
80 PyAPI_DATA(PyObject *) PyExc_FloatingPointError;
|
jpayne@69
|
81 PyAPI_DATA(PyObject *) PyExc_OSError;
|
jpayne@69
|
82 PyAPI_DATA(PyObject *) PyExc_ImportError;
|
jpayne@69
|
83 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
jpayne@69
|
84 PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError;
|
jpayne@69
|
85 #endif
|
jpayne@69
|
86 PyAPI_DATA(PyObject *) PyExc_IndexError;
|
jpayne@69
|
87 PyAPI_DATA(PyObject *) PyExc_KeyError;
|
jpayne@69
|
88 PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;
|
jpayne@69
|
89 PyAPI_DATA(PyObject *) PyExc_MemoryError;
|
jpayne@69
|
90 PyAPI_DATA(PyObject *) PyExc_NameError;
|
jpayne@69
|
91 PyAPI_DATA(PyObject *) PyExc_OverflowError;
|
jpayne@69
|
92 PyAPI_DATA(PyObject *) PyExc_RuntimeError;
|
jpayne@69
|
93 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
jpayne@69
|
94 PyAPI_DATA(PyObject *) PyExc_RecursionError;
|
jpayne@69
|
95 #endif
|
jpayne@69
|
96 PyAPI_DATA(PyObject *) PyExc_NotImplementedError;
|
jpayne@69
|
97 PyAPI_DATA(PyObject *) PyExc_SyntaxError;
|
jpayne@69
|
98 PyAPI_DATA(PyObject *) PyExc_IndentationError;
|
jpayne@69
|
99 PyAPI_DATA(PyObject *) PyExc_TabError;
|
jpayne@69
|
100 PyAPI_DATA(PyObject *) PyExc_ReferenceError;
|
jpayne@69
|
101 PyAPI_DATA(PyObject *) PyExc_SystemError;
|
jpayne@69
|
102 PyAPI_DATA(PyObject *) PyExc_SystemExit;
|
jpayne@69
|
103 PyAPI_DATA(PyObject *) PyExc_TypeError;
|
jpayne@69
|
104 PyAPI_DATA(PyObject *) PyExc_UnboundLocalError;
|
jpayne@69
|
105 PyAPI_DATA(PyObject *) PyExc_UnicodeError;
|
jpayne@69
|
106 PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError;
|
jpayne@69
|
107 PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError;
|
jpayne@69
|
108 PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError;
|
jpayne@69
|
109 PyAPI_DATA(PyObject *) PyExc_ValueError;
|
jpayne@69
|
110 PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError;
|
jpayne@69
|
111
|
jpayne@69
|
112 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
jpayne@69
|
113 PyAPI_DATA(PyObject *) PyExc_BlockingIOError;
|
jpayne@69
|
114 PyAPI_DATA(PyObject *) PyExc_BrokenPipeError;
|
jpayne@69
|
115 PyAPI_DATA(PyObject *) PyExc_ChildProcessError;
|
jpayne@69
|
116 PyAPI_DATA(PyObject *) PyExc_ConnectionError;
|
jpayne@69
|
117 PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError;
|
jpayne@69
|
118 PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError;
|
jpayne@69
|
119 PyAPI_DATA(PyObject *) PyExc_ConnectionResetError;
|
jpayne@69
|
120 PyAPI_DATA(PyObject *) PyExc_FileExistsError;
|
jpayne@69
|
121 PyAPI_DATA(PyObject *) PyExc_FileNotFoundError;
|
jpayne@69
|
122 PyAPI_DATA(PyObject *) PyExc_InterruptedError;
|
jpayne@69
|
123 PyAPI_DATA(PyObject *) PyExc_IsADirectoryError;
|
jpayne@69
|
124 PyAPI_DATA(PyObject *) PyExc_NotADirectoryError;
|
jpayne@69
|
125 PyAPI_DATA(PyObject *) PyExc_PermissionError;
|
jpayne@69
|
126 PyAPI_DATA(PyObject *) PyExc_ProcessLookupError;
|
jpayne@69
|
127 PyAPI_DATA(PyObject *) PyExc_TimeoutError;
|
jpayne@69
|
128 #endif
|
jpayne@69
|
129
|
jpayne@69
|
130
|
jpayne@69
|
131 /* Compatibility aliases */
|
jpayne@69
|
132 PyAPI_DATA(PyObject *) PyExc_EnvironmentError;
|
jpayne@69
|
133 PyAPI_DATA(PyObject *) PyExc_IOError;
|
jpayne@69
|
134 #ifdef MS_WINDOWS
|
jpayne@69
|
135 PyAPI_DATA(PyObject *) PyExc_WindowsError;
|
jpayne@69
|
136 #endif
|
jpayne@69
|
137
|
jpayne@69
|
138 /* Predefined warning categories */
|
jpayne@69
|
139 PyAPI_DATA(PyObject *) PyExc_Warning;
|
jpayne@69
|
140 PyAPI_DATA(PyObject *) PyExc_UserWarning;
|
jpayne@69
|
141 PyAPI_DATA(PyObject *) PyExc_DeprecationWarning;
|
jpayne@69
|
142 PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning;
|
jpayne@69
|
143 PyAPI_DATA(PyObject *) PyExc_SyntaxWarning;
|
jpayne@69
|
144 PyAPI_DATA(PyObject *) PyExc_RuntimeWarning;
|
jpayne@69
|
145 PyAPI_DATA(PyObject *) PyExc_FutureWarning;
|
jpayne@69
|
146 PyAPI_DATA(PyObject *) PyExc_ImportWarning;
|
jpayne@69
|
147 PyAPI_DATA(PyObject *) PyExc_UnicodeWarning;
|
jpayne@69
|
148 PyAPI_DATA(PyObject *) PyExc_BytesWarning;
|
jpayne@69
|
149 PyAPI_DATA(PyObject *) PyExc_ResourceWarning;
|
jpayne@69
|
150
|
jpayne@69
|
151
|
jpayne@69
|
152 /* Convenience functions */
|
jpayne@69
|
153
|
jpayne@69
|
154 PyAPI_FUNC(int) PyErr_BadArgument(void);
|
jpayne@69
|
155 PyAPI_FUNC(PyObject *) PyErr_NoMemory(void);
|
jpayne@69
|
156 PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *);
|
jpayne@69
|
157 PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject(
|
jpayne@69
|
158 PyObject *, PyObject *);
|
jpayne@69
|
159 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
|
jpayne@69
|
160 PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects(
|
jpayne@69
|
161 PyObject *, PyObject *, PyObject *);
|
jpayne@69
|
162 #endif
|
jpayne@69
|
163 PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename(
|
jpayne@69
|
164 PyObject *exc,
|
jpayne@69
|
165 const char *filename /* decoded from the filesystem encoding */
|
jpayne@69
|
166 );
|
jpayne@69
|
167
|
jpayne@69
|
168 PyAPI_FUNC(PyObject *) PyErr_Format(
|
jpayne@69
|
169 PyObject *exception,
|
jpayne@69
|
170 const char *format, /* ASCII-encoded string */
|
jpayne@69
|
171 ...
|
jpayne@69
|
172 );
|
jpayne@69
|
173 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
jpayne@69
|
174 PyAPI_FUNC(PyObject *) PyErr_FormatV(
|
jpayne@69
|
175 PyObject *exception,
|
jpayne@69
|
176 const char *format,
|
jpayne@69
|
177 va_list vargs);
|
jpayne@69
|
178 #endif
|
jpayne@69
|
179
|
jpayne@69
|
180 #ifdef MS_WINDOWS
|
jpayne@69
|
181 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
|
jpayne@69
|
182 int ierr,
|
jpayne@69
|
183 const char *filename /* decoded from the filesystem encoding */
|
jpayne@69
|
184 );
|
jpayne@69
|
185 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);
|
jpayne@69
|
186 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
|
jpayne@69
|
187 PyObject *,int, PyObject *);
|
jpayne@69
|
188 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
|
jpayne@69
|
189 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects(
|
jpayne@69
|
190 PyObject *,int, PyObject *, PyObject *);
|
jpayne@69
|
191 #endif
|
jpayne@69
|
192 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename(
|
jpayne@69
|
193 PyObject *exc,
|
jpayne@69
|
194 int ierr,
|
jpayne@69
|
195 const char *filename /* decoded from the filesystem encoding */
|
jpayne@69
|
196 );
|
jpayne@69
|
197 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
|
jpayne@69
|
198 #endif /* MS_WINDOWS */
|
jpayne@69
|
199
|
jpayne@69
|
200 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
jpayne@69
|
201 PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *,
|
jpayne@69
|
202 PyObject *, PyObject *);
|
jpayne@69
|
203 #endif
|
jpayne@69
|
204 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
jpayne@69
|
205 PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *,
|
jpayne@69
|
206 PyObject *);
|
jpayne@69
|
207 #endif
|
jpayne@69
|
208
|
jpayne@69
|
209 /* Export the old function so that the existing API remains available: */
|
jpayne@69
|
210 PyAPI_FUNC(void) PyErr_BadInternalCall(void);
|
jpayne@69
|
211 PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno);
|
jpayne@69
|
212 /* Mask the old API with a call to the new API for code compiled under
|
jpayne@69
|
213 Python 2.0: */
|
jpayne@69
|
214 #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
|
jpayne@69
|
215
|
jpayne@69
|
216 /* Function to create a new exception */
|
jpayne@69
|
217 PyAPI_FUNC(PyObject *) PyErr_NewException(
|
jpayne@69
|
218 const char *name, PyObject *base, PyObject *dict);
|
jpayne@69
|
219 PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc(
|
jpayne@69
|
220 const char *name, const char *doc, PyObject *base, PyObject *dict);
|
jpayne@69
|
221 PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *);
|
jpayne@69
|
222
|
jpayne@69
|
223
|
jpayne@69
|
224 /* In signalmodule.c */
|
jpayne@69
|
225 PyAPI_FUNC(int) PyErr_CheckSignals(void);
|
jpayne@69
|
226 PyAPI_FUNC(void) PyErr_SetInterrupt(void);
|
jpayne@69
|
227
|
jpayne@69
|
228 /* Support for adding program text to SyntaxErrors */
|
jpayne@69
|
229 PyAPI_FUNC(void) PyErr_SyntaxLocation(
|
jpayne@69
|
230 const char *filename, /* decoded from the filesystem encoding */
|
jpayne@69
|
231 int lineno);
|
jpayne@69
|
232 PyAPI_FUNC(void) PyErr_SyntaxLocationEx(
|
jpayne@69
|
233 const char *filename, /* decoded from the filesystem encoding */
|
jpayne@69
|
234 int lineno,
|
jpayne@69
|
235 int col_offset);
|
jpayne@69
|
236 PyAPI_FUNC(PyObject *) PyErr_ProgramText(
|
jpayne@69
|
237 const char *filename, /* decoded from the filesystem encoding */
|
jpayne@69
|
238 int lineno);
|
jpayne@69
|
239
|
jpayne@69
|
240 /* The following functions are used to create and modify unicode
|
jpayne@69
|
241 exceptions from C */
|
jpayne@69
|
242
|
jpayne@69
|
243 /* create a UnicodeDecodeError object */
|
jpayne@69
|
244 PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
|
jpayne@69
|
245 const char *encoding, /* UTF-8 encoded string */
|
jpayne@69
|
246 const char *object,
|
jpayne@69
|
247 Py_ssize_t length,
|
jpayne@69
|
248 Py_ssize_t start,
|
jpayne@69
|
249 Py_ssize_t end,
|
jpayne@69
|
250 const char *reason /* UTF-8 encoded string */
|
jpayne@69
|
251 );
|
jpayne@69
|
252
|
jpayne@69
|
253 /* get the encoding attribute */
|
jpayne@69
|
254 PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
|
jpayne@69
|
255 PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *);
|
jpayne@69
|
256
|
jpayne@69
|
257 /* get the object attribute */
|
jpayne@69
|
258 PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *);
|
jpayne@69
|
259 PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *);
|
jpayne@69
|
260 PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *);
|
jpayne@69
|
261
|
jpayne@69
|
262 /* get the value of the start attribute (the int * may not be NULL)
|
jpayne@69
|
263 return 0 on success, -1 on failure */
|
jpayne@69
|
264 PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);
|
jpayne@69
|
265 PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);
|
jpayne@69
|
266 PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
|
jpayne@69
|
267
|
jpayne@69
|
268 /* assign a new value to the start attribute
|
jpayne@69
|
269 return 0 on success, -1 on failure */
|
jpayne@69
|
270 PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);
|
jpayne@69
|
271 PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);
|
jpayne@69
|
272 PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
|
jpayne@69
|
273
|
jpayne@69
|
274 /* get the value of the end attribute (the int *may not be NULL)
|
jpayne@69
|
275 return 0 on success, -1 on failure */
|
jpayne@69
|
276 PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);
|
jpayne@69
|
277 PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);
|
jpayne@69
|
278 PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
|
jpayne@69
|
279
|
jpayne@69
|
280 /* assign a new value to the end attribute
|
jpayne@69
|
281 return 0 on success, -1 on failure */
|
jpayne@69
|
282 PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);
|
jpayne@69
|
283 PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);
|
jpayne@69
|
284 PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
|
jpayne@69
|
285
|
jpayne@69
|
286 /* get the value of the reason attribute */
|
jpayne@69
|
287 PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);
|
jpayne@69
|
288 PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *);
|
jpayne@69
|
289 PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *);
|
jpayne@69
|
290
|
jpayne@69
|
291 /* assign a new value to the reason attribute
|
jpayne@69
|
292 return 0 on success, -1 on failure */
|
jpayne@69
|
293 PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason(
|
jpayne@69
|
294 PyObject *exc,
|
jpayne@69
|
295 const char *reason /* UTF-8 encoded string */
|
jpayne@69
|
296 );
|
jpayne@69
|
297 PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason(
|
jpayne@69
|
298 PyObject *exc,
|
jpayne@69
|
299 const char *reason /* UTF-8 encoded string */
|
jpayne@69
|
300 );
|
jpayne@69
|
301 PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
|
jpayne@69
|
302 PyObject *exc,
|
jpayne@69
|
303 const char *reason /* UTF-8 encoded string */
|
jpayne@69
|
304 );
|
jpayne@69
|
305
|
jpayne@69
|
306 /* These APIs aren't really part of the error implementation, but
|
jpayne@69
|
307 often needed to format error messages; the native C lib APIs are
|
jpayne@69
|
308 not available on all platforms, which is why we provide emulations
|
jpayne@69
|
309 for those platforms in Python/mysnprintf.c,
|
jpayne@69
|
310 WARNING: The return value of snprintf varies across platforms; do
|
jpayne@69
|
311 not rely on any particular behavior; eventually the C99 defn may
|
jpayne@69
|
312 be reliable.
|
jpayne@69
|
313 */
|
jpayne@69
|
314 #if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
|
jpayne@69
|
315 # define HAVE_SNPRINTF
|
jpayne@69
|
316 # define snprintf _snprintf
|
jpayne@69
|
317 # define vsnprintf _vsnprintf
|
jpayne@69
|
318 #endif
|
jpayne@69
|
319
|
jpayne@69
|
320 #include <stdarg.h>
|
jpayne@69
|
321 PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...)
|
jpayne@69
|
322 Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
|
jpayne@69
|
323 PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
|
jpayne@69
|
324 Py_GCC_ATTRIBUTE((format(printf, 3, 0)));
|
jpayne@69
|
325
|
jpayne@69
|
326 #ifndef Py_LIMITED_API
|
jpayne@69
|
327 # define Py_CPYTHON_ERRORS_H
|
jpayne@69
|
328 # include "cpython/pyerrors.h"
|
jpayne@69
|
329 # undef Py_CPYTHON_ERRORS_H
|
jpayne@69
|
330 #endif
|
jpayne@69
|
331
|
jpayne@69
|
332 #ifdef __cplusplus
|
jpayne@69
|
333 }
|
jpayne@69
|
334 #endif
|
jpayne@69
|
335 #endif /* !Py_ERRORS_H */
|