This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
pp_leavewrite wasn't warning for unopened handles unless 'closed' was enabled.
[perl5.git] / t / lib / warnings / pp_sys
1   pp_sys.c      AOK
2
3   untie attempted while %d inner references still exist [pp_untie]
4     sub TIESCALAR { bless [] } ; tie $a, 'main'; untie $a ;
5
6   fileno() on unopened filehandle abc           [pp_fileno]
7     $a = "abc"; fileno($a)
8
9   binmode() on unopened filehandle abc          [pp_binmode]
10     $a = "abc"; fileno($a)
11
12   printf() on unopened filehandle abc           [pp_prtf]
13     $a = "abc"; printf $a "fred"
14
15   Filehandle %s opened only for input           [pp_leavewrite]
16     format STDIN =
17     .
18     write STDIN;
19
20   write() on closed filehandle %s               [pp_leavewrite]
21     format STDIN =
22     .
23     close STDIN;
24     write STDIN ;
25
26   page overflow                                 [pp_leavewrite]
27
28   printf() on unopened filehandle abc           [pp_prtf]
29     $a = "abc"; printf $a "fred"
30
31   Filehandle %s opened only for input           [pp_prtf]
32     $a = "abc"; 
33     printf $a "fred"
34
35   printf() on closed filehandle %s              [pp_prtf]
36     close STDIN ;
37     printf STDIN "fred"
38
39   syswrite() on closed filehandle %s            [pp_send]
40     close STDIN; 
41     syswrite STDIN, "fred", 1;
42
43   send() on closed socket %s                    [pp_send]
44     close STDIN; 
45     send STDIN, "fred", 1
46
47   bind() on closed socket %s                    [pp_bind]
48     close STDIN; 
49     bind STDIN, "fred" ;
50
51
52   connect() on closed socket %s                 [pp_connect]
53     close STDIN; 
54     connect STDIN, "fred" ;
55
56   listen() on closed socket %s                  [pp_listen]
57     close STDIN; 
58     listen STDIN, 2;
59
60   accept() on closed socket %s                  [pp_accept]
61     close STDIN; 
62     accept "fred", STDIN ;
63
64   shutdown() on closed socket %s                [pp_shutdown]
65     close STDIN; 
66     shutdown STDIN, 0;
67
68   setsockopt() on closed socket %s              [pp_ssockopt]
69   getsockopt() on closed socket %s              [pp_ssockopt]
70     close STDIN; 
71     setsockopt STDIN, 1,2,3;
72     getsockopt STDIN, 1,2;
73
74   getsockname() on closed socket %s             [pp_getpeername]
75   getpeername() on closed socket %s             [pp_getpeername]
76     close STDIN; 
77     getsockname STDIN;
78     getpeername STDIN;
79
80   flock() on closed socket %s                   [pp_flock]
81   flock() on closed socket                      [pp_flock]
82     close STDIN;
83     flock STDIN, 8;
84     flock $a, 8;
85
86   warn(warn_nl, "stat");                        [pp_stat]
87
88   -T on closed filehandle %s
89   stat() on closed filehandle %s
90         close STDIN ; -T STDIN ; stat(STDIN) ;
91
92   warn(warn_nl, "open");                        [pp_fttext]
93     -T "abc\ndef" ;
94
95   Filehandle %s opened only for output          [pp_sysread]
96         my $file = "./xcv" ;
97         open(F, ">$file") ; 
98         my $a = sysread(F, $a,10) ;
99
100   lstat on filehandle %s                        [pp_lstat]
101
102   getc() on unopened filehandle                 [pp_getc]
103
104   getc() on closed filehandle                   [pp_getc]
105
106   Non-string passed as bitmask                  [pp_sselect]
107
108 __END__
109 # pp_sys.c [pp_untie]
110 use warnings 'untie' ;
111 sub TIESCALAR { bless [] } ; 
112 $b = tie $a, 'main'; 
113 untie $a ;
114 no warnings 'untie' ;
115 $c = tie $d, 'main'; 
116 untie $d ;
117 EXPECT
118 untie attempted while 1 inner references still exist at - line 5.
119 ########
120 # pp_sys.c [pp_leavewrite]
121 use warnings 'io' ;
122 format STDIN =
123 .
124 write STDIN;
125 no warnings 'io' ;
126 write STDIN;
127 EXPECT
128 Filehandle STDIN opened only for input at - line 5.
129 ########
130 # pp_sys.c [pp_leavewrite]
131 use warnings 'closed' ;
132 format STDIN =
133 .
134 format FOO =
135 .
136 close STDIN;
137 write STDIN;
138 write FOO;
139 opendir STDIN, ".";
140 write STDIN;
141 closedir STDIN;
142 opendir FOO, ".";
143 write FOO;
144 closedir FOO;
145 no warnings 'closed' ;
146 write STDIN;
147 write FOO;
148 opendir STDIN, ".";
149 opendir FOO, ".";
150 write STDIN;
151 write FOO;
152 EXPECT
153 write() on closed filehandle STDIN at - line 8.
154 write() on closed filehandle STDIN at - line 11.
155         (Are you trying to call write() on dirhandle STDIN?)
156 ########
157 ########
158 # pp_sys.c [pp_leavewrite]
159 use warnings 'unopened';
160 format STDIN =
161 .
162 format FOO =
163 .
164 close STDIN;
165 write STDIN;
166 write FOO;
167 opendir STDIN, ".";
168 write STDIN;
169 closedir STDIN;
170 opendir FOO, ".";
171 write FOO;
172 closedir FOO;
173 no warnings 'unopened';
174 write STDIN;
175 write FOO;
176 opendir STDIN, ".";
177 opendir FOO, ".";
178 write STDIN;
179 write FOO;
180 EXPECT
181 write() on unopened filehandle FOO at - line 10.
182 write() on unopened filehandle FOO at - line 15.
183         (Are you trying to call write() on dirhandle FOO?)
184 ########
185 # pp_sys.c [pp_leavewrite]
186 use warnings 'io' ;
187 format STDOUT_TOP =
188 abc
189 .
190 format STDOUT =
191 def
192 ghi
193 .
194 $= = 1 ;
195 $- =1 ;
196 open STDOUT, ">".($^O eq 'VMS'? 'NL:' : '/dev/null') ;
197 write ;
198 no warnings 'io' ;
199 write ;
200 EXPECT
201 page overflow at - line 13.
202 ########
203 # pp_sys.c [pp_prtf]
204 use warnings 'unopened' ;
205 $a = "abc"; 
206 printf $a "fred";
207 no warnings 'unopened' ;
208 printf $a "fred";
209 EXPECT
210 printf() on unopened filehandle abc at - line 4.
211 ########
212 # pp_sys.c [pp_prtf]
213 use warnings 'closed' ;
214 close STDIN ;
215 printf STDIN "fred";
216 opendir STDIN, ".";
217 printf STDIN "fred";
218 closedir STDIN;
219 no warnings 'closed' ;
220 printf STDIN "fred";
221 opendir STDIN, ".";
222 printf STDIN "fred";
223 EXPECT
224 printf() on closed filehandle STDIN at - line 4.
225 printf() on closed filehandle STDIN at - line 6.
226         (Are you trying to call printf() on dirhandle STDIN?)
227 ########
228 # pp_sys.c [pp_prtf]
229 use warnings 'io' ;
230 printf STDIN "fred";
231 no warnings 'io' ;
232 printf STDIN "fred";
233 EXPECT
234 Filehandle STDIN opened only for input at - line 3.
235 ########
236 # pp_sys.c [pp_send]
237 use warnings 'io' ;
238 syswrite STDIN, "fred";
239 no warnings 'io' ;
240 syswrite STDIN, "fred";
241 EXPECT
242 Filehandle STDIN opened only for input at - line 3.
243 ########
244 # pp_sys.c [pp_send]
245 use warnings 'closed' ;
246 close STDIN; 
247 syswrite STDIN, "fred", 1;
248 opendir STDIN, ".";
249 syswrite STDIN, "fred", 1;
250 closedir STDIN;
251 no warnings 'closed' ;
252 syswrite STDIN, "fred", 1;
253 opendir STDIN, ".";
254 syswrite STDIN, "fred", 1;
255 EXPECT
256 syswrite() on closed filehandle STDIN at - line 4.
257 syswrite() on closed filehandle STDIN at - line 6.
258         (Are you trying to call syswrite() on dirhandle STDIN?)
259 ########
260 # pp_sys.c [pp_flock]
261 use Config; 
262 BEGIN { 
263   if ( !$Config{d_flock} &&
264        !$Config{d_fcntl_can_lock} &&
265        !$Config{d_lockf} ) {
266     print <<EOM ;
267 SKIPPED
268 # flock not present
269 EOM
270     exit ;
271   } 
272 }
273 use warnings qw(unopened closed);
274 close STDIN;
275 flock STDIN, 8;
276 opendir STDIN, ".";
277 flock STDIN, 8;
278 flock FOO, 8;
279 flock $a, 8;
280 no warnings qw(unopened closed);
281 flock STDIN, 8;
282 opendir STDIN, ".";
283 flock STDIN, 8;
284 flock FOO, 8;
285 flock $a, 8;
286 EXPECT
287 flock() on closed filehandle STDIN at - line 16.
288 flock() on closed filehandle STDIN at - line 18.
289         (Are you trying to call flock() on dirhandle STDIN?)
290 flock() on unopened filehandle FOO at - line 19.
291 flock() on unopened filehandle at - line 20.
292 ########
293 # pp_sys.c [pp_prtf pp_send pp_bind pp_connect pp_listen pp_accept pp_shutdown pp_ssockopt ppp_getpeername]
294 use warnings 'io' ;
295 use Config; 
296 BEGIN { 
297   if ( $^O ne 'VMS' and ! $Config{d_socket}) {
298     print <<EOM ;
299 SKIPPED
300 # send not present
301 # bind not present
302 # connect not present
303 # accept not present
304 # shutdown not present
305 # setsockopt not present
306 # getsockopt not present
307 # getsockname not present
308 # getpeername not present
309 EOM
310     exit ;
311   } 
312 }
313 close STDIN; 
314 send STDIN, "fred", 1;
315 bind STDIN, "fred" ;
316 connect STDIN, "fred" ;
317 listen STDIN, 2;
318 accept "fred", STDIN;
319 shutdown STDIN, 0;
320 setsockopt STDIN, 1,2,3;
321 getsockopt STDIN, 1,2;
322 getsockname STDIN;
323 getpeername STDIN;
324 opendir STDIN, ".";
325 send STDIN, "fred", 1;
326 bind STDIN, "fred" ;
327 connect STDIN, "fred" ;
328 listen STDIN, 2;
329 accept "fred", STDIN;
330 shutdown STDIN, 0;
331 setsockopt STDIN, 1,2,3;
332 getsockopt STDIN, 1,2;
333 getsockname STDIN;
334 getpeername STDIN;
335 closedir STDIN;
336 no warnings 'io' ;
337 send STDIN, "fred", 1;
338 bind STDIN, "fred" ;
339 connect STDIN, "fred" ;
340 listen STDIN, 2;
341 accept STDIN, "fred" ;
342 shutdown STDIN, 0;
343 setsockopt STDIN, 1,2,3;
344 getsockopt STDIN, 1,2;
345 getsockname STDIN;
346 getpeername STDIN;
347 opendir STDIN, ".";
348 send STDIN, "fred", 1;
349 bind STDIN, "fred" ;
350 connect STDIN, "fred" ;
351 listen STDIN, 2;
352 accept "fred", STDIN;
353 shutdown STDIN, 0;
354 setsockopt STDIN, 1,2,3;
355 getsockopt STDIN, 1,2;
356 getsockname STDIN;
357 getpeername STDIN;
358 EXPECT
359 send() on closed socket STDIN at - line 22.
360 bind() on closed socket STDIN at - line 23.
361 connect() on closed socket STDIN at - line 24.
362 listen() on closed socket STDIN at - line 25.
363 accept() on closed socket STDIN at - line 26.
364 shutdown() on closed socket STDIN at - line 27.
365 setsockopt() on closed socket STDIN at - line 28.
366 getsockopt() on closed socket STDIN at - line 29.
367 getsockname() on closed socket STDIN at - line 30.
368 getpeername() on closed socket STDIN at - line 31.
369 send() on closed socket STDIN at - line 33.
370         (Are you trying to call send() on dirhandle STDIN?)
371 bind() on closed socket STDIN at - line 34.
372         (Are you trying to call bind() on dirhandle STDIN?)
373 connect() on closed socket STDIN at - line 35.
374         (Are you trying to call connect() on dirhandle STDIN?)
375 listen() on closed socket STDIN at - line 36.
376         (Are you trying to call listen() on dirhandle STDIN?)
377 accept() on closed socket STDIN at - line 37.
378         (Are you trying to call accept() on dirhandle STDIN?)
379 shutdown() on closed socket STDIN at - line 38.
380         (Are you trying to call shutdown() on dirhandle STDIN?)
381 setsockopt() on closed socket STDIN at - line 39.
382         (Are you trying to call setsockopt() on dirhandle STDIN?)
383 getsockopt() on closed socket STDIN at - line 40.
384         (Are you trying to call getsockopt() on dirhandle STDIN?)
385 getsockname() on closed socket STDIN at - line 41.
386         (Are you trying to call getsockname() on dirhandle STDIN?)
387 getpeername() on closed socket STDIN at - line 42.
388         (Are you trying to call getpeername() on dirhandle STDIN?)
389 ########
390 # pp_sys.c [pp_stat]
391 use warnings 'newline' ;
392 stat "abc\ndef";
393 no warnings 'newline' ;
394 stat "abc\ndef";
395 EXPECT
396 Unsuccessful stat on filename containing newline at - line 3.
397 ########
398 # pp_sys.c [pp_fttext]
399 use warnings qw(unopened closed) ;
400 close STDIN ; 
401 -T STDIN ;
402 stat(STDIN) ;
403 -T HOCUS;
404 stat(POCUS);
405 no warnings qw(unopened closed) ;
406 -T STDIN ;
407 stat(STDIN);
408 -T HOCUS;
409 stat(POCUS);
410 EXPECT
411 -T on closed filehandle STDIN at - line 4.
412 stat() on closed filehandle STDIN at - line 5.
413 -T on unopened filehandle HOCUS at - line 6.
414 stat() on unopened filehandle POCUS at - line 7.
415 ########
416 # pp_sys.c [pp_fttext]
417 use warnings 'newline' ;
418 -T "abc\ndef" ;
419 no warnings 'newline' ;
420 -T "abc\ndef" ;
421 EXPECT
422 Unsuccessful open on filename containing newline at - line 3.
423 ########
424 # pp_sys.c [pp_sysread]
425 use warnings 'io' ;
426 if ($^O eq 'dos') {
427     print <<EOM ;
428 SKIPPED
429 # skipped on dos
430 EOM
431     exit ;
432 }
433 my $file = "./xcv" ;
434 open(F, ">$file") ; 
435 my $a = sysread(F, $a,10) ;
436 no warnings 'io' ;
437 my $a = sysread(F, $a,10) ;
438 close F ;
439 use warnings 'io' ;
440 sysread(F, $a, 10);
441 read(F, $a, 10);
442 sysread(NONEXISTENT, $a, 10);
443 read(NONEXISTENT, $a, 10);
444 unlink $file ;
445 EXPECT
446 Filehandle F opened only for output at - line 12.
447 sysread() on closed filehandle F at - line 17.
448 read() on closed filehandle F at - line 18.
449 sysread() on unopened filehandle NONEXISTENT at - line 19.
450 read() on unopened filehandle NONEXISTENT at - line 20.
451 ########
452 # pp_sys.c [pp_binmode]
453 use warnings 'unopened' ;
454 binmode(BLARG);
455 $a = "BLERG";binmode($a);
456 EXPECT
457 binmode() on unopened filehandle BLARG at - line 3.
458 binmode() on unopened filehandle at - line 4.
459 ########
460 # pp_sys.c [pp_lstat]
461 use warnings 'io';
462 open FH, "../harness" or die "# $!";
463 lstat FH;
464 open my $fh, $0 or die "# $!";
465 lstat $fh;
466 no warnings 'io';
467 lstat FH;
468 lstat $fh;
469 close FH;
470 close $fh;
471 EXPECT
472 lstat() on filehandle FH at - line 4.
473 lstat() on filehandle $fh at - line 6.
474 ########
475 # pp_sys.c [pp_getc]
476 use warnings qw(unopened closed) ;
477 getc FOO;
478 close STDIN;
479 getc STDIN;
480 # Create an empty file
481 $file = 'getcwarn.tmp';
482 open FH1, ">$file" or die "# $!"; close FH1;
483 open FH2, $file    or die "# $!";
484 getc FH2; # Should not warn at EOF
485 close FH2;
486 getc FH2; # Warns, now
487 unlink $file;
488 no warnings qw(unopened closed) ;
489 getc FOO;
490 getc STDIN;
491 getc FH2;
492 EXPECT
493 getc() on unopened filehandle FOO at - line 3.
494 getc() on closed filehandle STDIN at - line 5.
495 getc() on closed filehandle FH2 at - line 12.
496 ########
497 # pp_sys.c [pp_sselect]
498 use warnings 'misc';
499 $x = 1;
500 select $x, undef, undef, 1;
501 no warnings 'misc';
502 select $x, undef, undef, 1;
503 EXPECT
504 Non-string passed as bitmask at - line 4.
505 ########
506 use Config;
507 BEGIN {
508     if (!$Config{d_fchdir}) {
509         print <<EOM;
510 SKIPPED
511 # fchdir not present
512 EOM
513         exit;
514     }
515 }
516 opendir FOO, '.'; closedir FOO;
517 open BAR, '.'; close BAR;
518 opendir $dh, '.'; closedir $dh;
519 open $fh, '.'; close $fh;
520 chdir FOO;
521 chdir BAR;
522 chdir $dh;
523 chdir $fh;
524 use warnings qw(unopened closed) ;
525 chdir FOO;
526 chdir BAR;
527 chdir $dh;
528 chdir $fh;
529 EXPECT
530 chdir() on unopened filehandle FOO at - line 20.
531 chdir() on closed filehandle BAR at - line 21.
532 chdir() on unopened filehandle $dh at - line 22.
533 chdir() on closed filehandle $fh at - line 23.
534 ########
535 # pp_sys.c [pp_open]
536 use warnings;
537 opendir FOO, ".";
538 opendir my $foo, ".";
539 open FOO, "../harness";
540 open $foo, "../harness";
541 no warnings qw(io deprecated);
542 open FOO, "../harness";
543 open $foo, "../harness";
544 EXPECT
545 Opening dirhandle FOO also as a file at - line 5.
546 Opening dirhandle $foo also as a file at - line 6.
547 ########
548 # pp_sys.c [pp_open_dir]
549 use warnings;
550 open FOO, "../harness";
551 open my $foo, "../harness";
552 opendir FOO, ".";
553 opendir $foo, ".";
554 no warnings qw(io deprecated);
555 opendir FOO, ".";
556 opendir $foo, ".";
557 EXPECT
558 Opening filehandle FOO also as a directory at - line 5.
559 Opening filehandle $foo also as a directory at - line 6.