1--TEST--
2Test ftruncate() function : usage variations - truncate file to negative size
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) == 'WIN') {
6    die('skip.. Not valid for Windows');
7}
8?>
9--FILE--
10<?php
11/*
12 Prototype: bool ftruncate ( resource $handle, int $size );
13 Description: Truncates a file to a given length
14*/
15
16// include common file related test functions
17include ("file.inc");
18
19echo "*** Testing ftruncate() : usage variations ***\n";
20
21/* test ftruncate with file opened in different modes */
22$file_modes = array("r", "rb", "rt", "r+", "r+b", "r+t",
23                    "w", "wb", "wt", "w+", "w+b", "w+t",
24                    "x", "xb", "xt", "x+", "x+b", "x+t",
25                    "a", "ab", "at", "a+", "a+b", "a+t");
26
27$file_content_types = array("numeric","text_with_new_line");
28
29foreach($file_content_types as $file_content_type) {
30 echo "\n-- Testing ftruncate() with file having data of type ". $file_content_type ." --\n";
31
32 for($mode_counter = 0; $mode_counter < count($file_modes); $mode_counter++) {
33   echo "-- Testing ftruncate() with file opening using $file_modes[$mode_counter] mode --\n";
34
35   // create 1 file with some contents
36   $filename = __DIR__."/ftruncate_variation4.tmp";
37   if( strstr($file_modes[$mode_counter], "x") || strstr($file_modes[$mode_counter], "w") ) {
38     // fopen the file using the $file_modes
39     $file_handle = fopen($filename, $file_modes[$mode_counter]);
40     fill_file($file_handle, $file_content_type, 1024);
41   } else {
42     create_files ( __DIR__, 1, $file_content_type, 0755, 1, "w", "ftruncate_variation", 4);
43     // fopen the file using the $file_modes
44     $file_handle = fopen($filename, $file_modes[$mode_counter]);
45   }
46   if (!$file_handle) {
47     echo "Error: failed to open file $filename!\n";
48     exit();
49   }
50
51   rewind($file_handle); // file pointer to 0
52
53   echo "-- Testing ftruncate(): try truncating file to a negative size --\n";
54   /* try to truncate it to a negative size, size should not change*/
55
56   $new_size = -1000;
57   var_dump( filesize($filename) );  // current filesize
58   var_dump( ftell($file_handle) );
59   var_dump( ftruncate($file_handle, $new_size) ); // truncate it
60   var_dump( ftell($file_handle) );
61   var_dump( feof($file_handle) );
62   fclose($file_handle);
63   clearstatcache(); // clear previous size value in cache
64   var_dump( filesize($filename) ); // new file size = actual size, no change
65
66   //delete all files created
67   delete_file( $filename );
68 }//end of inner for loop
69}//end of outer foreach loop
70echo "Done\n";
71?>
72--EXPECTF--
73*** Testing ftruncate() : usage variations ***
74
75-- Testing ftruncate() with file having data of type numeric --
76-- Testing ftruncate() with file opening using r mode --
77-- Testing ftruncate(): try truncating file to a negative size --
78int(1024)
79int(0)
80
81Warning: ftruncate(): Negative size is not supported in %s on line %d
82bool(false)
83int(0)
84bool(false)
85int(1024)
86-- Testing ftruncate() with file opening using rb mode --
87-- Testing ftruncate(): try truncating file to a negative size --
88int(1024)
89int(0)
90
91Warning: ftruncate(): Negative size is not supported in %s on line %d
92bool(false)
93int(0)
94bool(false)
95int(1024)
96-- Testing ftruncate() with file opening using rt mode --
97-- Testing ftruncate(): try truncating file to a negative size --
98int(1024)
99int(0)
100
101Warning: ftruncate(): Negative size is not supported in %s on line %d
102bool(false)
103int(0)
104bool(false)
105int(1024)
106-- Testing ftruncate() with file opening using r+ mode --
107-- Testing ftruncate(): try truncating file to a negative size --
108int(1024)
109int(0)
110
111Warning: ftruncate(): Negative size is not supported in %s on line %d
112bool(false)
113int(0)
114bool(false)
115int(1024)
116-- Testing ftruncate() with file opening using r+b mode --
117-- Testing ftruncate(): try truncating file to a negative size --
118int(1024)
119int(0)
120
121Warning: ftruncate(): Negative size is not supported in %s on line %d
122bool(false)
123int(0)
124bool(false)
125int(1024)
126-- Testing ftruncate() with file opening using r+t mode --
127-- Testing ftruncate(): try truncating file to a negative size --
128int(1024)
129int(0)
130
131Warning: ftruncate(): Negative size is not supported in %s on line %d
132bool(false)
133int(0)
134bool(false)
135int(1024)
136-- Testing ftruncate() with file opening using w mode --
137-- Testing ftruncate(): try truncating file to a negative size --
138int(1024)
139int(0)
140
141Warning: ftruncate(): Negative size is not supported in %s on line %d
142bool(false)
143int(0)
144bool(false)
145int(1024)
146-- Testing ftruncate() with file opening using wb mode --
147-- Testing ftruncate(): try truncating file to a negative size --
148int(1024)
149int(0)
150
151Warning: ftruncate(): Negative size is not supported in %s on line %d
152bool(false)
153int(0)
154bool(false)
155int(1024)
156-- Testing ftruncate() with file opening using wt mode --
157-- Testing ftruncate(): try truncating file to a negative size --
158int(1024)
159int(0)
160
161Warning: ftruncate(): Negative size is not supported in %s on line %d
162bool(false)
163int(0)
164bool(false)
165int(1024)
166-- Testing ftruncate() with file opening using w+ mode --
167-- Testing ftruncate(): try truncating file to a negative size --
168int(1024)
169int(0)
170
171Warning: ftruncate(): Negative size is not supported in %s on line %d
172bool(false)
173int(0)
174bool(false)
175int(1024)
176-- Testing ftruncate() with file opening using w+b mode --
177-- Testing ftruncate(): try truncating file to a negative size --
178int(1024)
179int(0)
180
181Warning: ftruncate(): Negative size is not supported in %s on line %d
182bool(false)
183int(0)
184bool(false)
185int(1024)
186-- Testing ftruncate() with file opening using w+t mode --
187-- Testing ftruncate(): try truncating file to a negative size --
188int(1024)
189int(0)
190
191Warning: ftruncate(): Negative size is not supported in %s on line %d
192bool(false)
193int(0)
194bool(false)
195int(1024)
196-- Testing ftruncate() with file opening using x mode --
197-- Testing ftruncate(): try truncating file to a negative size --
198int(1024)
199int(0)
200
201Warning: ftruncate(): Negative size is not supported in %s on line %d
202bool(false)
203int(0)
204bool(false)
205int(1024)
206-- Testing ftruncate() with file opening using xb mode --
207-- Testing ftruncate(): try truncating file to a negative size --
208int(1024)
209int(0)
210
211Warning: ftruncate(): Negative size is not supported in %s on line %d
212bool(false)
213int(0)
214bool(false)
215int(1024)
216-- Testing ftruncate() with file opening using xt mode --
217-- Testing ftruncate(): try truncating file to a negative size --
218int(1024)
219int(0)
220
221Warning: ftruncate(): Negative size is not supported in %s on line %d
222bool(false)
223int(0)
224bool(false)
225int(1024)
226-- Testing ftruncate() with file opening using x+ mode --
227-- Testing ftruncate(): try truncating file to a negative size --
228int(1024)
229int(0)
230
231Warning: ftruncate(): Negative size is not supported in %s on line %d
232bool(false)
233int(0)
234bool(false)
235int(1024)
236-- Testing ftruncate() with file opening using x+b mode --
237-- Testing ftruncate(): try truncating file to a negative size --
238int(1024)
239int(0)
240
241Warning: ftruncate(): Negative size is not supported in %s on line %d
242bool(false)
243int(0)
244bool(false)
245int(1024)
246-- Testing ftruncate() with file opening using x+t mode --
247-- Testing ftruncate(): try truncating file to a negative size --
248int(1024)
249int(0)
250
251Warning: ftruncate(): Negative size is not supported in %s on line %d
252bool(false)
253int(0)
254bool(false)
255int(1024)
256-- Testing ftruncate() with file opening using a mode --
257-- Testing ftruncate(): try truncating file to a negative size --
258int(1024)
259int(0)
260
261Warning: ftruncate(): Negative size is not supported in %s on line %d
262bool(false)
263int(0)
264bool(false)
265int(1024)
266-- Testing ftruncate() with file opening using ab mode --
267-- Testing ftruncate(): try truncating file to a negative size --
268int(1024)
269int(0)
270
271Warning: ftruncate(): Negative size is not supported in %s on line %d
272bool(false)
273int(0)
274bool(false)
275int(1024)
276-- Testing ftruncate() with file opening using at mode --
277-- Testing ftruncate(): try truncating file to a negative size --
278int(1024)
279int(0)
280
281Warning: ftruncate(): Negative size is not supported in %s on line %d
282bool(false)
283int(0)
284bool(false)
285int(1024)
286-- Testing ftruncate() with file opening using a+ mode --
287-- Testing ftruncate(): try truncating file to a negative size --
288int(1024)
289int(0)
290
291Warning: ftruncate(): Negative size is not supported in %s on line %d
292bool(false)
293int(0)
294bool(false)
295int(1024)
296-- Testing ftruncate() with file opening using a+b mode --
297-- Testing ftruncate(): try truncating file to a negative size --
298int(1024)
299int(0)
300
301Warning: ftruncate(): Negative size is not supported in %s on line %d
302bool(false)
303int(0)
304bool(false)
305int(1024)
306-- Testing ftruncate() with file opening using a+t mode --
307-- Testing ftruncate(): try truncating file to a negative size --
308int(1024)
309int(0)
310
311Warning: ftruncate(): Negative size is not supported in %s on line %d
312bool(false)
313int(0)
314bool(false)
315int(1024)
316
317-- Testing ftruncate() with file having data of type text_with_new_line --
318-- Testing ftruncate() with file opening using r mode --
319-- Testing ftruncate(): try truncating file to a negative size --
320int(1024)
321int(0)
322
323Warning: ftruncate(): Negative size is not supported in %s on line %d
324bool(false)
325int(0)
326bool(false)
327int(1024)
328-- Testing ftruncate() with file opening using rb mode --
329-- Testing ftruncate(): try truncating file to a negative size --
330int(1024)
331int(0)
332
333Warning: ftruncate(): Negative size is not supported in %s on line %d
334bool(false)
335int(0)
336bool(false)
337int(1024)
338-- Testing ftruncate() with file opening using rt mode --
339-- Testing ftruncate(): try truncating file to a negative size --
340int(1024)
341int(0)
342
343Warning: ftruncate(): Negative size is not supported in %s on line %d
344bool(false)
345int(0)
346bool(false)
347int(1024)
348-- Testing ftruncate() with file opening using r+ mode --
349-- Testing ftruncate(): try truncating file to a negative size --
350int(1024)
351int(0)
352
353Warning: ftruncate(): Negative size is not supported in %s on line %d
354bool(false)
355int(0)
356bool(false)
357int(1024)
358-- Testing ftruncate() with file opening using r+b mode --
359-- Testing ftruncate(): try truncating file to a negative size --
360int(1024)
361int(0)
362
363Warning: ftruncate(): Negative size is not supported in %s on line %d
364bool(false)
365int(0)
366bool(false)
367int(1024)
368-- Testing ftruncate() with file opening using r+t mode --
369-- Testing ftruncate(): try truncating file to a negative size --
370int(1024)
371int(0)
372
373Warning: ftruncate(): Negative size is not supported in %s on line %d
374bool(false)
375int(0)
376bool(false)
377int(1024)
378-- Testing ftruncate() with file opening using w mode --
379-- Testing ftruncate(): try truncating file to a negative size --
380int(1024)
381int(0)
382
383Warning: ftruncate(): Negative size is not supported in %s on line %d
384bool(false)
385int(0)
386bool(false)
387int(1024)
388-- Testing ftruncate() with file opening using wb mode --
389-- Testing ftruncate(): try truncating file to a negative size --
390int(1024)
391int(0)
392
393Warning: ftruncate(): Negative size is not supported in %s on line %d
394bool(false)
395int(0)
396bool(false)
397int(1024)
398-- Testing ftruncate() with file opening using wt mode --
399-- Testing ftruncate(): try truncating file to a negative size --
400int(1024)
401int(0)
402
403Warning: ftruncate(): Negative size is not supported in %s on line %d
404bool(false)
405int(0)
406bool(false)
407int(1024)
408-- Testing ftruncate() with file opening using w+ mode --
409-- Testing ftruncate(): try truncating file to a negative size --
410int(1024)
411int(0)
412
413Warning: ftruncate(): Negative size is not supported in %s on line %d
414bool(false)
415int(0)
416bool(false)
417int(1024)
418-- Testing ftruncate() with file opening using w+b mode --
419-- Testing ftruncate(): try truncating file to a negative size --
420int(1024)
421int(0)
422
423Warning: ftruncate(): Negative size is not supported in %s on line %d
424bool(false)
425int(0)
426bool(false)
427int(1024)
428-- Testing ftruncate() with file opening using w+t mode --
429-- Testing ftruncate(): try truncating file to a negative size --
430int(1024)
431int(0)
432
433Warning: ftruncate(): Negative size is not supported in %s on line %d
434bool(false)
435int(0)
436bool(false)
437int(1024)
438-- Testing ftruncate() with file opening using x mode --
439-- Testing ftruncate(): try truncating file to a negative size --
440int(1024)
441int(0)
442
443Warning: ftruncate(): Negative size is not supported in %s on line %d
444bool(false)
445int(0)
446bool(false)
447int(1024)
448-- Testing ftruncate() with file opening using xb mode --
449-- Testing ftruncate(): try truncating file to a negative size --
450int(1024)
451int(0)
452
453Warning: ftruncate(): Negative size is not supported in %s on line %d
454bool(false)
455int(0)
456bool(false)
457int(1024)
458-- Testing ftruncate() with file opening using xt mode --
459-- Testing ftruncate(): try truncating file to a negative size --
460int(1024)
461int(0)
462
463Warning: ftruncate(): Negative size is not supported in %s on line %d
464bool(false)
465int(0)
466bool(false)
467int(1024)
468-- Testing ftruncate() with file opening using x+ mode --
469-- Testing ftruncate(): try truncating file to a negative size --
470int(1024)
471int(0)
472
473Warning: ftruncate(): Negative size is not supported in %s on line %d
474bool(false)
475int(0)
476bool(false)
477int(1024)
478-- Testing ftruncate() with file opening using x+b mode --
479-- Testing ftruncate(): try truncating file to a negative size --
480int(1024)
481int(0)
482
483Warning: ftruncate(): Negative size is not supported in %s on line %d
484bool(false)
485int(0)
486bool(false)
487int(1024)
488-- Testing ftruncate() with file opening using x+t mode --
489-- Testing ftruncate(): try truncating file to a negative size --
490int(1024)
491int(0)
492
493Warning: ftruncate(): Negative size is not supported in %s on line %d
494bool(false)
495int(0)
496bool(false)
497int(1024)
498-- Testing ftruncate() with file opening using a mode --
499-- Testing ftruncate(): try truncating file to a negative size --
500int(1024)
501int(0)
502
503Warning: ftruncate(): Negative size is not supported in %s on line %d
504bool(false)
505int(0)
506bool(false)
507int(1024)
508-- Testing ftruncate() with file opening using ab mode --
509-- Testing ftruncate(): try truncating file to a negative size --
510int(1024)
511int(0)
512
513Warning: ftruncate(): Negative size is not supported in %s on line %d
514bool(false)
515int(0)
516bool(false)
517int(1024)
518-- Testing ftruncate() with file opening using at mode --
519-- Testing ftruncate(): try truncating file to a negative size --
520int(1024)
521int(0)
522
523Warning: ftruncate(): Negative size is not supported in %s on line %d
524bool(false)
525int(0)
526bool(false)
527int(1024)
528-- Testing ftruncate() with file opening using a+ mode --
529-- Testing ftruncate(): try truncating file to a negative size --
530int(1024)
531int(0)
532
533Warning: ftruncate(): Negative size is not supported in %s on line %d
534bool(false)
535int(0)
536bool(false)
537int(1024)
538-- Testing ftruncate() with file opening using a+b mode --
539-- Testing ftruncate(): try truncating file to a negative size --
540int(1024)
541int(0)
542
543Warning: ftruncate(): Negative size is not supported in %s on line %d
544bool(false)
545int(0)
546bool(false)
547int(1024)
548-- Testing ftruncate() with file opening using a+t mode --
549-- Testing ftruncate(): try truncating file to a negative size --
550int(1024)
551int(0)
552
553Warning: ftruncate(): Negative size is not supported in %s on line %d
554bool(false)
555int(0)
556bool(false)
557int(1024)
558Done
559