1--TEST--
2Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link & lstat[dev] value
3--SKIPIF--
4<?php
5if (PHP_OS_FAMILY === 'Windows') {
6    require_once __DIR__ . '/windows_links/common.inc';
7    skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
8}
9?>
10--FILE--
11<?php
12/* Prototype: bool symlink ( string $target, string $link );
13   Description: creates a symbolic link to the existing target with the specified name link
14
15   Prototype: bool is_link ( string $filename );
16   Description: Tells whether the given file is a symbolic link.
17
18   Prototype: bool link ( string $target, string $link );
19   Description: Create a hard link
20
21   Prototype: int linkinfo ( string $path );
22   Description: Gets information about a link
23*/
24
25/* Variation 9 : Check lstat of soft/hard link created
26                 Check linkinfo() value with lstat['dev']
27*/
28// temp file used
29$file_path = __DIR__;
30$dirname = $file_path."/symlink_link_linkinfo_is_link_variation9";
31mkdir($dirname);
32$filename = "$dirname/symlink_link_linkinfo_is_link_variation9.tmp";
33// soft link name used
34$soft_link = "$dirname/symlink_link_linkinfo_is_link_softlink_variation9.tmp";
35// hard link name used
36$hard_link = "$dirname/symlink_link_linkinfo_is_link_hardlink_variation9.tmp";
37
38// create the file
39$fp = fopen($filename, "w");
40fclose($fp);
41
42echo "*** Checking lstat() on soft link ***\n";
43// create soft link
44var_dump( symlink($filename, $soft_link) );
45
46// confirming that linkinfo() = lstat['dev'] , this should always match
47$linkinfo = linkinfo($soft_link);
48$s1 = lstat($soft_link);
49echo "linkinfo() returns integer !== -1: ";
50var_dump(is_int($linkinfo) && $linkinfo !== -1);
51if( $s1[0] == $linkinfo )
52  echo "\nlinkinfo() value matches lstat['dev']\n";
53else
54  echo "\nWarning: linkinfo() value doesnt match lstat['dev']\n";
55// delete link
56unlink($soft_link);
57
58echo "\n*** Checking lstat() on hard link ***\n";
59// create hard link
60var_dump( link($filename, $hard_link) );
61// confirming that linkinfo() = lstat['dev'] , this should always match
62$linkinfo = linkinfo($hard_link);
63$s1 = lstat($hard_link);
64echo "linkinfo() returns integer !== -1: ";
65var_dump(is_int($linkinfo) && $linkinfo !== -1);
66if( $s1[0] == $linkinfo )
67  echo "\nlinkinfo() value matches lstat['dev']\n";
68else
69  echo "\nWarning: linkinfo() value doesnt match lstat['dev']\n";
70
71// delete link
72unlink($hard_link);
73
74echo "\n*** Checking lstat() on a soft link to directory ***\n";
75// create soft link
76var_dump( symlink($dirname, $soft_link) );
77
78// confirming that linkinfo() = lstat['dev'], this should always match
79$linkinfo = linkinfo($soft_link);
80$s1 = lstat($soft_link);
81echo "linkinfo() returns integer !== -1: ";
82var_dump(is_int($linkinfo) && $linkinfo !== -1);
83if( $s1[0] == $linkinfo )
84  echo "\nlinkinfo() value matches lstat['dev']\n";
85else
86  echo "\nWarning: linkinfo() value doesnt match lstat['dev']\n";
87
88// delete link
89if (PHP_OS_FAMILY === 'Windows') {
90  rmdir($soft_link);
91} else {
92  unlink($soft_link);
93}
94
95echo "Done\n";
96?>
97--CLEAN--
98<?php
99$file_path = __DIR__;
100$dirname = $file_path."/symlink_link_linkinfo_is_link_variation9";
101$filename = "$dirname/symlink_link_linkinfo_is_link_variation9.tmp";
102unlink($filename);
103rmdir($dirname);
104?>
105--EXPECTF--
106*** Checking lstat() on soft link ***
107bool(true)
108linkinfo() returns integer !== -1: bool(true)
109
110linkinfo() value matches lstat['dev']
111
112*** Checking lstat() on hard link ***
113bool(true)
114linkinfo() returns integer !== -1: bool(true)
115
116linkinfo() value matches lstat['dev']
117
118*** Checking lstat() on a soft link to directory ***
119bool(true)
120linkinfo() returns integer !== -1: bool(true)
121
122linkinfo() value matches lstat['dev']
123Done
124