diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1998-07-05 06:27:37 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-07-05 06:27:37 +0000 |
commit | 5081475eefaf24307ce7eaf4c87aafd588b37e98 (patch) | |
tree | 744b428598c31382b30b98187d16cb837b6db9ec | |
parent | f6f9bdb7c056c5766371aa31d1a898fb878f3de5 (diff) | |
download | perl-5081475eefaf24307ce7eaf4c87aafd588b37e98.tar.gz |
add ck_sysread() for better sysread/read/recv sanity
p4raw-id: //depot/perl@1319
-rw-r--r-- | ObjXSub.h | 2 | ||||
-rw-r--r-- | embed.h | 1 | ||||
-rw-r--r-- | global.sym | 1 | ||||
-rw-r--r-- | globals.c | 6 | ||||
-rw-r--r-- | objpp.h | 2 | ||||
-rw-r--r-- | op.c | 27 | ||||
-rw-r--r-- | opcode.h | 7 | ||||
-rwxr-xr-x | opcode.pl | 6 | ||||
-rw-r--r-- | proto.h | 1 |
9 files changed, 42 insertions, 11 deletions
@@ -801,6 +801,8 @@ #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 @@ -103,6 +103,7 @@ #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 diff --git a/global.sym b/global.sym index 44c8dbcc3b..2690ea8887 100644 --- a/global.sym +++ b/global.sym @@ -232,6 +232,7 @@ ck_spair ck_split ck_subr ck_svconst +ck_sysread ck_trunc condpair_magic convert @@ -898,17 +898,17 @@ OP * (CPERLscope(*check)[]) _((OP *op)) = { 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 */ @@ -153,6 +153,8 @@ #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 @@ -4863,6 +4863,29 @@ ck_svconst(OP *o) } 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) { @@ -4974,7 +4997,7 @@ peep(register OP *o) 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; @@ -4983,7 +5006,7 @@ peep(register OP *o) 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; @@ -1095,6 +1095,7 @@ OP * ck_spair _((OP* o)); 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)); @@ -2009,17 +2010,17 @@ EXT OP * (CPERLscope(*check)[]) _((OP *op)) = { 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 */ @@ -496,7 +496,7 @@ sselect select system call ck_select t@ S S S S 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 @@ -505,11 +505,11 @@ print print ck_listiob ims@ F? L 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? @@ -1205,6 +1205,7 @@ OP *ck_sort _((OP *o)); 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)); |