summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xopcode.pl3
-rw-r--r--toke.c1
2 files changed, 3 insertions, 1 deletions
diff --git a/opcode.pl b/opcode.pl
index 2c2bc50a50..50cf214821 100755
--- a/opcode.pl
+++ b/opcode.pl
@@ -477,7 +477,8 @@ recv recv ck_fun imst F R S S
eof eof ck_eof is F?
tell tell ck_fun st F?
seek seek ck_fun s F S S
-truncate truncate ck_trunc is F S
+# truncate really behaves as if it had both "S S" and "F S"
+truncate truncate ck_trunc is S S
fcntl fcntl ck_fun st F S S
ioctl ioctl ck_fun st F S S
diff --git a/toke.c b/toke.c
index ccd4aed92f..6c4b7cdd69 100644
--- a/toke.c
+++ b/toke.c
@@ -2516,6 +2516,7 @@ yylex()
if (hints & HINT_STRICT_SUBS &&
lastchar != '-' &&
strnNE(s,"->",2) &&
+ last_lop_op != OP_TRUNCATE && /* S/F prototype in opcode.pl */
last_lop_op != OP_ACCEPT &&
last_lop_op != OP_PIPE_OP &&
last_lop_op != OP_SOCKPAIR)