blob: a06ec02d9ab06f8798b5f1342a5bf77e583a5709 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum373c8691997-04-29 18:22:47 +00002/* Error handling */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00003
Guido van Rossum373c8691997-04-29 18:22:47 +00004#include "Python.h"
Guido van Rossumf22120a1990-12-20 23:05:40 +00005
Guido van Rossum53e8d441995-03-09 12:11:31 +00006#ifndef __STDC__
Guido van Rossum7844e381997-04-11 20:44:04 +00007#ifndef MS_WINDOWS
Tim Petersdbd9ba62000-07-09 03:09:57 +00008extern char *strerror(int);
Guido van Rossum53e8d441995-03-09 12:11:31 +00009#endif
Guido van Rossum7844e381997-04-11 20:44:04 +000010#endif
Guido van Rossumf5401bd1990-11-02 17:50:28 +000011
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000012#ifdef MS_WINDOWS
Martin v. Löwis5d12abe2007-09-03 07:40:24 +000013#include <windows.h>
14#include <winbase.h>
Guido van Rossum743007d1999-04-21 15:27:31 +000015#endif
16
Jeremy Hyltonb69a27e2000-09-01 03:49:47 +000017#include <ctype.h>
18
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000019#ifdef __cplusplus
20extern "C" {
21#endif
22
23
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000024void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000025PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000026{
Guido van Rossum885553e1998-12-21 18:33:30 +000027 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossuma027efa1997-05-05 20:56:21 +000028 PyObject *oldtype, *oldvalue, *oldtraceback;
Guido van Rossum1ae940a1995-01-02 19:04:15 +000029
Guido van Rossuma027efa1997-05-05 20:56:21 +000030 if (traceback != NULL && !PyTraceBack_Check(traceback)) {
31 /* XXX Should never happen -- fatal error instead? */
Guido van Rossum1a5e21e2006-02-28 21:57:43 +000032 /* Well, it could be None. */
Guido van Rossuma027efa1997-05-05 20:56:21 +000033 Py_DECREF(traceback);
34 traceback = NULL;
35 }
36
37 /* Save these in locals to safeguard against recursive
38 invocation through Py_XDECREF */
39 oldtype = tstate->curexc_type;
40 oldvalue = tstate->curexc_value;
41 oldtraceback = tstate->curexc_traceback;
42
43 tstate->curexc_type = type;
44 tstate->curexc_value = value;
45 tstate->curexc_traceback = traceback;
46
47 Py_XDECREF(oldtype);
48 Py_XDECREF(oldvalue);
49 Py_XDECREF(oldtraceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +000050}
51
52void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000053PyErr_SetObject(PyObject *exception, PyObject *value)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000054{
Guido van Rossumb4fb6e42008-06-14 20:20:24 +000055 PyThreadState *tstate = PyThreadState_GET();
56 PyObject *tb = NULL;
57
Thomas Wouters303de6a2006-04-20 22:42:37 +000058 if (exception != NULL &&
59 !PyExceptionClass_Check(exception)) {
Thomas Wouters303de6a2006-04-20 22:42:37 +000060 PyErr_Format(PyExc_SystemError,
Walter Dörwald573c08c2007-05-25 15:46:59 +000061 "exception %R not a BaseException subclass",
62 exception);
Thomas Wouters303de6a2006-04-20 22:42:37 +000063 return;
64 }
Guido van Rossum373c8691997-04-29 18:22:47 +000065 Py_XINCREF(value);
Guido van Rossumb4fb6e42008-06-14 20:20:24 +000066 if (tstate->exc_value != NULL && tstate->exc_value != Py_None) {
67 /* Implicit exception chaining */
68 if (value == NULL || !PyExceptionInstance_Check(value)) {
69 /* We must normalize the value right now */
70 PyObject *args, *fixed_value;
71 if (value == NULL || value == Py_None)
72 args = PyTuple_New(0);
73 else if (PyTuple_Check(value)) {
74 Py_INCREF(value);
75 args = value;
76 }
77 else
78 args = PyTuple_Pack(1, value);
79 fixed_value = args ?
80 PyEval_CallObject(exception, args) : NULL;
81 Py_XDECREF(args);
82 Py_XDECREF(value);
83 if (fixed_value == NULL)
84 return;
85 value = fixed_value;
86 }
Benjamin Petersone6528212008-07-15 15:32:09 +000087 /* Avoid reference cycles through the context chain.
88 This is O(chain length) but context chains are
89 usually very short. Sensitive readers may try
90 to inline the call to PyException_GetContext. */
91 if (tstate->exc_value != value) {
92 PyObject *o = tstate->exc_value, *context;
93 while ((context = PyException_GetContext(o))) {
94 Py_DECREF(context);
95 if (context == value) {
96 PyException_SetContext(o, NULL);
97 break;
98 }
99 o = context;
100 }
101 Py_INCREF(tstate->exc_value);
102 PyException_SetContext(value, tstate->exc_value);
103 }
Guido van Rossumb4fb6e42008-06-14 20:20:24 +0000104 }
105 if (value != NULL && PyExceptionInstance_Check(value))
106 tb = PyException_GetTraceback(value);
107 Py_XINCREF(exception);
108 PyErr_Restore(exception, value, tb);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000109}
110
111void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000112PyErr_SetNone(PyObject *exception)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000113{
Guido van Rossum373c8691997-04-29 18:22:47 +0000114 PyErr_SetObject(exception, (PyObject *)NULL);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000115}
116
117void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000118PyErr_SetString(PyObject *exception, const char *string)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000119{
Walter Dörwald573c08c2007-05-25 15:46:59 +0000120 PyObject *value = PyUnicode_FromString(string);
Guido van Rossum373c8691997-04-29 18:22:47 +0000121 PyErr_SetObject(exception, value);
122 Py_XDECREF(value);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000123}
124
Guido van Rossum3a241811994-08-29 12:14:12 +0000125
Guido van Rossum373c8691997-04-29 18:22:47 +0000126PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000127PyErr_Occurred(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000128{
Tim Peters024da352001-05-30 06:09:50 +0000129 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossuma027efa1997-05-05 20:56:21 +0000130
131 return tstate->curexc_type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000132}
133
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000134
135int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000136PyErr_GivenExceptionMatches(PyObject *err, PyObject *exc)
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000137{
Barry Warsawfa5c3152000-05-02 19:27:51 +0000138 if (err == NULL || exc == NULL) {
139 /* maybe caused by "import exceptions" that failed early on */
140 return 0;
141 }
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000142 if (PyTuple_Check(exc)) {
Martin v. Löwisd96ee902006-02-16 14:37:16 +0000143 Py_ssize_t i, n;
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000144 n = PyTuple_Size(exc);
145 for (i = 0; i < n; i++) {
146 /* Test recursively */
147 if (PyErr_GivenExceptionMatches(
148 err, PyTuple_GET_ITEM(exc, i)))
149 {
150 return 1;
151 }
152 }
153 return 0;
154 }
155 /* err might be an instance, so check its class. */
Brett Cannonbf364092006-03-01 04:25:17 +0000156 if (PyExceptionInstance_Check(err))
157 err = PyExceptionInstance_Class(err);
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000158
Brett Cannonbf364092006-03-01 04:25:17 +0000159 if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) {
Benjamin Peterson69c88f72008-07-31 01:47:08 +0000160 int res = 0;
161 PyObject *exception, *value, *tb;
162 PyErr_Fetch(&exception, &value, &tb);
163 res = PyObject_IsSubclass(err, exc);
164 /* This function must not fail, so print the error here */
165 if (res == -1) {
166 PyErr_WriteUnraisable(err);
167 /* issubclass did not succeed */
168 res = 0;
169 }
170 PyErr_Restore(exception, value, tb);
171 return res;
Brett Cannonbf364092006-03-01 04:25:17 +0000172 }
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000173
174 return err == exc;
175}
Guido van Rossum743007d1999-04-21 15:27:31 +0000176
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000177
178int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000179PyErr_ExceptionMatches(PyObject *exc)
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000180{
181 return PyErr_GivenExceptionMatches(PyErr_Occurred(), exc);
182}
183
184
185/* Used in many places to normalize a raised exception, including in
186 eval_code2(), do_raise(), and PyErr_Print()
Benjamin Petersone6528212008-07-15 15:32:09 +0000187
188 XXX: should PyErr_NormalizeException() also call
189 PyException_SetTraceback() with the resulting value and tb?
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000190*/
191void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000192PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb)
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000193{
194 PyObject *type = *exc;
195 PyObject *value = *val;
196 PyObject *inclass = NULL;
Jeremy Hyltone2e2c9f2001-09-26 19:58:38 +0000197 PyObject *initial_tb = NULL;
Thomas Wouters89d996e2007-09-08 17:39:28 +0000198 PyThreadState *tstate = NULL;
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000199
Guido van Rossumed473a42000-08-07 19:18:27 +0000200 if (type == NULL) {
Guido van Rossum6b3fffa2003-04-10 20:29:48 +0000201 /* There was no exception, so nothing to do. */
202 return;
Guido van Rossumed473a42000-08-07 19:18:27 +0000203 }
204
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000205 /* If PyErr_SetNone() was used, the value will have been actually
206 set to NULL.
207 */
208 if (!value) {
209 value = Py_None;
210 Py_INCREF(value);
211 }
212
Brett Cannonbf364092006-03-01 04:25:17 +0000213 if (PyExceptionInstance_Check(value))
214 inclass = PyExceptionInstance_Class(value);
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000215
216 /* Normalize the exception so that if the type is a class, the
217 value will be an instance.
218 */
Brett Cannonbf364092006-03-01 04:25:17 +0000219 if (PyExceptionClass_Check(type)) {
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000220 /* if the value was not an instance, or is not an instance
221 whose class is (or is derived from) type, then use the
222 value as an argument to instantiation of the type
223 class.
224 */
Brett Cannonbf364092006-03-01 04:25:17 +0000225 if (!inclass || !PyObject_IsSubclass(inclass, type)) {
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000226 PyObject *args, *res;
227
228 if (value == Py_None)
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000229 args = PyTuple_New(0);
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000230 else if (PyTuple_Check(value)) {
231 Py_INCREF(value);
232 args = value;
233 }
234 else
Raymond Hettinger8ae46892003-10-12 19:09:37 +0000235 args = PyTuple_Pack(1, value);
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000236
237 if (args == NULL)
238 goto finally;
239 res = PyEval_CallObject(type, args);
240 Py_DECREF(args);
241 if (res == NULL)
242 goto finally;
243 Py_DECREF(value);
244 value = res;
245 }
Barry Warsaw3a749931997-09-30 15:00:18 +0000246 /* if the class of the instance doesn't exactly match the
247 class of the type, believe the instance
248 */
249 else if (inclass != type) {
250 Py_DECREF(type);
251 type = inclass;
252 Py_INCREF(type);
253 }
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000254 }
255 *exc = type;
256 *val = value;
257 return;
258finally:
Guido van Rossum19b55f21997-12-09 14:11:39 +0000259 Py_DECREF(type);
260 Py_DECREF(value);
Jeremy Hyltone2e2c9f2001-09-26 19:58:38 +0000261 /* If the new exception doesn't set a traceback and the old
262 exception had a traceback, use the old traceback for the
263 new exception. It's better than nothing.
264 */
265 initial_tb = *tb;
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000266 PyErr_Fetch(exc, val, tb);
Jeremy Hyltone2e2c9f2001-09-26 19:58:38 +0000267 if (initial_tb != NULL) {
268 if (*tb == NULL)
269 *tb = initial_tb;
270 else
271 Py_DECREF(initial_tb);
272 }
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000273 /* normalize recursively */
Thomas Wouters89d996e2007-09-08 17:39:28 +0000274 tstate = PyThreadState_GET();
275 if (++tstate->recursion_depth > Py_GetRecursionLimit()) {
276 --tstate->recursion_depth;
277 PyErr_SetObject(PyExc_RuntimeError, PyExc_RecursionErrorInst);
278 return;
279 }
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000280 PyErr_NormalizeException(exc, val, tb);
Thomas Wouters89d996e2007-09-08 17:39:28 +0000281 --tstate->recursion_depth;
Barry Warsawc0dc92a1997-08-22 21:22:58 +0000282}
283
284
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000285void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000286PyErr_Fetch(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000287{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000288 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossuma027efa1997-05-05 20:56:21 +0000289
290 *p_type = tstate->curexc_type;
291 *p_value = tstate->curexc_value;
292 *p_traceback = tstate->curexc_traceback;
293
294 tstate->curexc_type = NULL;
295 tstate->curexc_value = NULL;
296 tstate->curexc_traceback = NULL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000297}
298
299void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000300PyErr_Clear(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000301{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000302 PyErr_Restore(NULL, NULL, NULL);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000303}
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000304
305/* Convenience functions to set a type error exception and return 0 */
306
307int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000308PyErr_BadArgument(void)
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000309{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000310 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000311 "bad argument type for built-in operation");
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000312 return 0;
313}
314
Guido van Rossum373c8691997-04-29 18:22:47 +0000315PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000316PyErr_NoMemory(void)
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000317{
Vladimir Marangozov0888ff12000-08-18 18:01:06 +0000318 if (PyErr_ExceptionMatches(PyExc_MemoryError))
319 /* already current */
320 return NULL;
321
Barry Warsaw2d8adff1997-08-29 21:54:35 +0000322 /* raise the pre-allocated instance if it still exists */
323 if (PyExc_MemoryErrorInst)
324 PyErr_SetObject(PyExc_MemoryError, PyExc_MemoryErrorInst);
325 else
326 /* this will probably fail since there's no memory and hee,
327 hee, we have to instantiate this class
328 */
329 PyErr_SetNone(PyExc_MemoryError);
330
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000331 return NULL;
332}
333
Guido van Rossum373c8691997-04-29 18:22:47 +0000334PyObject *
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000335PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject)
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000336{
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000337 PyObject *message;
Guido van Rossum373c8691997-04-29 18:22:47 +0000338 PyObject *v;
Guido van Rossum3a241811994-08-29 12:14:12 +0000339 int i = errno;
Martin v. Löwis3484a182002-03-09 12:07:51 +0000340#ifdef PLAN9
341 char errbuf[ERRMAX];
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000342#else
343#ifndef MS_WINDOWS
344 char *s;
345#else
346 WCHAR *s_buf = NULL;
347#endif /* Unix/Windows */
348#endif /* PLAN 9*/
349
Guido van Rossume9fbc091995-02-18 14:52:19 +0000350#ifdef EINTR
Guido van Rossum373c8691997-04-29 18:22:47 +0000351 if (i == EINTR && PyErr_CheckSignals())
Guido van Rossum5063bab1991-10-20 20:14:56 +0000352 return NULL;
Guido van Rossume9fbc091995-02-18 14:52:19 +0000353#endif
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000354
Martin v. Löwis3484a182002-03-09 12:07:51 +0000355#ifdef PLAN9
356 rerrstr(errbuf, sizeof errbuf);
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000357 message = PyUnicode_DecodeUTF8(errbuf, strlen(errbuf), "ignore");
Martin v. Löwis3484a182002-03-09 12:07:51 +0000358#else
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000359#ifndef MS_WINDOWS
Guido van Rossume0e59821998-10-14 20:38:13 +0000360 if (i == 0)
361 s = "Error"; /* Sometimes errno didn't get set */
Barry Warsaw97d95151998-07-23 16:05:56 +0000362 else
Guido van Rossume0e59821998-10-14 20:38:13 +0000363 s = strerror(i);
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000364 message = PyUnicode_DecodeUTF8(s, strlen(s), "ignore");
Guido van Rossum743007d1999-04-21 15:27:31 +0000365#else
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000366 if (i == 0)
367 message = PyUnicode_FromString("Error"); /* Sometimes errno didn't get set */
368 else
Guido van Rossum743007d1999-04-21 15:27:31 +0000369 {
Guido van Rossum795e1892000-02-17 15:19:15 +0000370 /* Note that the Win32 errors do not lineup with the
371 errno error. So if the error is in the MSVC error
Brett Cannonbf364092006-03-01 04:25:17 +0000372 table, we use it, otherwise we assume it really _is_
Guido van Rossum795e1892000-02-17 15:19:15 +0000373 a Win32 error code
374 */
Guido van Rossum584b16a2000-02-21 16:50:31 +0000375 if (i > 0 && i < _sys_nerr) {
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000376 message = PyUnicode_FromString(_sys_errlist[i]);
Guido van Rossum795e1892000-02-17 15:19:15 +0000377 }
378 else {
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000379 int len = FormatMessageW(
Guido van Rossum795e1892000-02-17 15:19:15 +0000380 FORMAT_MESSAGE_ALLOCATE_BUFFER |
381 FORMAT_MESSAGE_FROM_SYSTEM |
382 FORMAT_MESSAGE_IGNORE_INSERTS,
383 NULL, /* no message source */
384 i,
385 MAKELANGID(LANG_NEUTRAL,
386 SUBLANG_DEFAULT),
387 /* Default language */
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000388 (LPWSTR) &s_buf,
Guido van Rossum795e1892000-02-17 15:19:15 +0000389 0, /* size not used */
390 NULL); /* no args */
Mark Hammond3d61a062002-10-04 00:13:02 +0000391 if (len==0) {
Brett Cannonbf364092006-03-01 04:25:17 +0000392 /* Only ever seen this in out-of-mem
Mark Hammond3d61a062002-10-04 00:13:02 +0000393 situations */
Mark Hammond3d61a062002-10-04 00:13:02 +0000394 s_buf = NULL;
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000395 message = PyUnicode_FromFormat("Windows Error 0x%X", i);
Mark Hammond3d61a062002-10-04 00:13:02 +0000396 } else {
Mark Hammond3d61a062002-10-04 00:13:02 +0000397 /* remove trailing cr/lf and dots */
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000398 while (len > 0 && (s_buf[len-1] <= L' ' || s_buf[len-1] == L'.'))
399 s_buf[--len] = L'\0';
400 message = PyUnicode_FromUnicode(s_buf, len);
Mark Hammond3d61a062002-10-04 00:13:02 +0000401 }
Guido van Rossum795e1892000-02-17 15:19:15 +0000402 }
Guido van Rossum743007d1999-04-21 15:27:31 +0000403 }
Martin v. Löwis3484a182002-03-09 12:07:51 +0000404#endif /* Unix/Windows */
405#endif /* PLAN 9*/
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000406
407 if (message == NULL)
408 {
409#ifdef MS_WINDOWS
410 LocalFree(s_buf);
411#endif
412 return NULL;
413 }
414
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000415 if (filenameObject != NULL)
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000416 v = Py_BuildValue("(iOO)", i, message, filenameObject);
Guido van Rossume0e59821998-10-14 20:38:13 +0000417 else
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000418 v = Py_BuildValue("(iO)", i, message);
419 Py_DECREF(message);
420
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000421 if (v != NULL) {
Guido van Rossum373c8691997-04-29 18:22:47 +0000422 PyErr_SetObject(exc, v);
423 Py_DECREF(v);
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000424 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000425#ifdef MS_WINDOWS
Guido van Rossum795e1892000-02-17 15:19:15 +0000426 LocalFree(s_buf);
Guido van Rossum743007d1999-04-21 15:27:31 +0000427#endif
Guido van Rossum7d310eb1990-10-14 20:00:05 +0000428 return NULL;
429}
Guido van Rossum743007d1999-04-21 15:27:31 +0000430
Barry Warsaw97d95151998-07-23 16:05:56 +0000431
432PyObject *
Neal Norwitzb382b842007-08-24 20:00:37 +0000433PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename)
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000434{
Neal Norwitzcd795962007-08-24 19:54:13 +0000435 PyObject *name = filename ? PyUnicode_FromString(filename) : NULL;
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000436 PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
Mark Hammondda7efaa2002-10-04 00:09:38 +0000437 Py_XDECREF(name);
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000438 return result;
439}
440
441#ifdef Py_WIN_WIDE_FILENAMES
442PyObject *
Neal Norwitzb382b842007-08-24 20:00:37 +0000443PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, const Py_UNICODE *filename)
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000444{
Brett Cannonbf364092006-03-01 04:25:17 +0000445 PyObject *name = filename ?
446 PyUnicode_FromUnicode(filename, wcslen(filename)) :
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000447 NULL;
448 PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
449 Py_XDECREF(name);
450 return result;
451}
452#endif /* Py_WIN_WIDE_FILENAMES */
453
454PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000455PyErr_SetFromErrno(PyObject *exc)
Barry Warsaw97d95151998-07-23 16:05:56 +0000456{
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000457 return PyErr_SetFromErrnoWithFilenameObject(exc, NULL);
Barry Warsaw97d95151998-07-23 16:05:56 +0000458}
Guido van Rossum683a0721990-10-21 22:09:12 +0000459
Brett Cannonbf364092006-03-01 04:25:17 +0000460#ifdef MS_WINDOWS
Guido van Rossum795e1892000-02-17 15:19:15 +0000461/* Windows specific error code handling */
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000462PyObject *PyErr_SetExcFromWindowsErrWithFilenameObject(
Thomas Heller085358a2002-07-29 14:27:41 +0000463 PyObject *exc,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000464 int ierr,
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000465 PyObject *filenameObject)
Guido van Rossum795e1892000-02-17 15:19:15 +0000466{
467 int len;
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000468 WCHAR *s_buf = NULL; /* Free via LocalFree */
469 PyObject *message;
Guido van Rossum795e1892000-02-17 15:19:15 +0000470 PyObject *v;
471 DWORD err = (DWORD)ierr;
472 if (err==0) err = GetLastError();
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000473 len = FormatMessageW(
Guido van Rossum795e1892000-02-17 15:19:15 +0000474 /* Error API error */
475 FORMAT_MESSAGE_ALLOCATE_BUFFER |
476 FORMAT_MESSAGE_FROM_SYSTEM |
477 FORMAT_MESSAGE_IGNORE_INSERTS,
478 NULL, /* no message source */
479 err,
480 MAKELANGID(LANG_NEUTRAL,
481 SUBLANG_DEFAULT), /* Default language */
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000482 (LPWSTR) &s_buf,
Guido van Rossum795e1892000-02-17 15:19:15 +0000483 0, /* size not used */
484 NULL); /* no args */
Mark Hammond3d61a062002-10-04 00:13:02 +0000485 if (len==0) {
486 /* Only seen this in out of mem situations */
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000487 message = PyUnicode_FromFormat("Windows Error 0x%X", err);
Mark Hammond3d61a062002-10-04 00:13:02 +0000488 s_buf = NULL;
489 } else {
Mark Hammond3d61a062002-10-04 00:13:02 +0000490 /* remove trailing cr/lf and dots */
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000491 while (len > 0 && (s_buf[len-1] <= L' ' || s_buf[len-1] == L'.'))
492 s_buf[--len] = L'\0';
493 message = PyUnicode_FromUnicode(s_buf, len);
Mark Hammond3d61a062002-10-04 00:13:02 +0000494 }
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000495
496 if (message == NULL)
497 {
498 LocalFree(s_buf);
499 return NULL;
500 }
501
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000502 if (filenameObject != NULL)
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000503 v = Py_BuildValue("(iOO)", err, message, filenameObject);
Guido van Rossum795e1892000-02-17 15:19:15 +0000504 else
Martin v. Löwis5d12abe2007-09-03 07:40:24 +0000505 v = Py_BuildValue("(iO)", err, message);
506 Py_DECREF(message);
507
Guido van Rossum795e1892000-02-17 15:19:15 +0000508 if (v != NULL) {
Thomas Heller085358a2002-07-29 14:27:41 +0000509 PyErr_SetObject(exc, v);
Guido van Rossum795e1892000-02-17 15:19:15 +0000510 Py_DECREF(v);
511 }
Mark Hammond3d61a062002-10-04 00:13:02 +0000512 LocalFree(s_buf);
Guido van Rossum795e1892000-02-17 15:19:15 +0000513 return NULL;
514}
515
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000516PyObject *PyErr_SetExcFromWindowsErrWithFilename(
517 PyObject *exc,
518 int ierr,
519 const char *filename)
520{
Neal Norwitzcd795962007-08-24 19:54:13 +0000521 PyObject *name = filename ? PyUnicode_FromString(filename) : NULL;
Brett Cannonbf364092006-03-01 04:25:17 +0000522 PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc,
523 ierr,
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000524 name);
525 Py_XDECREF(name);
526 return ret;
527}
528
529#ifdef Py_WIN_WIDE_FILENAMES
530PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename(
531 PyObject *exc,
532 int ierr,
533 const Py_UNICODE *filename)
534{
Brett Cannonbf364092006-03-01 04:25:17 +0000535 PyObject *name = filename ?
536 PyUnicode_FromUnicode(filename, wcslen(filename)) :
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000537 NULL;
Brett Cannonbf364092006-03-01 04:25:17 +0000538 PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc,
539 ierr,
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000540 name);
541 Py_XDECREF(name);
542 return ret;
543}
544#endif /* Py_WIN_WIDE_FILENAMES */
545
Thomas Heller085358a2002-07-29 14:27:41 +0000546PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr)
547{
548 return PyErr_SetExcFromWindowsErrWithFilename(exc, ierr, NULL);
549}
550
Guido van Rossum795e1892000-02-17 15:19:15 +0000551PyObject *PyErr_SetFromWindowsErr(int ierr)
552{
Thomas Heller085358a2002-07-29 14:27:41 +0000553 return PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError,
554 ierr, NULL);
555}
556PyObject *PyErr_SetFromWindowsErrWithFilename(
557 int ierr,
558 const char *filename)
559{
Neal Norwitzcd795962007-08-24 19:54:13 +0000560 PyObject *name = filename ? PyUnicode_FromString(filename) : NULL;
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000561 PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
562 PyExc_WindowsError,
563 ierr, name);
Mark Hammondda7efaa2002-10-04 00:09:38 +0000564 Py_XDECREF(name);
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000565 return result;
Guido van Rossum795e1892000-02-17 15:19:15 +0000566}
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000567
568#ifdef Py_WIN_WIDE_FILENAMES
569PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename(
570 int ierr,
571 const Py_UNICODE *filename)
572{
Brett Cannonbf364092006-03-01 04:25:17 +0000573 PyObject *name = filename ?
574 PyUnicode_FromUnicode(filename, wcslen(filename)) :
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000575 NULL;
576 PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
577 PyExc_WindowsError,
578 ierr, name);
Mark Hammondda7efaa2002-10-04 00:09:38 +0000579 Py_XDECREF(name);
Mark Hammondc2e85bd2002-10-03 05:10:39 +0000580 return result;
581}
582#endif /* Py_WIN_WIDE_FILENAMES */
Guido van Rossum795e1892000-02-17 15:19:15 +0000583#endif /* MS_WINDOWS */
584
Guido van Rossum683a0721990-10-21 22:09:12 +0000585void
Neal Norwitzb382b842007-08-24 20:00:37 +0000586_PyErr_BadInternalCall(const char *filename, int lineno)
Fred Drake6d63adf2000-08-24 22:38:39 +0000587{
588 PyErr_Format(PyExc_SystemError,
589 "%s:%d: bad argument to internal function",
590 filename, lineno);
591}
592
593/* Remove the preprocessor macro for PyErr_BadInternalCall() so that we can
594 export the entry point for existing object code: */
595#undef PyErr_BadInternalCall
596void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000597PyErr_BadInternalCall(void)
Guido van Rossum683a0721990-10-21 22:09:12 +0000598{
Fred Drake6d63adf2000-08-24 22:38:39 +0000599 PyErr_Format(PyExc_SystemError,
600 "bad argument to internal function");
Guido van Rossum683a0721990-10-21 22:09:12 +0000601}
Fred Drake6d63adf2000-08-24 22:38:39 +0000602#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
603
Guido van Rossum1548bac1997-02-14 17:09:47 +0000604
605
Guido van Rossum1548bac1997-02-14 17:09:47 +0000606PyObject *
607PyErr_Format(PyObject *exception, const char *format, ...)
Guido van Rossum1548bac1997-02-14 17:09:47 +0000608{
609 va_list vargs;
Jeremy Hyltonb69a27e2000-09-01 03:49:47 +0000610 PyObject* string;
Guido van Rossum1548bac1997-02-14 17:09:47 +0000611
Jeremy Hyltonb69a27e2000-09-01 03:49:47 +0000612#ifdef HAVE_STDARG_PROTOTYPES
Guido van Rossum1548bac1997-02-14 17:09:47 +0000613 va_start(vargs, format);
Jeremy Hyltonb69a27e2000-09-01 03:49:47 +0000614#else
615 va_start(vargs);
616#endif
Guido van Rossum1548bac1997-02-14 17:09:47 +0000617
Walter Dörwald573c08c2007-05-25 15:46:59 +0000618 string = PyUnicode_FromFormatV(format, vargs);
Jeremy Hyltonb69a27e2000-09-01 03:49:47 +0000619 PyErr_SetObject(exception, string);
620 Py_XDECREF(string);
Tim Petersc15c4f12001-10-02 21:32:07 +0000621 va_end(vargs);
Guido van Rossum1548bac1997-02-14 17:09:47 +0000622 return NULL;
623}
Guido van Rossum7617e051997-09-16 18:43:50 +0000624
625
Thomas Wouters477c8d52006-05-27 19:21:47 +0000626
Guido van Rossum7617e051997-09-16 18:43:50 +0000627PyObject *
Neal Norwitzb382b842007-08-24 20:00:37 +0000628PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
Guido van Rossum7617e051997-09-16 18:43:50 +0000629{
Neal Norwitzb382b842007-08-24 20:00:37 +0000630 const char *dot;
Guido van Rossum2ac650f1997-10-03 19:50:55 +0000631 PyObject *modulename = NULL;
632 PyObject *classname = NULL;
633 PyObject *mydict = NULL;
634 PyObject *bases = NULL;
Guido van Rossum7617e051997-09-16 18:43:50 +0000635 PyObject *result = NULL;
Guido van Rossum2ac650f1997-10-03 19:50:55 +0000636 dot = strrchr(name, '.');
637 if (dot == NULL) {
638 PyErr_SetString(PyExc_SystemError,
639 "PyErr_NewException: name must be module.class");
Guido van Rossum7617e051997-09-16 18:43:50 +0000640 return NULL;
Guido van Rossum7617e051997-09-16 18:43:50 +0000641 }
642 if (base == NULL)
643 base = PyExc_Exception;
Guido van Rossum2ac650f1997-10-03 19:50:55 +0000644 if (dict == NULL) {
645 dict = mydict = PyDict_New();
646 if (dict == NULL)
647 goto failure;
648 }
649 if (PyDict_GetItemString(dict, "__module__") == NULL) {
Neal Norwitzcd795962007-08-24 19:54:13 +0000650 modulename = PyUnicode_FromStringAndSize(name,
Thomas Wouters89f507f2006-12-13 04:49:30 +0000651 (Py_ssize_t)(dot-name));
Guido van Rossum2ac650f1997-10-03 19:50:55 +0000652 if (modulename == NULL)
653 goto failure;
654 if (PyDict_SetItemString(dict, "__module__", modulename) != 0)
655 goto failure;
656 }
Thomas Wouters477c8d52006-05-27 19:21:47 +0000657 if (PyTuple_Check(base)) {
658 bases = base;
659 /* INCREF as we create a new ref in the else branch */
660 Py_INCREF(bases);
661 } else {
662 bases = PyTuple_Pack(1, base);
663 if (bases == NULL)
664 goto failure;
665 }
666 /* Create a real new-style class. */
Guido van Rossume845c0f2007-11-02 23:07:07 +0000667 result = PyObject_CallFunction((PyObject *)&PyType_Type, "UOO",
Thomas Wouters477c8d52006-05-27 19:21:47 +0000668 dot+1, bases, dict);
Guido van Rossum7617e051997-09-16 18:43:50 +0000669 failure:
Guido van Rossum2ac650f1997-10-03 19:50:55 +0000670 Py_XDECREF(bases);
671 Py_XDECREF(mydict);
672 Py_XDECREF(classname);
673 Py_XDECREF(modulename);
Guido van Rossum7617e051997-09-16 18:43:50 +0000674 return result;
675}
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000676
677/* Call when an exception has occurred but there is no way for Python
678 to handle it. Examples: exception in __del__ or during GC. */
679void
680PyErr_WriteUnraisable(PyObject *obj)
681{
682 PyObject *f, *t, *v, *tb;
683 PyErr_Fetch(&t, &v, &tb);
684 f = PySys_GetObject("stderr");
Christian Heimes2be03732007-11-15 02:26:46 +0000685 if (f != NULL && f != Py_None) {
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000686 PyFile_WriteString("Exception ", f);
687 if (t) {
Thomas Wouters477c8d52006-05-27 19:21:47 +0000688 PyObject* moduleName;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000689 char* className;
690 assert(PyExceptionClass_Check(t));
691 className = PyExceptionClass_Name(t);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000692 if (className != NULL) {
693 char *dot = strrchr(className, '.');
694 if (dot != NULL)
695 className = dot+1;
696 }
697
698 moduleName = PyObject_GetAttrString(t, "__module__");
Brett Cannonbf364092006-03-01 04:25:17 +0000699 if (moduleName == NULL)
700 PyFile_WriteString("<unknown>", f);
701 else {
Neal Norwitzcd795962007-08-24 19:54:13 +0000702 char* modstr = PyUnicode_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +0000703 if (modstr &&
Georg Brandl1a3284e2007-12-02 09:40:06 +0000704 strcmp(modstr, "builtins") != 0)
Brett Cannonbf364092006-03-01 04:25:17 +0000705 {
706 PyFile_WriteString(modstr, f);
707 PyFile_WriteString(".", f);
708 }
709 }
710 if (className == NULL)
711 PyFile_WriteString("<unknown>", f);
712 else
713 PyFile_WriteString(className, f);
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000714 if (v && v != Py_None) {
715 PyFile_WriteString(": ", f);
716 PyFile_WriteObject(v, f, 0);
717 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000718 Py_XDECREF(moduleName);
Jeremy Hyltonb709df32000-09-01 02:47:25 +0000719 }
720 PyFile_WriteString(" in ", f);
721 PyFile_WriteObject(obj, f, 0);
722 PyFile_WriteString(" ignored\n", f);
723 PyErr_Clear(); /* Just in case */
724 }
725 Py_XDECREF(t);
726 Py_XDECREF(v);
727 Py_XDECREF(tb);
728}
Guido van Rossumcfd42b52000-12-15 21:58:52 +0000729
Armin Rigo092381a2003-10-25 14:29:27 +0000730extern PyObject *PyModule_GetWarningsModule(void);
Guido van Rossumcfd42b52000-12-15 21:58:52 +0000731
Guido van Rossum2fd45652001-02-28 21:46:24 +0000732
Martin v. Löwiscfeb3b62002-03-03 21:30:27 +0000733/* Set file and line information for the current exception.
734 If the exception is not a SyntaxError, also sets additional attributes
735 to make printing of exceptions believe it is a syntax error. */
Guido van Rossum2fd45652001-02-28 21:46:24 +0000736
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000737void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000738PyErr_SyntaxLocation(const char *filename, int lineno)
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000739{
740 PyObject *exc, *v, *tb, *tmp;
741
742 /* add attributes for the line number and filename for the error */
743 PyErr_Fetch(&exc, &v, &tb);
744 PyErr_NormalizeException(&exc, &v, &tb);
Thomas Wouters477c8d52006-05-27 19:21:47 +0000745 /* XXX check that it is, indeed, a syntax error. It might not
746 * be, though. */
Christian Heimes217cfd12007-12-02 14:31:20 +0000747 tmp = PyLong_FromLong(lineno);
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000748 if (tmp == NULL)
749 PyErr_Clear();
750 else {
751 if (PyObject_SetAttrString(v, "lineno", tmp))
752 PyErr_Clear();
753 Py_DECREF(tmp);
754 }
755 if (filename != NULL) {
Neal Norwitzcd795962007-08-24 19:54:13 +0000756 tmp = PyUnicode_FromString(filename);
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000757 if (tmp == NULL)
758 PyErr_Clear();
759 else {
760 if (PyObject_SetAttrString(v, "filename", tmp))
761 PyErr_Clear();
762 Py_DECREF(tmp);
763 }
764
765 tmp = PyErr_ProgramText(filename, lineno);
766 if (tmp) {
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000767 if (PyObject_SetAttrString(v, "text", tmp))
768 PyErr_Clear();
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000769 Py_DECREF(tmp);
770 }
771 }
Martin v. Löwiscfeb3b62002-03-03 21:30:27 +0000772 if (PyObject_SetAttrString(v, "offset", Py_None)) {
773 PyErr_Clear();
774 }
775 if (exc != PyExc_SyntaxError) {
776 if (!PyObject_HasAttrString(v, "msg")) {
777 tmp = PyObject_Str(v);
778 if (tmp) {
779 if (PyObject_SetAttrString(v, "msg", tmp))
780 PyErr_Clear();
781 Py_DECREF(tmp);
782 } else {
783 PyErr_Clear();
784 }
785 }
786 if (!PyObject_HasAttrString(v, "print_file_and_line")) {
787 if (PyObject_SetAttrString(v, "print_file_and_line",
788 Py_None))
789 PyErr_Clear();
790 }
791 }
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000792 PyErr_Restore(exc, v, tb);
793}
794
Guido van Rossumebe8f8a2007-10-10 18:53:36 +0000795/* Attempt to load the line of text that the exception refers to. If it
796 fails, it will return NULL but will not set an exception.
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000797
798 XXX The functionality of this function is quite similar to the
Guido van Rossumebe8f8a2007-10-10 18:53:36 +0000799 functionality in tb_displayline() in traceback.c. */
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000800
801PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +0000802PyErr_ProgramText(const char *filename, int lineno)
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000803{
804 FILE *fp;
805 int i;
806 char linebuf[1000];
807
Tim Petersa7444f42006-02-27 23:29:46 +0000808 if (filename == NULL || *filename == '\0' || lineno <= 0)
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000809 return NULL;
Jack Jansen7b8c7542002-04-14 20:12:41 +0000810 fp = fopen(filename, "r" PY_STDIOTEXTMODE);
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000811 if (fp == NULL)
812 return NULL;
813 for (i = 0; i < lineno; i++) {
814 char *pLastChar = &linebuf[sizeof(linebuf) - 2];
815 do {
816 *pLastChar = '\0';
Guido van Rossumebe8f8a2007-10-10 18:53:36 +0000817 if (Py_UniversalNewlineFgets(linebuf, sizeof linebuf,
818 fp, NULL) == NULL)
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000819 break;
820 /* fgets read *something*; if it didn't get as
821 far as pLastChar, it must have found a newline
Thomas Wouters477c8d52006-05-27 19:21:47 +0000822 or hit the end of the file; if pLastChar is \n,
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000823 it obviously found a newline; else we haven't
824 yet seen a newline, so must continue */
825 } while (*pLastChar != '\0' && *pLastChar != '\n');
826 }
827 fclose(fp);
828 if (i == lineno) {
829 char *p = linebuf;
Guido van Rossumebe8f8a2007-10-10 18:53:36 +0000830 PyObject *res;
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000831 while (*p == ' ' || *p == '\t' || *p == '\014')
832 p++;
Guido van Rossumebe8f8a2007-10-10 18:53:36 +0000833 res = PyUnicode_FromString(p);
834 if (res == NULL)
835 PyErr_Clear();
836 return res;
Jeremy Hyltonad3d3f22001-02-28 17:47:12 +0000837 }
838 return NULL;
839}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000840
841#ifdef __cplusplus
842}
843#endif