static void
S_io_hints(pTHX_ OP *o)
{
+#ifdef PERLIO_BINARY_AND_TEXT_DIFFERENT_AND_EFFECTIVE
HV * const table =
PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;;
if (table) {
o->op_private |= OPpOPEN_OUT_CRLF;
}
}
+#else
+ PERL_UNUSED_ARG(o);
+#endif
}
OP *
#endif
#if O_TEXT != O_BINARY
- /* If you have different O_TEXT and O_BINARY and you are a CLRF shop,
+ /* If you have different O_TEXT and O_BINARY and you are a CRLF shop,
* that is, you are somehow DOSish. */
# if defined(__HAIKU__) || defined(__VOS__) || defined(__CYGWIN__)
/* Haiku has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no effect;
/* If you really are DOSish. */
# define PERLIO_USING_CRLF 1
# endif
+# if O_TEXT != 0 && O_BINARY != 0
+# if !defined(__HAIKU__)
+ /* If you have O_TEXT different from your O_BINARY and
+ * they are both not zero (being zero would make testing
+ * with bit-and interesting) and they have an effect. */
+# define PERLIO_BINARY_AND_TEXT_DIFFERENT_AND_EFFECTIVE
+# endif
+# endif
#endif
#ifdef I_LIBUTIL
mode[ix++] = '+';
}
}
+#ifdef PERLIO_BINARY_AND_TEXT_DIFFERENT_AND_EFFECTIVE
if (rawmode & O_BINARY)
mode[ix++] = 'b';
+#endif
mode[ix] = '\0';
return ptype;
}
oflags |= O_WRONLY;
break;
}
+#ifdef PERLIO_BINARY_AND_TEXT_DIFFERENT_AND_EFFECTIVE
if (*mode == 'b') {
oflags |= O_BINARY;
oflags &= ~O_TEXT;
mode++;
}
else {
-#ifdef PERLIO_USING_CRLF
/*
* If neither "t" nor "b" was specified, open the file
* in O_BINARY mode.
*/
oflags |= O_BINARY;
-#endif
}
+#endif
if (*mode || oflags == -1) {
SETERRNO(EINVAL, LIB_INVARG);
oflags = -1;