Message23328
Logged In: YES
user_id=41497
Hi,
I submitted the original report (and text above).
The patch that just calls fflush is not enough, as the second sample script illustrates.
Here's a patch that does a little better
--- Python/sysmodule.c.~2.126.~ 2004-08-12 20:19:17.000000000 +0200
+++ Python/sysmodule.c 2004-12-02 09:59:09.058953816 +0100
@@ -927,6 +927,13 @@ settrace() -- set the global debug traci
)
/* end of sys_doc */ ;
+static int
+_check_and_flush (FILE *stream)
+{
+ int prev_fail = ferror (stream);
+ return fflush (stream) || prev_fail ? EOF : 0;
+}
+
PyObject *
_PySys_Init(void)
{
@@ -941,8 +948,8 @@ _PySys_Init(void)
sysdict = PyModule_GetDict(m);
sysin = PyFile_FromFile(stdin, "<stdin>", "r", NULL);
- sysout = PyFile_FromFile(stdout, "<stdout>", "w", NULL);
- syserr = PyFile_FromFile(stderr, "<stderr>", "w", NULL);
+ sysout = PyFile_FromFile(stdout, "<stdout>", "w", _check_and_flush);
+ syserr = PyFile_FromFile(stderr, "<stderr>", "w", _check_and_flush);
if (PyErr_Occurred())
return NULL;
#ifdef MS_WINDOWS
With that patch, the failing script now evokes a diagnostic
and nonzero exit.
$ ./python write-4096 > /dev/full
write failed: (0, 'Error')
But, as you can see, the diagnostic leaves a lot to be desired.
It should say ``write failes: [Errno 28] No space left on device''.
It'll take a more significant change to propagate errno from the
failing fputs/fwrite/etc. to where it can be used.
Jim@meyering.net |
|
Date |
User |
Action |
Args |
2007-08-23 14:27:49 | admin | link | issue1074011 messages |
2007-08-23 14:27:49 | admin | create | |
|