PerlIO * xio_ofp; /* but sockets need separate streams */
/* Cray addresses everything by word boundaries (64 bits) and
* code and data pointers cannot be mixed (which is exactly what
- * Perl_filter_add() tries to do), hence the following
+ * Perl_filter_add() tries to do with the dirp), hence the following
* union trick (as suggested by Gurusamy Sarathy).
* For further information see Geir Johansen's problem report titled
[ID 20000612.002] Perl problem on Cray system
+ * The any pointer (known as IoANY()) will also be a good place
+ * to hang any IO disciplines to.
*/
union {
DIR * xiou_dirp; /* for opendir, readdir, etc */
- void * xiou_dummy; /* for alignment */
+ void * xiou_any; /* for alignment */
} xio_dirpu;
long xio_lines; /* $. */
long xio_page; /* $% */
char xio_type;
char xio_flags;
};
-#define xio_dirp xio_dirpu.xiou_dirp
+#define xio_dirp xio_dirpu.xiou_dirp
+#define xio_any xio_dirpu.xiou_any
#define IOf_ARGV 1 /* this fp iterates over ARGV */
#define IOf_START 2 /* check for null ARGV and substitute '-' */
#define IoIFP(sv) ((XPVIO*) SvANY(sv))->xio_ifp
#define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp
#define IoDIRP(sv) ((XPVIO*) SvANY(sv))->xio_dirp
+#define IoANY(sv) ((XPVIO*) SvANY(sv))->xio_any
#define IoLINES(sv) ((XPVIO*) SvANY(sv))->xio_lines
#define IoPAGE(sv) ((XPVIO*) SvANY(sv))->xio_page
#define IoPAGE_LEN(sv) ((XPVIO*) SvANY(sv))->xio_page_len