| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent dc62b7e commit b082731
10 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -241,13 +241,30 @@ in various ways. There is a separate error indicator for each thread. | |||
| 241 | 241 | exception instance. | |
| 242 | 242 | ||
| 243 | 243 | ||
| 244 | + .. c:function:: PyObject* PyErr_SetFromErrnoWithFilenameObjects(PyObject *type, PyObject *filenameObject, PyObject *filenameObject2) | ||
| 245 | + | ||
| 246 | + Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but takes a second | ||
| 247 | + filename object, for raising errors when a function that takes two filenames | ||
| 248 | + fails. | ||
| 249 | + | ||
| 250 | + .. versionadded:: 3.4 | ||
| 251 | + | ||
| 252 | + | ||
| 244 | 253 | .. c:function:: PyObject* PyErr_SetFromErrnoWithFilename(PyObject *type, const char *filename) | |
| 245 | 254 | ||
| 246 | 255 | Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but the filename | |
| 247 | 256 | is given as a C string. *filename* is decoded from the filesystem encoding | |
| 248 | 257 | (:func:`os.fsdecode`). | |
| 249 | 258 | ||
| 250 | 259 | ||
| 260 | + .. c:function:: PyObject* PyErr_SetFromErrnoWithFilenames(PyObject *type, const char *filename, const char *filename2) | ||
| 261 | + | ||
| 262 | + Similar to :c:func:`PyErr_SetFromErrnoWithFilename`, but accepts a | ||
| 263 | + second filename. | ||
| 264 | + | ||
| 265 | + .. versionadded:: 3.4 | ||
| 266 | + | ||
| 267 | + | ||
| 251 | 268 | .. c:function:: PyObject* PyErr_SetFromWindowsErr(int ierr) | |
| 252 | 269 | ||
| 253 | 270 | This is a convenience function to raise :exc:`WindowsError`. If called with | |
@@ -266,33 +283,52 @@ in various ways. There is a separate error indicator for each thread. | |||
| 266 | 283 | specifying the exception type to be raised. Availability: Windows. | |
| 267 | 284 | ||
| 268 | 285 | ||
| 269 | - .. c:function:: PyObject* PyErr_SetFromWindowsErrWithFilenameObject(int ierr, PyObject *filenameObject) | ||
| 270 | - | ||
| 271 | - Similar to :c:func:`PyErr_SetFromWindowsErr`, with the additional behavior | ||
| 272 | - that if *filenameObject* is not *NULL*, it is passed to the constructor of | ||
| 273 | - :exc:`WindowsError` as a third parameter. Availability: Windows. | ||
| 274 | - | ||
| 275 | - | ||
| 276 | 286 | .. c:function:: PyObject* PyErr_SetFromWindowsErrWithFilename(int ierr, const char *filename) | |
| 277 | 287 | ||
| 278 | 288 | Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, but the | |
| 279 | 289 | filename is given as a C string. *filename* is decoded from the filesystem | |
| 280 | 290 | encoding (:func:`os.fsdecode`). Availability: Windows. | |
| 281 | 291 | ||
| 282 | 292 | ||
| 293 | + .. c:function:: PyObject* PyErr_SetFromWindowsErrWithFilenames(int ierr, const char *filename, const char *filename2) | ||
| 294 | + | ||
| 295 | + Similar to :c:func:`PyErr_SetFromWindowsErrWithFilename`, but accepts | ||
| 296 | + a second filename. Availability: Windows. | ||
| 297 | + | ||
| 298 | + .. versionadded:: 3.4 | ||
| 299 | + | ||
| 300 | + | ||
| 283 | 301 | .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenameObject(PyObject *type, int ierr, PyObject *filename) | |
| 284 | 302 | ||
| 285 | 303 | Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, with an | |
| 286 | 304 | additional parameter specifying the exception type to be raised. | |
| 287 | 305 | Availability: Windows. | |
| 288 | 306 | ||
| 289 | 307 | ||
| 308 | + .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenameObjects(PyObject *type, int ierr, PyObject *filename, PyObject *filename2) | ||
| 309 | + | ||
| 310 | + Similar to :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject`, | ||
| 311 | + but accepts a second filename object. | ||
| 312 | + Availability: Windows. | ||
| 313 | + | ||
| 314 | + .. versionadded:: 3.4 | ||
| 315 | + | ||
| 316 | + | ||
| 290 | 317 | .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, const char *filename) | |
| 291 | 318 | ||
| 292 | 319 | Similar to :c:func:`PyErr_SetFromWindowsErrWithFilename`, with an additional | |
| 293 | 320 | parameter specifying the exception type to be raised. Availability: Windows. | |
| 294 | 321 | ||
| 295 | 322 | ||
| 323 | + .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenames(PyObject *type, int ierr, const char *filename, const char *filename2) | ||
| 324 | + | ||
| 325 | + Similar to :c:func:`PyErr_SetExcFromWindowsErrWithFilename`, | ||
| 326 | + but accepts a second filename object. | ||
| 327 | + Availability: Windows. | ||
| 328 | + | ||
| 329 | + .. versionadded:: 3.4 | ||
| 330 | + | ||
| 331 | + | ||
| 296 | 332 | .. c:function:: PyObject* PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) | |
| 297 | 333 | ||
| 298 | 334 | This is a convenience function to raise :exc:`ImportError`. *msg* will be | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,7 +29,7 @@ | |||
| 29 | 29 | # reference to the item argument! | |
| 30 | 30 | ||
| 31 | 31 | # The parameter names are as they appear in the API manual, not the source | |
| 32 | - # code. | ||
| 32 | + # code. | ||
| 33 | 33 | ||
| 34 | 34 | PyBool_FromLong:PyObject*::+1: | |
| 35 | 35 | PyBool_FromLong:long:v:0: | |
@@ -317,20 +317,36 @@ PyErr_SetExcFromWindowsErrWithFilename:PyObject*:type:0: | |||
| 317 | 317 | PyErr_SetExcFromWindowsErrWithFilename:int:ierr:: | |
| 318 | 318 | PyErr_SetExcFromWindowsErrWithFilename:const char*:filename:: | |
| 319 | 319 | ||
| 320 | + PyErr_SetExcFromWindowsErrWithFilenames:PyObject*::null: | ||
| 321 | + PyErr_SetExcFromWindowsErrWithFilenames:PyObject*:type:0: | ||
| 322 | + PyErr_SetExcFromWindowsErrWithFilenames:int:ierr:: | ||
| 323 | + PyErr_SetExcFromWindowsErrWithFilenames:const char*:filename:: | ||
| 324 | + PyErr_SetExcFromWindowsErrWithFilenames:const char*:filename2:: | ||
| 325 | + | ||
| 320 | 326 | PyErr_SetFromErrno:PyObject*::null: | |
| 321 | 327 | PyErr_SetFromErrno:PyObject*:type:0: | |
| 322 | 328 | ||
| 323 | 329 | PyErr_SetFromErrnoWithFilename:PyObject*::null: | |
| 324 | 330 | PyErr_SetFromErrnoWithFilename:PyObject*:type:0: | |
| 325 | 331 | PyErr_SetFromErrnoWithFilename:const char*:filename:: | |
| 326 | 332 | ||
| 333 | + PyErr_SetFromErrnoWithFilenames:PyObject*::null: | ||
| 334 | + PyErr_SetFromErrnoWithFilenames:PyObject*:type:0: | ||
| 335 | + PyErr_SetFromErrnoWithFilenames:const char*:filename:: | ||
| 336 | + PyErr_SetFromErrnoWithFilenames:const char*:filename2:: | ||
| 337 | + | ||
| 327 | 338 | PyErr_SetFromWindowsErr:PyObject*::null: | |
| 328 | 339 | PyErr_SetFromWindowsErr:int:ierr:: | |
| 329 | 340 | ||
| 330 | 341 | PyErr_SetFromWindowsErrWithFilename:PyObject*::null: | |
| 331 | 342 | PyErr_SetFromWindowsErrWithFilename:int:ierr:: | |
| 332 | 343 | PyErr_SetFromWindowsErrWithFilename:const char*:filename:: | |
| 333 | 344 | ||
| 345 | + PyErr_SetFromWindowsErrWithFilenames:PyObject*::null: | ||
| 346 | + PyErr_SetFromWindowsErrWithFilenames:int:ierr:: | ||
| 347 | + PyErr_SetFromWindowsErrWithFilenames:const char*:filename:: | ||
| 348 | + PyErr_SetFromWindowsErrWithFilenames:const char*:filename2:: | ||
| 349 | + | ||
| 334 | 350 | PyErr_SetInterrupt:void::: | |
| 335 | 351 | ||
| 336 | 352 | PyErr_SetNone:void::: | |
@@ -907,7 +923,7 @@ PyNumber_Xor:PyObject*::+1: | |||
| 907 | 923 | PyNumber_Xor:PyObject*:o1:0: | |
| 908 | 924 | PyNumber_Xor:PyObject*:o2:0: | |
| 909 | 925 | ||
| 910 | - PyObject_AsFileDescriptor:int::: | ||
| 926 | + PyObject_AsFileDescriptor:int::: | ||
| 911 | 927 | PyObject_AsFileDescriptor:PyObject*:o:0: | |
| 912 | 928 | ||
| 913 | 929 | PyObject_Call:PyObject*::+1: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -253,6 +253,11 @@ The following exceptions are the exceptions that are usually raised. | |||
| 253 | 253 | For exceptions that involve a file system path (such as :func:`open` or | |
| 254 | 254 | :func:`os.unlink`), the exception instance will contain an additional | |
| 255 | 255 | attribute, :attr:`filename`, which is the file name passed to the function. | |
| 256 | + For functions that involve two file system paths (such as | ||
| 257 | + :func:`os.rename`), the exception instance will contain a second | ||
| 258 | + :attr:`filename2` attribute corresponding to the second file name passed | ||
| 259 | + to the function. | ||
| 260 | + | ||
| 256 | 261 | ||
| 257 | 262 | .. versionchanged:: 3.3 | |
| 258 | 263 | :exc:`EnvironmentError`, :exc:`IOError`, :exc:`WindowsError`, | |
@@ -263,7 +268,7 @@ The following exceptions are the exceptions that are usually raised. | |||
| 263 | 268 | ||
| 264 | 269 | The :attr:`filename` attribute is now the original file name passed to | |
| 265 | 270 | the function, instead of the name encoded to or decoded from the | |
| 266 | - filesystem encoding. | ||
| 271 | + filesystem encoding. Also, the :attr:`filename2` attribute was added. | ||
| 267 | 272 | ||
| 268 | 273 | ||
| 269 | 274 | .. exception:: OverflowError | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -53,6 +53,7 @@ typedef struct { | |||
| 53 | 53 | PyObject *myerrno; | |
| 54 | 54 | PyObject *strerror; | |
| 55 | 55 | PyObject *filename; | |
| 56 | + PyObject *filename2; | ||
| 56 | 57 | #ifdef MS_WINDOWS | |
| 57 | 58 | PyObject *winerror; | |
| 58 | 59 | #endif | |
@@ -225,13 +226,23 @@ PyAPI_FUNC(PyObject *) PyErr_NoMemory(void); | |||
| 225 | 226 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *); | |
| 226 | 227 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( | |
| 227 | 228 | PyObject *, PyObject *); | |
| 229 | + PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects( | ||
| 230 | + PyObject *, PyObject *, PyObject *); | ||
| 228 | 231 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename( | |
| 229 | 232 | PyObject *exc, | |
| 230 | 233 | const char *filename /* decoded from the filesystem encoding */ | |
| 231 | 234 | ); | |
| 235 | + PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenames( | ||
| 236 | + PyObject *exc, | ||
| 237 | + /* decoded from the filesystem encoding */ | ||
| 238 | + const char *filename, | ||
| 239 | + const char *filename2 | ||
| 240 | + ); | ||
| 232 | 241 | #if defined(MS_WINDOWS) && !defined(Py_LIMITED_API) | |
| 233 | 242 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( | |
| 234 | 243 | PyObject *, const Py_UNICODE *); | |
| 244 | + PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilenames( | ||
| 245 | + PyObject *, const Py_UNICODE *, const Py_UNICODE *); | ||
| 235 | 246 | #endif /* MS_WINDOWS */ | |
| 236 | 247 | ||
| 237 | 248 | PyAPI_FUNC(PyObject *) PyErr_Format( | |
@@ -245,22 +256,41 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( | |||
| 245 | 256 | int ierr, | |
| 246 | 257 | const char *filename /* decoded from the filesystem encoding */ | |
| 247 | 258 | ); | |
| 259 | + PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenames( | ||
| 260 | + int ierr, | ||
| 261 | + /* decoded from the filesystem encoding */ | ||
| 262 | + const char *filename, | ||
| 263 | + const char *filename2 | ||
| 264 | + ); | ||
| 248 | 265 | #ifndef Py_LIMITED_API | |
| 249 | 266 | /* XXX redeclare to use WSTRING */ | |
| 250 | 267 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( | |
| 251 | 268 | int, const Py_UNICODE *); | |
| 269 | + PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilenames( | ||
| 270 | + int, const Py_UNICODE *, const Py_UNICODE *); | ||
| 252 | 271 | #endif | |
| 253 | 272 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int); | |
| 254 | 273 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( | |
| 255 | 274 | PyObject *,int, PyObject *); | |
| 275 | + PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects( | ||
| 276 | + PyObject *,int, PyObject *, PyObject *); | ||
| 256 | 277 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( | |
| 257 | 278 | PyObject *exc, | |
| 258 | 279 | int ierr, | |
| 259 | 280 | const char *filename /* decoded from the filesystem encoding */ | |
| 260 | 281 | ); | |
| 282 | + PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenames( | ||
| 283 | + PyObject *exc, | ||
| 284 | + int ierr, | ||
| 285 | + /* decoded from the filesystem encoding */ | ||
| 286 | + const char *filename, | ||
| 287 | + const char *filename2 | ||
| 288 | + ); | ||
| 261 | 289 | #ifndef Py_LIMITED_API | |
| 262 | 290 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( | |
| 263 | 291 | PyObject *,int, const Py_UNICODE *); | |
| 292 | + PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilenames( | ||
| 293 | + PyObject *,int, const Py_UNICODE *, const Py_UNICODE *); | ||
| 264 | 294 | #endif | |
| 265 | 295 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int); | |
| 266 | 296 | #endif /* MS_WINDOWS */ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -266,8 +266,8 @@ def testAttributes(self): | |||
| 266 | 266 | (OSError, ('foo', 'bar', 'baz'), | |
| 267 | 267 | {'args' : ('foo', 'bar'), 'filename' : 'baz', | |
| 268 | 268 | 'errno' : 'foo', 'strerror' : 'bar'}), | |
| 269 | - (OSError, ('foo', 'bar', 'baz', 'quux'), | ||
| 270 | - {'args' : ('foo', 'bar', 'baz', 'quux')}), | ||
| 269 | + (OSError, ('foo', 'bar', 'baz', None, 'quux'), | ||
| 270 | + {'args' : ('foo', 'bar'), 'filename' : 'baz', 'filename2': 'quux'}), | ||
| 271 | 271 | (OSError, ('errnoStr', 'strErrorStr', 'filenameStr'), | |
| 272 | 272 | {'args' : ('errnoStr', 'strErrorStr'), | |
| 273 | 273 | 'strerror' : 'strErrorStr', 'errno' : 'errnoStr', | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1121,6 +1121,23 @@ def test_fs_holes(self): | |||
| 1121 | 1121 | # http://lists.freebsd.org/pipermail/freebsd-amd64/2012-January/014332.html | |
| 1122 | 1122 | raise unittest.SkipTest("OSError raised!") | |
| 1123 | 1123 | ||
| 1124 | + def test_path_error2(self): | ||
| 1125 | + """ | ||
| 1126 | + Test functions that call path_error2(), providing two filenames in their exceptions. | ||
| 1127 | + """ | ||
| 1128 | + for name in ("rename", "replace", "link", "symlink"): | ||
| 1129 | + function = getattr(os, name, None) | ||
| 1130 | + | ||
| 1131 | + if function: | ||
| 1132 | + for dst in ("noodly2", support.TESTFN): | ||
| 1133 | + try: | ||
| 1134 | + function('doesnotexistfilename', dst) | ||
| 1135 | + except OSError as e: | ||
| 1136 | + self.assertIn("'doesnotexistfilename' -> '{}'".format(dst), str(e)) | ||
| 1137 | + break | ||
| 1138 | + else: | ||
| 1139 | + self.fail("No valid path_error2() test for os." + name) | ||
| 1140 | + | ||
| 1124 | 1141 | class PosixGroupsTester(unittest.TestCase): | |
| 1125 | 1142 | ||
| 1126 | 1143 | def setUp(self): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -32,6 +32,9 @@ Core and Builtins | |||
| 32 | 32 | Library | |
| 33 | 33 | ------- | |
| 34 | 34 | ||
| 35 | + - Issue #20517: Functions in the os module that accept two filenames | ||
| 36 | + now register both filenames in the exception on failure. | ||
| 37 | + | ||
| 35 | 38 | - Issue #20563: The ipaddress module API is now considered stable. | |
| 36 | 39 | ||
| 37 | 40 | - Issue #14983: email.generator now always adds a line end after each MIME | |
@@ -236,6 +239,15 @@ Build | |||
| 236 | 239 | ||
| 237 | 240 | - Issue #20465: Update SQLite shipped with OS X installer to 3.8.3. | |
| 238 | 241 | ||
| 242 | + C-API | ||
| 243 | + ----- | ||
| 244 | + | ||
| 245 | + - Issue #20517: Added new functions allowing OSError exceptions to reference | ||
| 246 | + two filenames instead of one: PyErr_SetFromErrnoWithFilenameObjects(), | ||
| 247 | + PyErr_SetFromErrnoWithFilenames(), PyErr_SetFromWindowsErrWithFilenames(), | ||
| 248 | + PyErr_SetExcFromWindowsErrWithFilenameObjects(), and | ||
| 249 | + PyErr_SetExcFromWindowsErrWithFilenames(). | ||
| 250 | + | ||
| 239 | 251 | Documentation | |
| 240 | 252 | ------------- | |
| 241 | 253 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1313,6 +1313,19 @@ path_error(path_t *path) | |||
| 1313 | 1313 | } | |
| 1314 | 1314 | ||
| 1315 | 1315 | ||
| 1316 | + static PyObject * | ||
| 1317 | + path_error2(path_t *path, path_t *path2) | ||
| 1318 | + { | ||
| 1319 | + #ifdef MS_WINDOWS | ||
| 1320 | + return PyErr_SetExcFromWindowsErrWithFilenameObjects(PyExc_OSError, | ||
| 1321 | + 0, path->object, path2->object); | ||
| 1322 | + #else | ||
| 1323 | + return PyErr_SetFromErrnoWithFilenameObjects(PyExc_OSError, | ||
| 1324 | + path->object, path2->object); | ||
| 1325 | + #endif | ||
| 1326 | + } | ||
| 1327 | + | ||
| 1328 | + | ||
| 1316 | 1329 | /* POSIX generic methods */ | |
| 1317 | 1330 | ||
| 1318 | 1331 | static PyObject * | |
@@ -3518,7 +3531,7 @@ posix_link(PyObject *self, PyObject *args, PyObject *kwargs) | |||
| 3518 | 3531 | Py_END_ALLOW_THREADS | |
| 3519 | 3532 | ||
| 3520 | 3533 | if (!result) { | |
| 3521 | - return_value = path_error(&src); | ||
| 3534 | + return_value = path_error2(&src, &dst); | ||
| 3522 | 3535 | goto exit; | |
| 3523 | 3536 | } | |
| 3524 | 3537 | #else | |
@@ -3536,7 +3549,7 @@ posix_link(PyObject *self, PyObject *args, PyObject *kwargs) | |||
| 3536 | 3549 | Py_END_ALLOW_THREADS | |
| 3537 | 3550 | ||
| 3538 | 3551 | if (result) { | |
| 3539 | - return_value = path_error(&src); | ||
| 3552 | + return_value = path_error2(&src, &dst); | ||
| 3540 | 3553 | goto exit; | |
| 3541 | 3554 | } | |
| 3542 | 3555 | #endif | |
@@ -4284,7 +4297,7 @@ internal_rename(PyObject *args, PyObject *kwargs, int is_replace) | |||
| 4284 | 4297 | Py_END_ALLOW_THREADS | |
| 4285 | 4298 | ||
| 4286 | 4299 | if (!result) { | |
| 4287 | - return_value = path_error(&src); | ||
| 4300 | + return_value = path_error2(&src, &dst); | ||
| 4288 | 4301 | goto exit; | |
| 4289 | 4302 | } | |
| 4290 | 4303 | ||
@@ -4299,7 +4312,7 @@ internal_rename(PyObject *args, PyObject *kwargs, int is_replace) | |||
| 4299 | 4312 | Py_END_ALLOW_THREADS | |
| 4300 | 4313 | ||
| 4301 | 4314 | if (result) { | |
| 4302 | - return_value = path_error(&src); | ||
| 4315 | + return_value = path_error2(&src, &dst); | ||
| 4303 | 4316 | goto exit; | |
| 4304 | 4317 | } | |
| 4305 | 4318 | #endif | |
@@ -7345,7 +7358,7 @@ posix_symlink(PyObject *self, PyObject *args, PyObject *kwargs) | |||
| 7345 | 7358 | Py_END_ALLOW_THREADS | |
| 7346 | 7359 | ||
| 7347 | 7360 | if (!result) { | |
| 7348 | - return_value = path_error(&src); | ||
| 7361 | + return_value = path_error2(&src, &dst); | ||
| 7349 | 7362 | goto exit; | |
| 7350 | 7363 | } | |
| 7351 | 7364 | ||
@@ -7361,7 +7374,7 @@ posix_symlink(PyObject *self, PyObject *args, PyObject *kwargs) | |||
| 7361 | 7374 | Py_END_ALLOW_THREADS | |
| 7362 | 7375 | ||
| 7363 | 7376 | if (result) { | |
| 7364 | - return_value = path_error(&src); | ||
| 7377 | + return_value = path_error2(&src, &dst); | ||
| 7365 | 7378 | goto exit; | |
| 7366 | 7379 | } | |
| 7367 | 7380 | #endif | |
| Back | FazBrowse Home | New Git URL |
0 commit comments