#define ck_subr pPerl->Perl_ck_subr
#undef ck_svconst
#define ck_svconst pPerl->Perl_ck_svconst
+#undef ck_sysread
+#define ck_sysread pPerl->Perl_ck_sysread
#undef ck_trunc
#define ck_trunc pPerl->Perl_ck_trunc
#undef condpair_magic
#define ck_split Perl_ck_split
#define ck_subr Perl_ck_subr
#define ck_svconst Perl_ck_svconst
+#define ck_sysread Perl_ck_sysread
#define ck_trunc Perl_ck_trunc
#define compl_amg Perl_compl_amg
#define concat_amg Perl_concat_amg
ck_split
ck_subr
ck_svconst
+ck_sysread
ck_trunc
condpair_magic
convert
ck_select, /* sselect */
ck_select, /* select */
ck_eof, /* getc */
- ck_fun, /* read */
+ ck_sysread, /* read */
ck_fun, /* enterwrite */
ck_null, /* leavewrite */
ck_listiob, /* prtf */
ck_listiob, /* print */
ck_fun, /* sysopen */
ck_fun, /* sysseek */
- ck_fun, /* sysread */
+ ck_sysread, /* sysread */
ck_fun, /* syswrite */
ck_fun, /* send */
- ck_fun, /* recv */
+ ck_sysread, /* recv */
ck_eof, /* eof */
ck_fun, /* tell */
ck_fun, /* seek */
#define ck_subr CPerlObj::Perl_ck_subr
#undef ck_svconst
#define ck_svconst CPerlObj::Perl_ck_svconst
+#undef ck_sysread
+#define ck_sysread CPerlObj::Perl_ck_sysread
#undef ck_trunc
#define ck_trunc CPerlObj::Perl_ck_trunc
#undef convert
}
OP *
+ck_sysread(OP *o)
+{
+ if (o->op_flags & OPf_KIDS) {
+ /* get past pushmark */
+ OP *kid = cLISTOPo->op_first->op_sibling;
+ if (kid && (kid = kid->op_sibling)) {
+ switch (kid->op_type) {
+ case OP_HELEM:
+ case OP_AELEM:
+ case OP_SASSIGN:
+ case OP_AELEMFAST:
+ case OP_RV2SV:
+ case OP_PADSV:
+ break;
+ default:
+ bad_type(2, "scalar", op_desc[o->op_type], kid);
+ }
+ }
+ }
+ return ck_fun(o);
+}
+
+OP *
ck_trunc(OP *o)
{
if (o->op_flags & OPf_KIDS) {
case OP_PADAV:
if (o->op_next->op_type == OP_RV2AV
- && (o->op_next->op_flags && OPf_REF))
+ && (o->op_next->op_flags & OPf_REF))
{
null(o->op_next);
o->op_next = o->op_next->op_next;
case OP_PADHV:
if (o->op_next->op_type == OP_RV2HV
- && (o->op_next->op_flags && OPf_REF))
+ && (o->op_next->op_flags & OPf_REF))
{
null(o->op_next);
o->op_next = o->op_next->op_next;
OP * ck_split _((OP* o));
OP * ck_subr _((OP* o));
OP * ck_svconst _((OP* o));
+OP * ck_sysread _((OP* o));
OP * ck_trunc _((OP* o));
OP * pp_null _((ARGSproto));
ck_select, /* sselect */
ck_select, /* select */
ck_eof, /* getc */
- ck_fun, /* read */
+ ck_sysread, /* read */
ck_fun, /* enterwrite */
ck_null, /* leavewrite */
ck_listiob, /* prtf */
ck_listiob, /* print */
ck_fun, /* sysopen */
ck_fun, /* sysseek */
- ck_fun, /* sysread */
+ ck_sysread, /* sysread */
ck_fun, /* syswrite */
ck_fun, /* send */
- ck_fun, /* recv */
+ ck_sysread, /* recv */
ck_eof, /* eof */
ck_fun, /* tell */
ck_fun, /* seek */
select select ck_select st@ F?
getc getc ck_eof st% F?
-read read ck_fun imst@ F R S S?
+read read ck_sysread imst@ F R S S?
enterwrite write ck_fun dis% F?
leavewrite write exit ck_null 1
sysopen sysopen ck_fun s@ F S S S?
sysseek sysseek ck_fun s@ F S S
-sysread sysread ck_fun imst@ F R S S?
+sysread sysread ck_sysread imst@ F R S S?
syswrite syswrite ck_fun imst@ F S S S?
send send ck_fun imst@ F S S S?
-recv recv ck_fun imst@ F R S S
+recv recv ck_sysread imst@ F R S S
eof eof ck_eof is% F?
tell tell ck_fun st% F?
OP *ck_split _((OP *o));
OP *ck_subr _((OP *o));
OP *ck_svconst _((OP *o));
+OP *ck_sysread _((OP *o));
OP *ck_trunc _((OP *o));
void unwind_handler_stack _((void *p));
void restore_magic _((void *p));