Issue 4957
Let os.ftruncate raise OSError like documented.
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 2c9d9bf..5c94d7d 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -570,10 +570,9 @@
         if hasattr(os, "fpathconf"):
             self.assertRaises(OSError, os.fpathconf, 10, "PC_NAME_MAX")
 
-    #this is a weird one, it raises IOError unlike the others
     def test_ftruncate(self):
         if hasattr(os, "ftruncate"):
-            self.assertRaises(IOError, os.ftruncate, 10, 0)
+            self.assertRaises(OSError, os.ftruncate, 10, 0)
 
     def test_lseek(self):
         if hasattr(os, "lseek"):
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index a1c3444..915d30d 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -6633,7 +6633,7 @@
 	res = ftruncate(fd, length);
 	Py_END_ALLOW_THREADS
 	if (res < 0) {
-		PyErr_SetFromErrno(PyExc_IOError);
+		posix_error();
 		return NULL;
 	}
 	Py_INCREF(Py_None);