https://github.com/python/cpython/commit/67cdf27261bc3ee563285c1af6c7c73699b03604
commit: 67cdf27261bc3ee563285c1af6c7c73699b03604
branch: 3.13
author: Miss Islington (bot) <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-07-22T12:01:58+03:00
summary:

[3.13] gh-154435: Fix os.posix_fadvise() and os.posix_fallocate() on DragonFly 
BSD (GH-154436) (GH-154453)

They return -1 and set errno instead of returning the error number, so
OSError was raised with a meaningless error code.
(cherry picked from commit 08a0d10709f04cf03260e5e852381cecb1c531e1)

Co-authored-by: Serhiy Storchaka <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-07-22-10-30-08.gh-issue-154435.xCxm0T.rst
M Modules/posixmodule.c

diff --git 
a/Misc/NEWS.d/next/Library/2026-07-22-10-30-08.gh-issue-154435.xCxm0T.rst 
b/Misc/NEWS.d/next/Library/2026-07-22-10-30-08.gh-issue-154435.xCxm0T.rst
new file mode 100644
index 000000000000000..b468e929b1ca18b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-22-10-30-08.gh-issue-154435.xCxm0T.rst
@@ -0,0 +1,3 @@
+Fix :func:`os.posix_fadvise` and :func:`os.posix_fallocate` on DragonFly BSD:
+they raised :exc:`OSError` with a meaningless error code,
+because these functions return -1 and set ``errno`` there.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 00889f9cf6689c2..80ed575bb654f2a 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -12879,6 +12879,10 @@ os_posix_fallocate_impl(PyObject *module, int fd, 
Py_off_t offset,
         Py_BEGIN_ALLOW_THREADS
         result = posix_fallocate(fd, offset, length);
         Py_END_ALLOW_THREADS
+        // DragonFly BSD returns -1 and sets errno.
+        if (result == -1) {
+            result = errno;
+        }
     } while (result == EINTR && !(async_err = PyErr_CheckSignals()));
 
     if (result == 0)
@@ -12926,6 +12930,10 @@ os_posix_fadvise_impl(PyObject *module, int fd, 
Py_off_t offset,
         Py_BEGIN_ALLOW_THREADS
         result = posix_fadvise(fd, offset, length, advice);
         Py_END_ALLOW_THREADS
+        // DragonFly BSD returns -1 and sets errno.
+        if (result == -1) {
+            result = errno;
+        }
     } while (result == EINTR && !(async_err = PyErr_CheckSignals()));
 
     if (result == 0)

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to