1. Why have you changed the size of unbuf[] from 2 to 8?

2. To support temporary files I'd ask about some thoughts of mine:
2aa) extend the fopen() interface, e.g. '!' character in mode string, that
causes to store the filename;
2ab) assume that fopen() returns the FILE* pointer that's the head of _IO_list
and store the filename after fopen() returned.

2ba) use an overlayed structure like:
	struct XFILE {
		struct FILE fp;
		char *filename;
	};
Then one bit of the mode field would specify if the FILE* pointer is
an extended one or not.
it's ANSI compliant to assume that:
offsetof(struct FILE, *) == offsetof(struct XFILE, fp.*)
So one could realloc() the FILE* created by fopen().
2bb) a new member of FILE.

2ca) use (char*)filename & strdup() the filename
2cb) use char filename[] and automatically adjust the size of the allocated
FILE structure to store the filename into the field.

3) Should we link stderr to stdin, too, in case someone assigns
a buffer to stderr?
