mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-12 03:30:50 +00:00
Compare commits
1339
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
344949dc96 | ||
|
|
ac3dc9d95e | ||
|
|
6155a1fa24 | ||
|
|
68ffe71a12 | ||
|
|
c96fe825b8 | ||
|
|
1ab64d2b96 | ||
|
|
0e38fedcd7 | ||
|
|
9a0f98869c | ||
|
|
2d0f432490 | ||
|
|
38a3f33625 | ||
|
|
90f9f62665 | ||
|
|
d92a1f4dc1 | ||
|
|
946032f40b | ||
|
|
b9a7918c43 | ||
|
|
7c283f80be | ||
|
|
2b5a5ca669 | ||
|
|
d59d500af7 | ||
|
|
e4ec7372e9 | ||
|
|
897a708c87 | ||
|
|
d0cb097c52 | ||
|
|
9bb3dc6903 | ||
|
|
c7441b2379 | ||
|
|
3a4ace13b4 | ||
|
|
c375b0b05c | ||
|
|
761fa96412 | ||
|
|
e9833ff497 | ||
|
|
6174d2b446 | ||
|
|
d250e7ba9d | ||
|
|
0ceb4a93b2 | ||
|
|
494bec466b | ||
|
|
e9d0a58cb0 | ||
|
|
33ad63ef8c | ||
|
|
82f6cef483 | ||
|
|
436ad07b98 | ||
|
|
3ad9839f2f | ||
|
|
1a4c82e014 | ||
|
|
8d352d2dd6 | ||
|
|
564788b6f5 | ||
|
|
a7d10f8aa4 | ||
|
|
ef021e8964 | ||
|
|
974ff24e80 | ||
|
|
6a4a858294 | ||
|
|
f95759b36a | ||
|
|
32d7d07c0e | ||
|
|
dd22d65e2f | ||
|
|
d19bd6f12c | ||
|
|
a46aac36ec | ||
|
|
efae1b9ace | ||
|
|
758ea308a9 | ||
|
|
330740f7cd | ||
|
|
e10f20924e | ||
|
|
b48d709746 | ||
|
|
383171b11b | ||
|
|
417ba55c1f | ||
|
|
142da0ed58 | ||
|
|
6efe008598 | ||
|
|
d2162b32b1 | ||
|
|
f163a4d16b | ||
|
|
38ad0e9104 | ||
|
|
95bfbfe1c1 | ||
|
|
600fce5890 | ||
|
|
1d0214bee4 | ||
|
|
4dfc7cc87c | ||
|
|
e771bdb23d | ||
|
|
45f1f1711d | ||
|
|
84e5fcb5de | ||
|
|
4fde1b8de1 | ||
|
|
d3319d1b07 | ||
|
|
ad86154d90 | ||
|
|
459fb4f319 | ||
|
|
cfbd0bb58a | ||
|
|
3e7b832895 | ||
|
|
d4f59af5be | ||
|
|
4199484313 | ||
|
|
8dfb2df649 | ||
|
|
6fc22aa5d9 | ||
|
|
7abc6e4338 | ||
|
|
0344311bde | ||
|
|
24ae309037 | ||
|
|
76c93412d3 | ||
|
|
e1c985d9a7 | ||
|
|
cee6216c4f | ||
|
|
9b2525f96e | ||
|
|
04eca7536c | ||
|
|
895a3a109f | ||
|
|
7a93625e4c | ||
|
|
80923f933d | ||
|
|
ae55ffe7bf | ||
|
|
6bf2ce3429 | ||
|
|
dea44dfc9a | ||
|
|
66ee5dfac2 | ||
|
|
d24148f3d0 | ||
|
|
d433a62ef4 | ||
|
|
72cd67b3ca | ||
|
|
d4d46ac352 | ||
|
|
812a419019 | ||
|
|
ce5df6d949 | ||
|
|
da45161bd2 | ||
|
|
9a723fcb4e | ||
|
|
bd55130077 | ||
|
|
dc150fd2ea | ||
|
|
8a9e09a44a | ||
|
|
832545d97f | ||
|
|
294e776d95 | ||
|
|
961c9856ef | ||
|
|
ceb597ea1a | ||
|
|
9ad850637e | ||
|
|
81c68ab8d5 | ||
|
|
88e5482def | ||
|
|
d3f04d8ecc | ||
|
|
053023a71e | ||
|
|
20925f97b9 | ||
|
|
e3e364f77b | ||
|
|
aa8b1d6db3 | ||
|
|
aca939a0ab | ||
|
|
f1ba2137c0 | ||
|
|
f6cee90129 | ||
|
|
7eeea7e55d | ||
|
|
11aebf74bb | ||
|
|
2292a652a6 | ||
|
|
4c8473d619 | ||
|
|
dce8267f35 | ||
|
|
dfbfa1a36f | ||
|
|
2efab7a22a | ||
|
|
5eb912554d | ||
|
|
b51b6f0fbf | ||
|
|
697398e18e | ||
|
|
a1e6457561 | ||
|
|
1fe4990bc0 | ||
|
|
2500199ae3 | ||
|
|
309697edb2 | ||
|
|
fec2af82b8 | ||
|
|
3d8e54f3a2 | ||
|
|
add3ec4e0b | ||
|
|
aebb39b014 | ||
|
|
b2ecf47755 | ||
|
|
c794f2c710 | ||
|
|
984c0918ab | ||
|
|
71e9f8cdd5 | ||
|
|
60af5507a5 | ||
|
|
1ae3c0e66e | ||
|
|
7cc28802af | ||
|
|
a7b91019e9 | ||
|
|
a395304c72 | ||
|
|
e2868b5788 | ||
|
|
72b356c1bc | ||
|
|
94c25df592 | ||
|
|
b566ad5d1b | ||
|
|
9d02c2bd56 | ||
|
|
310397f2ee | ||
|
|
2aa7bf8d8b | ||
|
|
a3daf3bbe8 | ||
|
|
e23fead99f | ||
|
|
e0654de590 | ||
|
|
21b4499953 | ||
|
|
309ef518fc | ||
|
|
7002a39f97 | ||
|
|
39aa3a5d98 | ||
|
|
a50e9acd8e | ||
|
|
83e9f23182 | ||
|
|
aba4c07be1 | ||
|
|
46306a3212 | ||
|
|
054826b192 | ||
|
|
0f714bc700 | ||
|
|
dc4cdaaf1b | ||
|
|
833473d1de | ||
|
|
5795ed62f4 | ||
|
|
f71ef5e091 | ||
|
|
6c843d1431 | ||
|
|
ebedf060a5 | ||
|
|
973c5fa1ec | ||
|
|
169eb85e0a | ||
|
|
cce2ffed8a | ||
|
|
7dd7b03aa8 | ||
|
|
fb6517e8ab | ||
|
|
f94cbfe52b | ||
|
|
0e178230b2 | ||
|
|
fc8d5c784d | ||
|
|
08c11f2931 | ||
|
|
914cf3c0f8 | ||
|
|
77f7ae3814 | ||
|
|
76adb58b7a | ||
|
|
41092dbd8a | ||
|
|
93481ce9b8 | ||
|
|
1dabcd4dad | ||
|
|
8958762de6 | ||
|
|
b1613e16f2 | ||
|
|
f390fbb92a | ||
|
|
4024425e8e | ||
|
|
dd67c075bc | ||
|
|
7c0e7b4fe8 | ||
|
|
5aae306f96 | ||
|
|
7f127a22df | ||
|
|
dacf98c86f | ||
|
|
ae8f64e325 | ||
|
|
d4e143b8be | ||
|
|
db8b4c6762 | ||
|
|
4e53357e9b | ||
|
|
7f3b79adc5 | ||
|
|
12d2b01a25 | ||
|
|
46303d75be | ||
|
|
6f4333c7ae | ||
|
|
e5afca38b6 | ||
|
|
1351f42efc | ||
|
|
7431b52291 | ||
|
|
a3a2dcd8a9 | ||
|
|
d4f73f8da6 | ||
|
|
be3427e4f0 | ||
|
|
003ea0717e | ||
|
|
1a314027d3 | ||
|
|
ea0f37fc76 | ||
|
|
fdf0768d4e | ||
|
|
475125ac25 | ||
|
|
f704ac13a8 | ||
|
|
2b121d0b37 | ||
|
|
dbe5972a0d | ||
|
|
e0e77d7d02 | ||
|
|
0855c0b603 | ||
|
|
4668b7130b | ||
|
|
345ada81c8 | ||
|
|
f8b55fabc5 | ||
|
|
701ab27de7 | ||
|
|
fc9282c183 | ||
|
|
299614ae16 | ||
|
|
a354531144 | ||
|
|
c2d66fa8bf | ||
|
|
ad42fba9fa | ||
|
|
a34d4dc30e | ||
|
|
a63b47cae0 | ||
|
|
c073b76aac | ||
|
|
e37aee1a34 | ||
|
|
a0b3f822f7 | ||
|
|
05ff5da32b | ||
|
|
74e34d1657 | ||
|
|
1dbf11e1ba | ||
|
|
f12a4164a5 | ||
|
|
44c8927daf | ||
|
|
3ae7d13bc9 | ||
|
|
ac66d4481e | ||
|
|
cd267a3df4 | ||
|
|
7866f02260 | ||
|
|
62f7e27141 | ||
|
|
7d14dae0bb | ||
|
|
e5c5412777 | ||
|
|
4bc247553a | ||
|
|
bde6801add | ||
|
|
5340b204ca | ||
|
|
45e9f594bb | ||
|
|
dff55752aa | ||
|
|
4ff9267143 | ||
|
|
67c50ee22a | ||
|
|
eccc536883 | ||
|
|
f30f3590a1 | ||
|
|
ad3b2ccec9 | ||
|
|
6fb507b53e | ||
|
|
062942c4e9 | ||
|
|
a0be48c109 | ||
|
|
121e625977 | ||
|
|
cabee3635f | ||
|
|
d07dc0fc4c | ||
|
|
e89bace72c | ||
|
|
1cdc956637 | ||
|
|
ffeb57afb5 | ||
|
|
8e7df3fbf1 | ||
|
|
60cac99a71 | ||
|
|
f09be34dd3 | ||
|
|
8dbbddfb54 | ||
|
|
8ef5a3d48e | ||
|
|
78f527e2b7 | ||
|
|
726eb90bd5 | ||
|
|
ab71e2cbaa | ||
|
|
2cbcb743d8 | ||
|
|
94e6eb06dd | ||
|
|
aec08c6052 | ||
|
|
22a6b8f1a4 | ||
|
|
58d3451c75 | ||
|
|
1fec8e3d13 | ||
|
|
33b67ab868 | ||
|
|
98175957a7 | ||
|
|
2ae8d124ce | ||
|
|
d48ffd97d6 | ||
|
|
f37cb1c617 | ||
|
|
a7e14749e7 | ||
|
|
1b355e119e | ||
|
|
d27b3d3ad9 | ||
|
|
24db7f182a | ||
|
|
6cc7ee265c | ||
|
|
bcc1e5a74e | ||
|
|
a88173bf86 | ||
|
|
9bba373a17 | ||
|
|
b1e8631986 | ||
|
|
c79e780f5c | ||
|
|
2f7f1dd1b8 | ||
|
|
13c2254e21 | ||
|
|
5a468ce877 | ||
|
|
f2f1f94e36 | ||
|
|
0b8401bf27 | ||
|
|
814045bba6 | ||
|
|
c37ee2a12a | ||
|
|
0ccbd37df7 | ||
|
|
aa41ab285a | ||
|
|
46a5371ecd | ||
|
|
424e98f4e2 | ||
|
|
c98f4e9f32 | ||
|
|
17c1518792 | ||
|
|
a142ce729f | ||
|
|
874cddd4ae | ||
|
|
091609d661 | ||
|
|
c4088ce25b | ||
|
|
48f2ad4703 | ||
|
|
7fa0970567 | ||
|
|
dd9b7f25cf | ||
|
|
b66b92e996 | ||
|
|
dd2ad168e1 | ||
|
|
cd2ce96e03 | ||
|
|
8facc65202 | ||
|
|
76c663b321 | ||
|
|
2c44fab3a0 | ||
|
|
6b7eaaa2c4 | ||
|
|
c8d19858ac | ||
|
|
213b5abd06 | ||
|
|
656ccddfce | ||
|
|
02c1b1d8d2 | ||
|
|
a0055ba2e5 | ||
|
|
c5153b24c8 | ||
|
|
973937e7aa | ||
|
|
5fc6842817 | ||
|
|
fff34aa3be | ||
|
|
c3867a7c8e | ||
|
|
16cda12728 | ||
|
|
c2e7158712 | ||
|
|
8c3b8d4fe6 | ||
|
|
9234916fc8 | ||
|
|
53656f196b | ||
|
|
efaa31e940 | ||
|
|
cf9f784ecd | ||
|
|
0988bc2ee6 | ||
|
|
380928e6bf | ||
|
|
7ecd3ff91a | ||
|
|
6a1d69d4ba | ||
|
|
dee2d7fed7 | ||
|
|
dd277cf2c7 | ||
|
|
3f09044ba6 | ||
|
|
4a723721b9 | ||
|
|
4cf28eb0fc | ||
|
|
26a472f767 | ||
|
|
eaf21d230e | ||
|
|
95255fe5e1 | ||
|
|
5413a66cbb | ||
|
|
3e5bbba351 | ||
|
|
8e0535bcd5 | ||
|
|
9b560970f8 | ||
|
|
4d789b593f | ||
|
|
82c6d54517 | ||
|
|
59e4fdcc10 | ||
|
|
32eb31719a | ||
|
|
66d30a4966 | ||
|
|
ef6a44d15c | ||
|
|
d8fbd1acef | ||
|
|
ace55f3251 | ||
|
|
f39c0ad2b6 | ||
|
|
796083b936 | ||
|
|
239d203e4a | ||
|
|
4bab4a7b55 | ||
|
|
d35ddb740e | ||
|
|
b817dab206 | ||
|
|
b33fe2b2c6 | ||
|
|
6660f8ae4e | ||
|
|
ef9ba94c8b | ||
|
|
392e5013b4 | ||
|
|
7faaf86d3a | ||
|
|
ae8db8c608 | ||
|
|
66fd5008ab | ||
|
|
59393ef3ad | ||
|
|
7cd7cad1b5 | ||
|
|
072be90d6f | ||
|
|
17e51c5946 | ||
|
|
24d034251d | ||
|
|
efcd8a7094 | ||
|
|
ada5c4009e | ||
|
|
5312594a27 | ||
|
|
2d4a4a99d3 | ||
|
|
a7ac507ade | ||
|
|
72479b90b3 | ||
|
|
87660b06f4 | ||
|
|
5de9962d50 | ||
|
|
ac3e8601ae | ||
|
|
26e393c69f | ||
|
|
19b25ca5d2 | ||
|
|
b89d9db706 | ||
|
|
b064810550 | ||
|
|
b86a4edeed | ||
|
|
a9999190c6 | ||
|
|
f4f313ff40 | ||
|
|
6591b9c826 | ||
|
|
beb7476ba9 | ||
|
|
0c80cc9d20 | ||
|
|
b1fab873c2 | ||
|
|
7121150e5f | ||
|
|
f7513855b3 | ||
|
|
928c260c57 | ||
|
|
e8de102cd6 | ||
|
|
651cea08f0 | ||
|
|
6d55e3456f | ||
|
|
efb9fdf0e6 | ||
|
|
e180f20e63 | ||
|
|
346fa499ca | ||
|
|
1638ddd4c2 | ||
|
|
f0de896ed2 | ||
|
|
34e868d451 | ||
|
|
b7740a0351 | ||
|
|
eed5a6bed0 | ||
|
|
f8075804a5 | ||
|
|
0f6db9ef82 | ||
|
|
35b1635c81 | ||
|
|
00a36a09e1 | ||
|
|
58d65abbcb | ||
|
|
39848ce35c | ||
|
|
97dd1e8abf | ||
|
|
15f7c2c332 | ||
|
|
86b99ffcf6 | ||
|
|
b588e10553 | ||
|
|
4c2d6cfea8 | ||
|
|
d0570815af | ||
|
|
6f44489b68 | ||
|
|
8aeb7f35bc | ||
|
|
d23d4b366d | ||
|
|
52a3c29e22 | ||
|
|
3d9c3c6662 | ||
|
|
b3d80fe441 | ||
|
|
dc8b2e6ddd | ||
|
|
4196f7d0c3 | ||
|
|
413053aa75 | ||
|
|
159f0bcdd8 | ||
|
|
303f888a09 | ||
|
|
f58016b348 | ||
|
|
cafc0b2e59 | ||
|
|
509b4d39b5 | ||
|
|
e6003eba60 | ||
|
|
999d989aa9 | ||
|
|
6b0b7e3f42 | ||
|
|
01f5c5d6fe | ||
|
|
42e912da79 | ||
|
|
e0ed7e9057 | ||
|
|
b38f1e162c | ||
|
|
6113d95433 | ||
|
|
59b37a5ce4 | ||
|
|
b52eb8f14a | ||
|
|
7dae400063 | ||
|
|
2fbb9a5247 | ||
|
|
c9d9e053f3 | ||
|
|
968f3f9a12 | ||
|
|
19d47d9f6e | ||
|
|
cf05f34c66 | ||
|
|
b5d97e5ddb | ||
|
|
a2b58500b4 | ||
|
|
fc03762871 | ||
|
|
d5a8bb2d0b | ||
|
|
43630e2ac0 | ||
|
|
baabdbd1ee | ||
|
|
b816089fbf | ||
|
|
e58c221204 | ||
|
|
5f36ce398e | ||
|
|
fff1c67b56 | ||
|
|
6a75a52ad8 | ||
|
|
2705070dd8 | ||
|
|
69bb505750 | ||
|
|
1b5caf3b67 | ||
|
|
0d0127fbfb | ||
|
|
94ad85107c | ||
|
|
b13a6276e1 | ||
|
|
6439ad7640 | ||
|
|
4343df9de2 | ||
|
|
a9c558c6d3 | ||
|
|
c8b2431522 | ||
|
|
ef8d954a0d | ||
|
|
c175f3545c | ||
|
|
0127c07e45 | ||
|
|
cd2b0fe706 | ||
|
|
07dcab60f0 | ||
|
|
006b455c6a | ||
|
|
4d3c4ab45d | ||
|
|
419af9f12a | ||
|
|
f99fa7170e | ||
|
|
71ab7dfccc | ||
|
|
c52cdad25a | ||
|
|
2e52c112df | ||
|
|
c1498d7a15 | ||
|
|
38a319e3c6 | ||
|
|
2a8abc7de5 | ||
|
|
a53ff6ff54 | ||
|
|
830298beb8 | ||
|
|
32ef849171 | ||
|
|
3149fc7c40 | ||
|
|
9c3f39a074 | ||
|
|
90ba724072 | ||
|
|
3e2f1526bc | ||
|
|
a1402eebf1 | ||
|
|
ee5884ef39 | ||
|
|
ad7aa57e27 | ||
|
|
452389df71 | ||
|
|
72a35f8a4b | ||
|
|
afaf7cc24e | ||
|
|
f4543e57f4 | ||
|
|
8f82834a79 | ||
|
|
32254e0938 | ||
|
|
530e7120b2 | ||
|
|
12192da2c4 | ||
|
|
7b37272381 | ||
|
|
f76df0ba1b | ||
|
|
a3330b5ab3 | ||
|
|
e1dd919204 | ||
|
|
c703ad78d0 | ||
|
|
354a42fd5f | ||
|
|
1f8cee7666 | ||
|
|
bf48e7bc9f | ||
|
|
6144a7288e | ||
|
|
f962ba6abb | ||
|
|
449029d2df | ||
|
|
f1f96c86d1 | ||
|
|
c74f56611b | ||
|
|
7f41f5d586 | ||
|
|
f65e8488d7 | ||
|
|
d4f9701392 | ||
|
|
0ff59a1353 | ||
|
|
b46352043c | ||
|
|
174f6b6f88 | ||
|
|
b9e54cb693 | ||
|
|
455257974b | ||
|
|
895b5fc2b6 | ||
|
|
77208ec4d6 | ||
|
|
da9eb594c6 | ||
|
|
19ae16a693 | ||
|
|
4da2e804e0 | ||
|
|
70446a6416 | ||
|
|
6197460836 | ||
|
|
9b09ba614d | ||
|
|
a5f58cd6e5 | ||
|
|
0ab3a13612 | ||
|
|
97a0102b81 | ||
|
|
f58628ca4d | ||
|
|
30dafe2f42 | ||
|
|
a28eaf64d0 | ||
|
|
57b9b0112d | ||
|
|
c4e8b2baab | ||
|
|
350b0bbeac | ||
|
|
61ce6bc8f1 | ||
|
|
b506f5c8f8 | ||
|
|
2c5d4b8c23 | ||
|
|
f88e29bc0d | ||
|
|
abc4b4bb99 | ||
|
|
8814f36692 | ||
|
|
a6abc8f812 | ||
|
|
87e598e835 | ||
|
|
87a8b04051 | ||
|
|
6f6bc82de7 | ||
|
|
bfea989d21 | ||
|
|
0acb52fc3b | ||
|
|
67f0a6f6c0 | ||
|
|
9c2871a673 | ||
|
|
4f8c44b091 | ||
|
|
33f364b5fc | ||
|
|
aa8e5cdde7 | ||
|
|
0af3b5a692 | ||
|
|
37571334d9 | ||
|
|
a5ad437af8 | ||
|
|
bd19dabefe | ||
|
|
d454becda8 | ||
|
|
eb8b1ac923 | ||
|
|
32dda8b0cb | ||
|
|
4d2f7207c0 | ||
|
|
426cf8eb57 | ||
|
|
a213c71735 | ||
|
|
4b9e8fc899 | ||
|
|
e76d0043da | ||
|
|
1f50681813 | ||
|
|
88d26985b8 | ||
|
|
c731daeda7 | ||
|
|
ac1133d364 | ||
|
|
758caa9ba2 | ||
|
|
c69d034a87 | ||
|
|
9b22813c4d | ||
|
|
45ff90cb18 | ||
|
|
072d5c2575 | ||
|
|
955b27cd64 | ||
|
|
8315a525ca | ||
|
|
097055a862 | ||
|
|
648dd88b42 | ||
|
|
572394db74 | ||
|
|
c955910ea0 | ||
|
|
967d64ade5 | ||
|
|
ff8adda7c6 | ||
|
|
25684764cc | ||
|
|
1d42e34c1b | ||
|
|
d63ef03d7b | ||
|
|
22a2636d9d | ||
|
|
c9b374f8e0 | ||
|
|
586f68d820 | ||
|
|
a3c2f80d72 | ||
|
|
ebe402a9c3 | ||
|
|
c52bcebc09 | ||
|
|
3283752055 | ||
|
|
f3d3dd5bc8 | ||
|
|
4abcff7631 | ||
|
|
bb640840c3 | ||
|
|
457f22c198 | ||
|
|
ca67d27fb2 | ||
|
|
4041d4faed | ||
|
|
4121057117 | ||
|
|
46219c714d | ||
|
|
03132bff12 | ||
|
|
190867c800 | ||
|
|
abbf745211 | ||
|
|
b996b32031 | ||
|
|
fbcee73c8c | ||
|
|
33bdabbee2 | ||
|
|
66ebbb5ae1 | ||
|
|
e900f8c97b | ||
|
|
2e6e0f87dc | ||
|
|
0a2d473df0 | ||
|
|
a747d1f864 | ||
|
|
59b6ffee1e | ||
|
|
eb668bcd9b | ||
|
|
0764c3101b | ||
|
|
0bb1ff71d6 | ||
|
|
f13ecb9832 | ||
|
|
05ea039144 | ||
|
|
d5b8ef54e9 | ||
|
|
af55703d52 | ||
|
|
45f67837e6 | ||
|
|
0ae3050aa5 | ||
|
|
d70f96550c | ||
|
|
9b3f810564 | ||
|
|
dcc030f5ef | ||
|
|
c5091eedf1 | ||
|
|
efea12fec5 | ||
|
|
20e8bc31f0 | ||
|
|
280f4a4373 | ||
|
|
90c478664a | ||
|
|
e03bccb1ad | ||
|
|
f023f6f8fc | ||
|
|
aded559898 | ||
|
|
c4ddda3e23 | ||
|
|
ca4a0cdb8a | ||
|
|
17687a4fff | ||
|
|
473366d6e7 | ||
|
|
9dc6f0c5f2 | ||
|
|
2169eb2ccc | ||
|
|
29d507d224 | ||
|
|
2feb1cf6d7 | ||
|
|
da498edd5e | ||
|
|
98e85ae80b | ||
|
|
16e5459f94 | ||
|
|
9dc1412e46 | ||
|
|
4456b3274f | ||
|
|
f4883b916c | ||
|
|
550aedb63d | ||
|
|
64ab75c206 | ||
|
|
ddea2a190f | ||
|
|
76a158a336 | ||
|
|
e4e299614e | ||
|
|
d5f02c553b | ||
|
|
ad69583ba1 | ||
|
|
13308b5a94 | ||
|
|
efd314e767 | ||
|
|
710e49a30b | ||
|
|
3a4bf3f904 | ||
|
|
d795243db3 | ||
|
|
8652e8ac27 | ||
|
|
c45f76112f | ||
|
|
26038795f8 | ||
|
|
740ee5df1c | ||
|
|
3cb16973ef | ||
|
|
3c94150191 | ||
|
|
a58e6cc8ad | ||
|
|
6f6631ad14 | ||
|
|
84b107924d | ||
|
|
709681e085 | ||
|
|
a4d56067e2 | ||
|
|
602734c7d9 | ||
|
|
183ebe3e14 | ||
|
|
594c3808d4 | ||
|
|
d29309eb68 | ||
|
|
58037935f6 | ||
|
|
c93d64375d | ||
|
|
854721d723 | ||
|
|
e46b0bfa79 | ||
|
|
2fc8358e3a | ||
|
|
1a30bfd76c | ||
|
|
ff54f76f71 | ||
|
|
d2fa4670dc | ||
|
|
fdded38816 | ||
|
|
baea3414a3 | ||
|
|
978340cfa5 | ||
|
|
1bfa8be474 | ||
|
|
9e4d2d4594 | ||
|
|
532ed0edf3 | ||
|
|
8507eb00f6 | ||
|
|
e93a1a92ec | ||
|
|
5664a358fa | ||
|
|
24975495a7 | ||
|
|
afa0e1e03e | ||
|
|
59656cc706 | ||
|
|
50af908f01 | ||
|
|
5bad812dad | ||
|
|
2d3b3fd97f | ||
|
|
9042a9ddbd | ||
|
|
da1a617f6b | ||
|
|
5dc4d38204 | ||
|
|
e5b86174af | ||
|
|
6e055f9a77 | ||
|
|
d8f86e725a | ||
|
|
f620fdbed3 | ||
|
|
c1be81a84e | ||
|
|
05436b1378 | ||
|
|
cc4748139c | ||
|
|
078dfe8d57 | ||
|
|
11dbaa39d6 | ||
|
|
16694d3500 | ||
|
|
137beb12ca | ||
|
|
9455657a7a | ||
|
|
75d8056e11 | ||
|
|
c07f7c8df8 | ||
|
|
43202b5b95 | ||
|
|
ac96f76730 | ||
|
|
c633abdc7f | ||
|
|
95c701d328 | ||
|
|
e969d788bf | ||
|
|
854b9b9ac1 | ||
|
|
3396ace7cb | ||
|
|
976aef1ccf | ||
|
|
e5dd8161e6 | ||
|
|
92d5faca60 | ||
|
|
d679e5d2aa | ||
|
|
7924bf8705 | ||
|
|
7a282ddcfd | ||
|
|
44b7c16b03 | ||
|
|
c5d4e4b321 | ||
|
|
2d8945247b | ||
|
|
81c02040f0 | ||
|
|
3591c3b8e9 | ||
|
|
53b333d153 | ||
|
|
c2078cdabf | ||
|
|
e27f3fc7e1 | ||
|
|
d0c781cc84 | ||
|
|
1ef74a4f79 | ||
|
|
75c180f242 | ||
|
|
131c47b75d | ||
|
|
3bbcb0d0dd | ||
|
|
a40ccefd32 | ||
|
|
53309aace0 | ||
|
|
835c4dedbb | ||
|
|
26b101dd1b | ||
|
|
8eb1791790 | ||
|
|
8227141218 | ||
|
|
20bc6a09e0 | ||
|
|
67aca57c3b | ||
|
|
5acfdf3ca1 | ||
|
|
a88a99fb9d | ||
|
|
f4b5f0904b | ||
|
|
983d8e5efd | ||
|
|
7ec74f64f9 | ||
|
|
221413e5ef | ||
|
|
4d522e3686 | ||
|
|
4b3b409b48 | ||
|
|
c4342de561 | ||
|
|
2ab549c5f2 | ||
|
|
c194d9333d | ||
|
|
30f83207fe | ||
|
|
04d6f6ab50 | ||
|
|
5f9681ff80 | ||
|
|
3fc83fd8e3 | ||
|
|
210effe877 | ||
|
|
f059f21e96 | ||
|
|
cbb2c5a073 | ||
|
|
3d324676a5 | ||
|
|
089f1b5771 | ||
|
|
e0c983a013 | ||
|
|
f84aff8f5c | ||
|
|
d1d73b1b06 | ||
|
|
8635af07d5 | ||
|
|
19a13f29b0 | ||
|
|
230f4ebb06 | ||
|
|
52d0f1c143 | ||
|
|
08e020a870 | ||
|
|
dc391673d0 | ||
|
|
533d3273bd | ||
|
|
9a24983487 | ||
|
|
a6e9674bfd | ||
|
|
b94e0d9eac | ||
|
|
ac8469bd55 | ||
|
|
9746be4779 | ||
|
|
17117063ce | ||
|
|
dbf4bcc08b | ||
|
|
e5dbcb0890 | ||
|
|
60a5aeef43 | ||
|
|
d1c70a6417 | ||
|
|
644bd60d29 | ||
|
|
2b063828e0 | ||
|
|
62fb872a4d | ||
|
|
51c9f2c64b | ||
|
|
91a6272972 | ||
|
|
99f2b9674f | ||
|
|
28c32e1fc8 | ||
|
|
e982d5c7f0 | ||
|
|
8416a0433a | ||
|
|
3c9a6a8890 | ||
|
|
ecc9c539d2 | ||
|
|
f481a209b7 | ||
|
|
26c5c323ab | ||
|
|
922ce573cf | ||
|
|
cbab922570 | ||
|
|
66aba3c568 | ||
|
|
aa4c85dda1 | ||
|
|
04a16f914c | ||
|
|
8a8041befe | ||
|
|
31415ad2b5 | ||
|
|
58210f9232 | ||
|
|
44aec93861 | ||
|
|
85f1caeb14 | ||
|
|
ba534ac7c8 | ||
|
|
2421e79b60 | ||
|
|
ca6b002e4c | ||
|
|
5029c73096 | ||
|
|
4974f268a6 | ||
|
|
7b2fd2c6c9 | ||
|
|
3994fbbc86 | ||
|
|
32b100e6cb | ||
|
|
085f362ae3 | ||
|
|
ba5764ab39 | ||
|
|
f4ca743d66 | ||
|
|
164130ed22 | ||
|
|
9283ff3ab6 | ||
|
|
60a4fa66cf | ||
|
|
757cd19aff | ||
|
|
bda98029b4 | ||
|
|
671c6bb4c3 | ||
|
|
8f6d5dc775 | ||
|
|
0c4dc0afdf | ||
|
|
3be2fdd14a | ||
|
|
8f491470a1 | ||
|
|
dc5c790a49 | ||
|
|
93ee146d0e | ||
|
|
8d1b2bf8a5 | ||
|
|
a4d6863ee5 | ||
|
|
90d9299e51 | ||
|
|
f01fa3e02e | ||
|
|
68aa19445b | ||
|
|
ce69b6f6ee | ||
|
|
b9fa1813b2 | ||
|
|
81b1ed9ff3 | ||
|
|
66e40c013d | ||
|
|
683251eba3 | ||
|
|
c087d9e9e4 | ||
|
|
e156edb1d0 | ||
|
|
1d1a796b58 | ||
|
|
8e268d2816 | ||
|
|
495f544d4b | ||
|
|
63519faca0 | ||
|
|
29529daebd | ||
|
|
7f3783ec15 | ||
|
|
8425dbd0bc | ||
|
|
ac2f1624d7 | ||
|
|
0d812352be | ||
|
|
3500c239a0 | ||
|
|
3bc8512cf0 | ||
|
|
ed7c3bfe0e | ||
|
|
e062dffe6c | ||
|
|
e0a972c061 | ||
|
|
646c4747b4 | ||
|
|
b3d0cca0e6 | ||
|
|
27ff466cbc | ||
|
|
33de9befa1 | ||
|
|
dda7acaad5 | ||
|
|
1ef49991ff | ||
|
|
ae35c4731f | ||
|
|
2cca05a32a | ||
|
|
0704182de1 | ||
|
|
1d5ee6f74d | ||
|
|
d6c29c781e | ||
|
|
a43d2960ec | ||
|
|
e93f60e651 | ||
|
|
c668055159 | ||
|
|
4ce4a1c32c | ||
|
|
8ed84254cd | ||
|
|
ad65d01cbe | ||
|
|
49a99a98f4 | ||
|
|
3cf581b1b3 | ||
|
|
9a04528061 | ||
|
|
dcfe988820 | ||
|
|
47b0e79b1a | ||
|
|
7364e3b771 | ||
|
|
cf5d2e79b9 | ||
|
|
83741be445 | ||
|
|
bd06d48e56 | ||
|
|
76436b8820 | ||
|
|
19d5e535c0 | ||
|
|
f8c050395c | ||
|
|
373361d9c4 | ||
|
|
4c749f08c0 | ||
|
|
8d4b717518 | ||
|
|
5779f9bb0f | ||
|
|
f3a253a4a0 | ||
|
|
30724f6291 | ||
|
|
1e8ec47a99 | ||
|
|
cf0a0f0967 | ||
|
|
7b56bfae46 | ||
|
|
7bf4090efb | ||
|
|
143e46ae28 | ||
|
|
196b3f581f | ||
|
|
49f05c470a | ||
|
|
00881ea504 | ||
|
|
e8e2420042 | ||
|
|
910a03a835 | ||
|
|
956d63899c | ||
|
|
e1b9a77725 | ||
|
|
686010e050 | ||
|
|
13b6390df7 | ||
|
|
5eaf2d10e7 | ||
|
|
8529f3ba95 | ||
|
|
b08f247f32 | ||
|
|
242ddba326 | ||
|
|
bf16a54f5a | ||
|
|
7d744c54b4 | ||
|
|
68eaf6391a | ||
|
|
679d645738 | ||
|
|
e7f1bbf0f2 | ||
|
|
de79a4e9d8 | ||
|
|
c7a0b0d262 | ||
|
|
b2a648f5b5 | ||
|
|
a7f3ad42a4 | ||
|
|
7fd0c8b593 | ||
|
|
467a5f44ec | ||
|
|
057e87e6e5 | ||
|
|
a6e02dc45d | ||
|
|
5e1741fd48 | ||
|
|
76e09401ab | ||
|
|
75cbbfacb1 | ||
|
|
6be496f44e | ||
|
|
065104b8fe | ||
|
|
9bc3f72d8e | ||
|
|
a3bd39429c | ||
|
|
529762a21a | ||
|
|
3fb36b0c56 | ||
|
|
e25b194525 | ||
|
|
9f361fc0f8 | ||
|
|
b460dfc042 | ||
|
|
9d5e55f790 | ||
|
|
27de54b0df | ||
|
|
f222884e2d | ||
|
|
b6ecd6704c | ||
|
|
e50dc16b21 | ||
|
|
cef45338c9 | ||
|
|
8c19b754f9 | ||
|
|
db93856c07 | ||
|
|
7fbcf76973 | ||
|
|
e4bc32fbe2 | ||
|
|
2c7d6f9a74 | ||
|
|
1356e60fa3 | ||
|
|
fa38a6af6f | ||
|
|
e178bdc1ee | ||
|
|
0244ca1d97 | ||
|
|
2b95b3c83b | ||
|
|
b9447c2f49 | ||
|
|
b7b5ca519f | ||
|
|
aeb6a6c458 | ||
|
|
39e03b580b | ||
|
|
3a0a2411c7 | ||
|
|
38f5812191 | ||
|
|
ad6333654e | ||
|
|
32d7284c52 | ||
|
|
7afd92792b | ||
|
|
cc13af6a07 | ||
|
|
0d7957bc15 | ||
|
|
671fff2fde | ||
|
|
3429e3313b | ||
|
|
5d554c20d2 | ||
|
|
b9687bea65 | ||
|
|
348b429b5b | ||
|
|
e4be6b3ac2 | ||
|
|
2de45bec65 | ||
|
|
71235e4140 | ||
|
|
7f48a6f13b | ||
|
|
6fb3b26796 | ||
|
|
55ee8af808 | ||
|
|
95fead0b9f | ||
|
|
a2ccb29a97 | ||
|
|
eed5b11b5f | ||
|
|
b1dab29214 | ||
|
|
cac5d670b3 | ||
|
|
65eb0d8125 | ||
|
|
0a7487e32d | ||
|
|
e7f5b801be | ||
|
|
398ff4fe82 | ||
|
|
966f75d4fb | ||
|
|
f3845c3ae0 | ||
|
|
c5a7a522a1 | ||
|
|
c6502fa225 | ||
|
|
52a451ccd2 | ||
|
|
5c96f91123 | ||
|
|
7abdf90a0e | ||
|
|
1d768548cd | ||
|
|
8aac1ce2ee | ||
|
|
e195b10ede | ||
|
|
28c10e29d0 | ||
|
|
569c69ba36 | ||
|
|
57f41b1a90 | ||
|
|
3ff08b91a6 | ||
|
|
f9b3452c6a | ||
|
|
441a3e3612 | ||
|
|
9f927c1a2e | ||
|
|
863962d5cf | ||
|
|
0cddc5b4eb | ||
|
|
b066da4e65 | ||
|
|
2ac7c4f2de | ||
|
|
98dace883e | ||
|
|
3fd513f32a | ||
|
|
7e21663cb5 | ||
|
|
61b3d5ccb5 | ||
|
|
397b35f891 | ||
|
|
20688a30ab | ||
|
|
b1a5434537 | ||
|
|
579e3ca96b | ||
|
|
197fd585bd | ||
|
|
f88aa8045a | ||
|
|
a2bf03ccea | ||
|
|
17cce37a72 | ||
|
|
dd53efc196 | ||
|
|
95b4045f48 | ||
|
|
09f463ddae | ||
|
|
f0b6f5450c | ||
|
|
693204265e | ||
|
|
ad2618b8eb | ||
|
|
df158fa5cf | ||
|
|
58c57d43ab | ||
|
|
9497ba9d49 | ||
|
|
e617da5aae | ||
|
|
6f1c21aea2 | ||
|
|
ababfedb66 | ||
|
|
693fd4a36b | ||
|
|
d9cf3c2a0e | ||
|
|
53fba5f8a6 | ||
|
|
12d4a19fce | ||
|
|
76b218cb6e | ||
|
|
b3cfda6389 | ||
|
|
c330fdc1a1 | ||
|
|
8bd550825f | ||
|
|
9251486567 | ||
|
|
5c851cba19 | ||
|
|
6aa90a75bd | ||
|
|
5cb8fabb7d | ||
|
|
436bc265e6 | ||
|
|
dab1bb005a | ||
|
|
319f286562 | ||
|
|
3f6b470770 | ||
|
|
2ddbee008f | ||
|
|
c4272645ce | ||
|
|
622b45e2a9 | ||
|
|
490903da5a | ||
|
|
51f5b6debb | ||
|
|
0228cfcf4a | ||
|
|
7dd3e5e683 | ||
|
|
5c2fda30b2 | ||
|
|
bad0d653a1 | ||
|
|
c7c7132a66 | ||
|
|
ef1d4e1dcf | ||
|
|
67e25fcbd8 | ||
|
|
ef26e2d1f8 | ||
|
|
9db2512418 | ||
|
|
fe23fcab12 | ||
|
|
0f8916e37c | ||
|
|
ecd975550b | ||
|
|
4124672edf | ||
|
|
1019b2ea94 | ||
|
|
57e4b81d13 | ||
|
|
1827a58de0 | ||
|
|
01e853c2ce | ||
|
|
e8214a3384 | ||
|
|
f920e5d068 | ||
|
|
7f1f056f16 | ||
|
|
22a9d7ad25 | ||
|
|
5e429447b1 | ||
|
|
36e82c84ae | ||
|
|
c7dc6c0e00 | ||
|
|
44c98c7e3f | ||
|
|
715ad2730c | ||
|
|
40d605a385 | ||
|
|
517af84b0a | ||
|
|
e9047df607 | ||
|
|
318e561905 | ||
|
|
c38db57f3c | ||
|
|
761bcbd751 | ||
|
|
962e4864a1 | ||
|
|
9dae1475ef | ||
|
|
e7d20a0422 | ||
|
|
81711ba621 | ||
|
|
d33ff48608 | ||
|
|
fd47c5bb32 | ||
|
|
b4ced28d7c | ||
|
|
3598fbcef9 | ||
|
|
850586cfe7 | ||
|
|
2a9f250ec7 | ||
|
|
4e78286eaf | ||
|
|
714a5be6cc | ||
|
|
f200f739d8 | ||
|
|
64a75d6d77 | ||
|
|
ba1f645030 | ||
|
|
489b0f2115 | ||
|
|
2ca45412ed | ||
|
|
c7dd366c1a | ||
|
|
7732ce7fe3 | ||
|
|
8d42dd7a8b | ||
|
|
e20121e6c7 | ||
|
|
b5ae4adde1 | ||
|
|
1f73196bf9 | ||
|
|
8338d8bfce | ||
|
|
1748935997 | ||
|
|
adfcb09190 | ||
|
|
9762403c26 | ||
|
|
d3e095004c | ||
|
|
b8cf1a369f | ||
|
|
13a51b8f20 | ||
|
|
8a2b5991d6 | ||
|
|
f4ffead6fa | ||
|
|
64e45b1287 | ||
|
|
b66a39eb6e | ||
|
|
b7cd48efdd | ||
|
|
da0e29e92f | ||
|
|
9726e74da5 | ||
|
|
fb5ac5d286 | ||
|
|
5d0f205df8 | ||
|
|
418f53c647 | ||
|
|
32fcc74395 | ||
|
|
392ea5529f | ||
|
|
b0528dbe5e | ||
|
|
e6b7ab9db8 | ||
|
|
33d0e4e1fb | ||
|
|
7ce4bc76bf | ||
|
|
c77d276997 | ||
|
|
a4bcf9bb60 | ||
|
|
227f7838d6 | ||
|
|
a257d758a5 | ||
|
|
e9ed065afc | ||
|
|
7908cffab4 | ||
|
|
e532b24d82 | ||
|
|
713d0e8966 | ||
|
|
0cc15ba4b9 | ||
|
|
96b562ae29 | ||
|
|
d7d2b6ef50 | ||
|
|
63a50e500d | ||
|
|
7751c4f549 | ||
|
|
11e7f6278d | ||
|
|
010fd97aa5 | ||
|
|
3bdfbd6d1e | ||
|
|
dad428b49e | ||
|
|
5df80a262b | ||
|
|
4be862b02c | ||
|
|
72f0be09c0 | ||
|
|
41ef851eb5 | ||
|
|
65677445b4 | ||
|
|
18089ce360 | ||
|
|
543c383302 | ||
|
|
8011c17fd3 | ||
|
|
96c054f775 | ||
|
|
c41b6b2967 | ||
|
|
0b2d775d3d | ||
|
|
a8e7b5b6a1 | ||
|
|
3ca6344e57 | ||
|
|
bfae20f404 | ||
|
|
c598b3ac16 | ||
|
|
ff55850562 | ||
|
|
b75f2df3d4 | ||
|
|
a9d7509036 | ||
|
|
0ad980c667 | ||
|
|
6aaa7bc345 | ||
|
|
f0daa5c6d9 | ||
|
|
58b26398de | ||
|
|
301330ff88 | ||
|
|
a3d821c695 | ||
|
|
52f1135c8f | ||
|
|
b8d3c75a6c | ||
|
|
25456939b3 | ||
|
|
e93f1c00c6 | ||
|
|
d40c5e2624 | ||
|
|
6e99ecdb01 | ||
|
|
03fc9eb415 | ||
|
|
039d6a1668 | ||
|
|
d9ecd30cc4 | ||
|
|
f8026b7453 | ||
|
|
f876916381 | ||
|
|
5b292d5348 | ||
|
|
bceb56b2ba | ||
|
|
110fd64bbd | ||
|
|
5b7537ecd2 | ||
|
|
ca58966a0d | ||
|
|
a94a226691 | ||
|
|
2c34ea1be4 | ||
|
|
51e4dbaba0 | ||
|
|
6d8a643edb | ||
|
|
6987855e95 | ||
|
|
43584058e9 | ||
|
|
c7fa1fa99f | ||
|
|
c5107b8989 | ||
|
|
824fdad6c1 | ||
|
|
99c7ddc3a8 | ||
|
|
a3e9ae20d9 | ||
|
|
f14b742392 | ||
|
|
8d00d54f2f | ||
|
|
9229918fd7 | ||
|
|
b4e42dd43f | ||
|
|
a10e0b6d8e | ||
|
|
8c86784cae | ||
|
|
06d94f2169 | ||
|
|
cea2419529 | ||
|
|
29695934ed | ||
|
|
1a5037de1a | ||
|
|
d372861f03 | ||
|
|
c3fe54dfab | ||
|
|
24726b0c64 | ||
|
|
3bef247fcc | ||
|
|
2442adabe5 | ||
|
|
4f747e80f0 | ||
|
|
015c117e37 | ||
|
|
31e1cd13e2 | ||
|
|
47596de32f | ||
|
|
a3157908a8 | ||
|
|
208a3a3717 | ||
|
|
47388f2121 | ||
|
|
ce06e7ba77 | ||
|
|
e1725b26fa | ||
|
|
7547238723 | ||
|
|
dbf8593b5b | ||
|
|
2306c0e9d7 | ||
|
|
9e3788864b | ||
|
|
336e559718 | ||
|
|
f0e2c04582 | ||
|
|
8193641d2d | ||
|
|
7ba0d505af | ||
|
|
90317cbc5d | ||
|
|
7222abda70 | ||
|
|
93769053cc | ||
|
|
003be7fe32 | ||
|
|
7d03dc004e | ||
|
|
0f66b352e9 | ||
|
|
483502fe10 | ||
|
|
b62afe783d | ||
|
|
5841e290ac | ||
|
|
16af3f7d11 | ||
|
|
adffe9fba6 | ||
|
|
3ecc71a099 | ||
|
|
1391f774cf | ||
|
|
46b4abc08b | ||
|
|
b23d2c8beb | ||
|
|
8c598f8bff | ||
|
|
5c12ee2474 | ||
|
|
f0a7db1c7e | ||
|
|
55e127a6d5 | ||
|
|
ea971db849 | ||
|
|
57ca42e10f | ||
|
|
66ec203e70 | ||
|
|
4ef6a3af03 | ||
|
|
b030a7a140 | ||
|
|
8fb395bb9e | ||
|
|
d46bd1cd63 | ||
|
|
dadfd6e94a | ||
|
|
fb20eae7fc | ||
|
|
ac209557dd | ||
|
|
cd9b495663 | ||
|
|
05f07d2eba | ||
|
|
ee37386183 | ||
|
|
ca332dfc96 | ||
|
|
3e8a800a96 | ||
|
|
04e564dec5 | ||
|
|
40ac4a2d68 | ||
|
|
5ca953b10f | ||
|
|
bdeb45b335 | ||
|
|
9f39cc0626 | ||
|
|
9efefc742b | ||
|
|
25641a7e96 | ||
|
|
37e64f38ac | ||
|
|
cbec84d93d | ||
|
|
e40416ebf6 | ||
|
|
7890b6fc87 | ||
|
|
26bd73fec6 | ||
|
|
dbb95f338e | ||
|
|
a81fe09722 | ||
|
|
a14bc7685d | ||
|
|
5ad332f846 | ||
|
|
8298f6f982 | ||
|
|
e09d62c435 | ||
|
|
8579756c05 | ||
|
|
6048db9005 | ||
|
|
87e3b97057 | ||
|
|
6841184abc | ||
|
|
dac0b6fc4f | ||
|
|
db6efcf7e5 | ||
|
|
eef51c3d6b | ||
|
|
29a40a1909 | ||
|
|
4e1d684027 | ||
|
|
658fd1ba8d | ||
|
|
5f7de8bf5b | ||
|
|
f986cb84f3 | ||
|
|
a391c4b12b | ||
|
|
9669932516 | ||
|
|
f921ea9f7d | ||
|
|
da20e867f3 | ||
|
|
5ec9375760 | ||
|
|
4e85935386 | ||
|
|
8bfe7d76ea | ||
|
|
6b7d77a7a0 | ||
|
|
b01add793c | ||
|
|
08362f90d9 | ||
|
|
9ae3c2f7bd | ||
|
|
bab4957d1c | ||
|
|
92df58dab6 | ||
|
|
89ea16ffaa | ||
|
|
ad9788d853 | ||
|
|
d3663f76b5 | ||
|
|
1585ad97ff | ||
|
|
46a99e9022 | ||
|
|
f7c6d9fb2a | ||
|
|
8efbeb68a1 | ||
|
|
1eddce79dd | ||
|
|
9d04acdaaa | ||
|
|
c7da0b117e | ||
|
|
537284418c | ||
|
|
ae1fcb4542 | ||
|
|
7cdffea872 | ||
|
|
f15420b3e1 | ||
|
|
d183eb1e31 | ||
|
|
4522738188 | ||
|
|
901980b3ab | ||
|
|
fb179417ef | ||
|
|
315927cc9b | ||
|
|
0eea23a4f8 | ||
|
|
d3d7c3d486 | ||
|
|
a7487bb4f8 | ||
|
|
0cb9c53033 | ||
|
|
b0d519f730 |
No files matched your search
Binary file not shown.
+5
-5
@@ -197,7 +197,7 @@ MAINTENANCE: Unknown
|
||||
STATUS: Unknown
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: bz2
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working
|
||||
SINCE: 4.0.3
|
||||
@@ -215,7 +215,7 @@ STATUS: Working
|
||||
SINCE: 4.0.6
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: calendar
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -235,7 +235,7 @@ STATUS: Experimental
|
||||
SINCE: 4.0.5
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: ctype
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
|
||||
MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -469,7 +469,7 @@ MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: xslt
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working (mostly)
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -489,7 +489,7 @@ MAINTENANCE: Maintained
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: zziplib
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
|
||||
PRIMARY MAINTAINER: Hartmut Holzgraefe <hholzgra@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working
|
||||
SINCE: 4.0.5
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.0
|
||||
Copyright (c) 1999 - 2002 The PHP Group. All rights reserved.
|
||||
The PHP License, Version 3.0
|
||||
Copyright (c) 1999 - 2003 The PHP Group. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ install-modules: build-modules
|
||||
$(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR) && \
|
||||
echo "Installing shared extensions: $(INSTALL_ROOT)$(EXTENSION_DIR)/" && \
|
||||
rm -f modules/*.la && \
|
||||
cp modules/* $(INSTALL_ROOT)$(EXTENSION_DIR) >/dev/null 2>&1 || true
|
||||
$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR) >/dev/null 2>&1 || true
|
||||
|
||||
install-tester:
|
||||
@echo "Installing regression tester: $(INSTALL_ROOT)$(PEAR_INSTALLDIR)/"
|
||||
@@ -49,7 +49,7 @@ install-su: install-pear install-tester
|
||||
test: $(SAPI_CLI_PATH)
|
||||
@TEST_PHP_EXECUTABLE=$(top_builddir)/$(SAPI_CLI_PATH) \
|
||||
TEST_PHP_SRCDIR=$(top_srcdir) \
|
||||
CC=$(CC) \
|
||||
CC="$(CC)" \
|
||||
$(top_builddir)/$(SAPI_CLI_PATH) -d 'open_basedir=' -d 'safe_mode=0' $(top_srcdir)/run-tests.php $(TESTS)
|
||||
|
||||
clean:
|
||||
|
||||
@@ -1,18 +1,97 @@
|
||||
PHP 4 NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
? ? ??? 2002, Version 4.3.0
|
||||
- ATTENTION! "make install" will *by default* install the CLI SAPI binary in
|
||||
{PREFIX}/bin/php. If you don't disable the CGI binary, it will be
|
||||
installed as {PREFIX}/bin/php-cgi.
|
||||
- Removed extensions: (Jan, Jani)
|
||||
? ? ??? 200?, Version 5.0.0
|
||||
- Fixed bug #17448 (Print the message when OCI_SUCCESS_WITH_INFO is returned).
|
||||
- Enhanced jpeg 2000 support for GetImageSize(). (marcus, Adam Wright)
|
||||
- Fixed bug #20155: xmlrpc compile problem with zendengine2 (Derick, Jan
|
||||
Schneider)
|
||||
- Implemented string.base64 stream filter. (Moriyoshi)
|
||||
- Added domxml_node_get_path() (Lukas Schröder)
|
||||
- Added iconv related functions (Moriyoshi)
|
||||
. iconv_strlen()
|
||||
. iconv_substr()
|
||||
. iconv_strpos()
|
||||
. iconv_strrpos()
|
||||
. iconv_mime_decode()
|
||||
. iconv_mime_encode()
|
||||
- Removed support for libmcrypt 2.2.x to allow cleaner code. Another reason
|
||||
to upgrade libmcrypt to a 2.5.x series as the older ones have too many bugs
|
||||
to be safely used with PHP. (Derick)
|
||||
- Fixed bug #20442 (upgraded bundled expat to 1.95.5). (Ilia)
|
||||
- Made uniqid() parameters to be optional and allow any prefix length. (Marcus)
|
||||
- Improved array_search() so that it can accept objects as a needle under
|
||||
ZendEngine2. (Moriyoshi)
|
||||
- Added new range() functionality (Ilia)
|
||||
. Support for float modifier.
|
||||
. Detection of numeric values inside strings passed as high & low.
|
||||
. Proper handle the situations where high == low.
|
||||
- Added imagefilter() function which allows application of various filters.
|
||||
This function is only available with bundled GD. (Pierre-Alain Joye, Ilia)
|
||||
- Added imageistruecolor(), only available with GD2+(Pierre-Alain Joye)
|
||||
- Added antialiased drawing support (Pierre-Alain Joye, Ilia), available only
|
||||
with bundled GD:
|
||||
. imageantialias($im, $flag) to (de)active antialias
|
||||
. imageline antialias support
|
||||
. imagepolygon antialias support
|
||||
|
||||
27 Dec 2002, Version 4.3.0
|
||||
- Make PHP_AUTH_* variables not available in safe mode under Apache when an
|
||||
external basic auth mechanism is used. (Philip)
|
||||
- Aliased dba_popen() to dba_open() until 4.3.1 when persistent STDIO streams
|
||||
are introduced. (Andrei)
|
||||
- Fixed a security bug in the bundled MySQL library. (Georg, Stefan)
|
||||
- If you don't specify building any other SAPI "make install" will install the
|
||||
CGI SAPI binary in {PREFIX}/bin/php. If you want to install CLI SAPI in that
|
||||
location use "make install-cli" after "make install" or add --disable-cgi
|
||||
to your configure options. In the Windows distribution CLI SAPI is included
|
||||
in the "cli" folder. (Edin)
|
||||
- Removed extensions: (Jan, Jani, Sebastian)
|
||||
. ext/aspell
|
||||
. ext/ccvs
|
||||
. ext/cybercash
|
||||
. ext/icap
|
||||
. sapi/fastcgi
|
||||
. sapi/fhttpd
|
||||
- Moved ext/vpopmail to PECL. (James)
|
||||
- Moved extensions to PECL (http://pear.php.net/): (James, Derick)
|
||||
. ext/vpopmail
|
||||
. ext/cybermut
|
||||
- ZLIB extension is now built-in in the Windows distribution.
|
||||
External extension (php_zlib.dll) has been removed. (Edin)
|
||||
- Fix a crash when using invalid color index with imagecolortransparent()
|
||||
(Pierre-Alain Joye).
|
||||
- Fixed bug #20987 (no handling for client certificates). (Ilia)
|
||||
- Fixed bug #21039 (crash when not supplying an IV to mcrypt_generic_init).
|
||||
(Derick)
|
||||
- Fixed bug #20936 (openssl_pkey_get was broken). (jeroen@derks.it, Wez)
|
||||
- Fixed bug #20927 (wordwrap crash). (Ilia)
|
||||
- Fixed bug #20796 (when register_globals is on & arrays with same names are
|
||||
passed via get/post/cookie the data inside $_GET/$_POST/$_COOKIE can would be
|
||||
corrupted). (Ilia)
|
||||
- Fixed bug #20725 (if the upload directory cannot be written to, the POST data
|
||||
after the uploaded file is lost). (Ilia)
|
||||
- Fixed bug #20865 (array_key_exists() fails to find NULL key). (Ilia)
|
||||
- Fixed bug #20812 (ftp_get returned NULL on success, instead of TRUE). (Ilia)
|
||||
- Fixed bug #20785 (crash when using pdf_open_memory_image() to load a
|
||||
true-color image). (Ilia)
|
||||
- Fixed a crash when converting between true-color images (png/jpeg) and
|
||||
gd1/gd2 image formats, png/jpeg -> gd1/gd2 -> png/jpeg conversion now
|
||||
works correctly. (Ilia, (Pierre-Alain Joye).
|
||||
- Fixed a memory leak in the bundled GD library inside
|
||||
gdImageTrueColorToPalette(). (Ilia)
|
||||
- Fixed bug #12776 (array_walk crash). (Moriyoshi)
|
||||
- Fixed bug #20934 (htmlspecialchars returns latin1 from UTF-8). (Moriyoshi)
|
||||
- Fixed bugs #20270, #15702, #18600 (segfaults in ext/java). (Tony J. White)
|
||||
- Made bcmath extension thread safe. (Sander)
|
||||
- Fixed bug #19566 (get_declared_classes() segfaults). (Moriyoshi, Marcus, Andi)
|
||||
- Fixed bug #20381 (array_merge_recursive mangles input arrays). (Moriyoshi)
|
||||
- Added -n command switch to cli and cgi version which allows to skip php.ini
|
||||
parsing at startup. (Marcus, Wez)
|
||||
- Fixed bug #19689 (absolute paths like /test/dir/ not working correctly).
|
||||
(Ilia)
|
||||
- Added "neutral" language entry to mbstring spec. (Moriyoshi)
|
||||
- Changed bundled gd library to consider php.ini option memory_limit. (Marcus)
|
||||
- Modified log() to accept multiple bases. (Jason)
|
||||
- Fixed bugs #16190/18746 (ext/db: flatfile support with windows). (Marcus)
|
||||
- Added gd_info() which returns an array of gd support information. (Marcus)
|
||||
- Implemented features/changes requested in Bug #16960 (Timm):
|
||||
. Added a new function sybase_unbuffered_query()
|
||||
@@ -47,6 +126,7 @@ PHP 4 NEWS
|
||||
. Added optional skip parameter to dba_fetch() to support multiple key-value
|
||||
pairs with the same key for cdb handler.
|
||||
. Added locking for those handlers that do not have their own locking.
|
||||
. Added support for magic_quotes_runtime php.ini option.
|
||||
. Added flatfile support what finally makes ext/db deprecated.
|
||||
- Added imagerotate() which is available only when bundled libgd is used.
|
||||
(Pierre-Alain Joye, Ilia)
|
||||
@@ -62,7 +142,6 @@ PHP 4 NEWS
|
||||
- Added dbx_escape_string() function to dbx module. (Marc)
|
||||
- Added Oracle (oci8) support to dbx module. (Marc)
|
||||
- Updated FDF extension to work with Adode fdftk 5.0. (Hartmut)
|
||||
- Made raw POST data to be available also as "php://input" stream. (Hartmut)
|
||||
- Added mb_strtolower() and mb_strtoupper(). (Moriyoshi)
|
||||
- Fixed an infinite loop in setlocale() when only invalid locale names
|
||||
were passed in the array. (patch by Pal Loberg, pallo@initio.no)
|
||||
@@ -126,28 +205,63 @@ PHP 4 NEWS
|
||||
- Fixed bug #19366 (gdImageFill crashes when x & y are outside of
|
||||
the image's boundries). (Ilia)
|
||||
- Fixed bug #13936 (__FILE__ constant didn't contain full path). (Ilia)
|
||||
- Renamed:
|
||||
socket_set_timeout() -> stream_set_timeout()
|
||||
socket_set_blocking() -> stream_set_blocking()
|
||||
set_file_buffer() -> stream_set_write_buffer()
|
||||
socket_get_status() -> stream_get_meta_data()
|
||||
As these functions can (in theory) work on any type of stream. (Wez)
|
||||
- Added stream_context_create(), stream_context_set_params() and
|
||||
stream_context_set_option and added an optional fourth parameter to
|
||||
fopen() which accepts a stream context. Contexts allow sharing of
|
||||
information between streams (a kind of "session") and setting notification
|
||||
callbacks. (Wez)
|
||||
- Added stream_filter_prepend() and stream_filter_append() which apply
|
||||
a filter to either the top or the bottom of the filter stack for a stream.
|
||||
Implemented "string.rot13" filter as an example; more filters are expected
|
||||
to follow in later releases and other extensions. (Wez)
|
||||
- Added stream_select() which works like socket_select but works on streams
|
||||
returned by fopen(), fsockopen() and pfsockopen() instead. (Wez)
|
||||
- PHP now has a new stream system that allows it to do some clever stuff with
|
||||
fopen() and fsockopen(). As a result:
|
||||
. URL wrappers natively supports https:// URLs if you have compiled
|
||||
OpenSSL support into PHP (shared extension does not support this).
|
||||
. Added support for fopen("ftps://...", ...) which allows to connect to FTP
|
||||
servers via SSL. (Stefan Esser)
|
||||
. fsockopen() adds support for ssl:// and tls:// connections via TCP/IP
|
||||
. copy($srcfilename, $destfilename) can now be used with URL wrappers
|
||||
. zlib wrappers/streams can be used even on systems without fopencookie()
|
||||
. Changed 'zlib:' fopen wrapper to 'compress.zlib://' and deprecate
|
||||
'zlib:' to avoid ambiguities when filenames have ':' characters. (Wez)
|
||||
. Added 'compress.bzip2://' stream and wrapper support.
|
||||
. Added user-space streams - it is now possible to define a class in PHP
|
||||
code and register it as a URL wrapper. (stream_register_wrapper)
|
||||
. Most extensions now support streams when passing files, which means
|
||||
that those extensions will now also support URL wrappers. (Wez)
|
||||
. Added URL-wrapper support to exif. (Marcus)
|
||||
. Added memory stream support. (Marcus)
|
||||
. Renamed:
|
||||
socket_set_timeout() -> stream_set_timeout()
|
||||
socket_set_blocking() -> stream_set_blocking()
|
||||
set_file_buffer() -> stream_set_write_buffer()
|
||||
socket_get_status() -> stream_get_meta_data()
|
||||
As these functions can (in theory) work on any type of stream. (Wez)
|
||||
. Raw POST data is now available as "php://input" stream. (Hartmut)
|
||||
. fopen("php://output", "wb") returns a stream that writes to the output
|
||||
buffer (like echo and print). (Wez)
|
||||
. Added stream_context_create(), stream_context_set_params() and
|
||||
stream_context_set_option and added an optional fourth parameter to
|
||||
fopen() which accepts a stream context. Contexts allow sharing of
|
||||
information between streams (a kind of "session") and setting
|
||||
notification callbacks. (Wez)
|
||||
. Made the "User-Agent" header sent by http:// and https:// wrappers
|
||||
configurable in php.ini or via a stream context. (Sterling)
|
||||
. Added stream_filter_prepend() and stream_filter_append() which apply
|
||||
a filter to either the top or the bottom of a stream filter stack.
|
||||
Implemented "string.rot13" filter as an example; more filters are
|
||||
expected to follow in later releases and other extensions. (Wez)
|
||||
. Added stream_select() which works like socket_select but works on
|
||||
streams returned by fopen(), fsockopen() and pfsockopen() instead. (Wez)
|
||||
. Added STDIN, STDOUT and STDERR constants for CLI sapi reflecting opened
|
||||
streams to their respective standard I/O counterparts. (Edin)
|
||||
. Added php.ini option "auto_detect_line_endings" which enables PHP to
|
||||
detect Macintosh, Unix and Dos end-of-line characters in fgets() and
|
||||
file(). Fixes bugs #16521 and #16708. (Wez)
|
||||
. Fixed include(), require() and GD functions to work with remote files
|
||||
under win32.
|
||||
Fixed bug #18609 (ImageCreateFromJPEG can't fetch from a URL). (Wez)
|
||||
- Fixed bug #18022 (fopen does not work with php://stdin anymore on Solaris).
|
||||
(Wez)
|
||||
- Added php.ini option "default_socket_timeout" to set the timeout limit for
|
||||
PHP network streams. (kalowsky, ilia@prohost.org, Wez)
|
||||
- Added file_get_contents() which returns the contents of a file as a string.
|
||||
This function also supports the URL wrappers. (Wez)
|
||||
- Fixed bug #19595 (Missing functions for GD2 format handling). (Edin)
|
||||
- Fixed bug #19633 (Wrong directories in ext/ldap/config.m4). (Derick)
|
||||
- Fixed bugs #17274 and #19627 (segfault in sem_remove). (Wez)
|
||||
- Fixed bug #18022 (fopen does not work with php://stdin anymore on Solaris).
|
||||
(Wez)
|
||||
- Added mb_convert_case() function to the mbstring extension which can convert
|
||||
strings between upper, lower and title case using Unicode mappings.
|
||||
Fixed bug #19257 (strtolower & strtoupper does not work for UTF-8 strings).
|
||||
@@ -157,13 +271,8 @@ PHP 4 NEWS
|
||||
- Fixed bug #18556 (Scripting Engine, problem with locales like tr_TR). (Ilia)
|
||||
- Changed y2k_compliance to default to 1 now. (Sascha)
|
||||
- Added platform independent socket error constants for better error handling. (Jason)
|
||||
- Fixed include(), require() and GD functions to work with remote files under
|
||||
win32. Fixed bug #18609 (ImageCreateFromJPEG can't fetch from a URL. (Wez)
|
||||
- Update output of phpinfo() to use more CSS to reduce the file size, do
|
||||
proper HTML escaping, and make it XHTML compliant. (Colin)
|
||||
- Added php.ini option "auto_detect_line_endings" which enables PHP to detect
|
||||
Macintosh, Unix and Dos end-of-line characters in fgets() and file().
|
||||
Fixes bugs #16521 and #16708. (Wez)
|
||||
- Fixed compile errors in the FriBidi extension (Bug #16414). (Tal)
|
||||
- Fixed bugs #7472, #12120 and #12989 as well as other potential problems
|
||||
with strip_tags() function. (Ilia)
|
||||
@@ -185,12 +294,6 @@ PHP 4 NEWS
|
||||
flag. (Andrei)
|
||||
- Fixed a build failure with the OCI8 extension on Tru64.
|
||||
(Patch by Michael Mauch, micahel.mauch@gmx.de)
|
||||
- Added support for fopen("ftps://...", ...) which allows to connect to FTP
|
||||
servers via SSL. (Stefan Esser)
|
||||
- Made the "User-Agent" header sent by the fopen wrappers to be configurable
|
||||
in php.ini or via a stream context. (Sterling)
|
||||
- Added support for fopen("php://output", "wb") which returns a stream that
|
||||
writes to the output buffer (like echo and print). (Wez)
|
||||
- Added --disable-all configure option. (Jani)
|
||||
- Backported debug_backtrace() from ZendEngine2. (Thies)
|
||||
- Added html-free phpinfo() output for CLI. (Jan)
|
||||
@@ -211,7 +314,7 @@ PHP 4 NEWS
|
||||
- Added XsltObject->result_dump_mem($result) for returning xslt-result directly
|
||||
into a string and XsltObject->result_dump_file($result,$file[,$compression])
|
||||
for dumping into a file. (morus.walter@web.de, chregu)
|
||||
- Made mime_magic, FriBidi and ZIP extensions available on Windows. (Edin)
|
||||
- Made mime_magic and ZIP extensions available on Windows. (Edin)
|
||||
- Added xslt_backend_version() and xslt_backend_name() for getting
|
||||
information about the processor backend. (chregu)
|
||||
- Added php.ini option "allow_webdav_methods" to allow handling of
|
||||
@@ -242,8 +345,6 @@ PHP 4 NEWS
|
||||
- Fixed a bug in ODBC where closing the module caused a crash in the Windows
|
||||
executable. (kalowsky)
|
||||
- Fixed memory leaks in pack() and unpack(). (Patch by ilia@prohost.org)
|
||||
- Added php.ini option "default_socket_timeout" to set the timeout limit for
|
||||
PHP streams. (kalowsky, ilia@prohost.org, Wez)
|
||||
- Added URLs to error messages which direct to a page describing the error or
|
||||
function in question. (Derick, Wez, Marcus)
|
||||
- Added odbc_data_source() functionality to identify DB ServerName, and a
|
||||
@@ -301,7 +402,6 @@ PHP 4 NEWS
|
||||
condition. Also fixed host resolution error messages on win32. (Jason)
|
||||
- Added optional 3rd parameter 'recursive' to ftp_rawlist() which will
|
||||
do 'LIST -R' instead of 'LIST'. (Jani)
|
||||
- Disabled the fifth parameter in mail() when safe-mode is turned on. (Derick)
|
||||
- Changed getimagesize() to always set unknown fields to 0 and added support
|
||||
for iff imagetype. (Marcus)
|
||||
- Added runtime Apache2 thread check to ensure we don't run a non-threaded
|
||||
@@ -338,8 +438,6 @@ PHP 4 NEWS
|
||||
the unix socket location. (e.g. NFS compiles, etc.) (James Cox)
|
||||
- Fixed is_a() to properly work on extension registered classes. (Andrei)
|
||||
- Added new constants: PHP_PREFIX and PHP_SHLIB_SUFFIX. (Stig)
|
||||
- Added STDIN, STDOUT and STDERR constants for CLI sapi reflecting opened
|
||||
streams to their respective I/O counterparts. (Edin)
|
||||
- Added pctnl_alarm() function. (Edin)
|
||||
- If zlib.output_compression is enabled and a page is compressed
|
||||
a "Vary: Accept-Encoding" header is now added. (Stefan)
|
||||
@@ -376,7 +474,6 @@ PHP 4 NEWS
|
||||
when dealing with built-in extensions. (Sebastian)
|
||||
- Added large OID value (2^31 to 2^32) support for pg_lo_import(),
|
||||
pg_lo_unlink(), pg_lo_open() and pg_lo_export(). (Yasuo)
|
||||
- Changed the mbstring extension to be enabled by default. (Yasuo)
|
||||
- Fixed mixing OCIPlogon() and OCINLogon() to not leak Oracle-Sessions. (Thies)
|
||||
- Added php.ini options for EXIF extension to encode and decode Unicode/JIS
|
||||
user comments. (Marcus)
|
||||
@@ -402,23 +499,6 @@ PHP 4 NEWS
|
||||
available at http://www.jtatesoftware.com/cracklib/. (jtate)
|
||||
- Added mysql_info() function. (Jan)
|
||||
- Added mysql_list_processes() and mysql_stat() functions. (Georg)
|
||||
- Added file_get_contents() which returns the contents of a file as a string.
|
||||
This function also supports the URL wrappers. (Wez)
|
||||
- Changed 'zlib:' fopen wrapper to 'compress.zlib://' to avoid ambiguities
|
||||
when filenames have ':' characters. (Wez)
|
||||
- Added URL-wrapper support to exif. (Marcus)
|
||||
- PHP now has a new stream system that allows it to do some clever stuff with
|
||||
fopen() and fsockopen(). As a result:
|
||||
. URL wrappers natively supports https:// URLs
|
||||
. fsockopen() adds support for ssl:// and tls:// connections via TCP/IP
|
||||
. copy($srcfilename, $destfilename) can now be used with URL wrappers
|
||||
. zlib wrappers/streams can be used even on systems without fopencookie()
|
||||
. Added 'compress.bzip2://' stream and wrapper support.
|
||||
. Added user-space streams - it is now possible to define a class in PHP
|
||||
code and register it as a URL wrapper. (stream_register_wrapper)
|
||||
. Most extensions now support streams when passing files, which means
|
||||
that those extensions will support URL wrappers. (Wez)
|
||||
. Added memory stream support. (Marcus)
|
||||
- Fixed memory allocation problem on systems that have iconv() support in libc.
|
||||
(Yasuo)
|
||||
- Made var_dump() handle recursive structures better. (Yasuo, Derick)
|
||||
@@ -429,6 +509,7 @@ PHP 4 NEWS
|
||||
process is now more portable and less resource-consuming. (Sascha)
|
||||
|
||||
06 Sep 2002, Version 4.2.3
|
||||
- Disabled the fifth parameter in mail() when safe-mode is turned on. (Derick)
|
||||
- Enable UTF8 modifier support for PCRE on win32. (Wez, Edin)
|
||||
- Enabled strcoll() on win32. (Markus)
|
||||
- Fixed possible ASCII control char injection in mail(). (Stefan Esser)
|
||||
|
||||
@@ -42,14 +42,14 @@ Type specifiers
|
||||
z - the actual zval
|
||||
|
||||
The following characters also have a meaning in the specifier string:
|
||||
| - indicates that the remaining parameters are optional, they
|
||||
should be initialized to default values by the extension since they
|
||||
will not be touched by the parsing function if they are not
|
||||
passed to it.
|
||||
/ - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows
|
||||
! - the parameter it follows can be of specified type or NULL (only applies
|
||||
to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results
|
||||
pointer is set to NULL as well.
|
||||
| - indicates that the remaining parameters are optional, they
|
||||
should be initialized to default values by the extension since they
|
||||
will not be touched by the parsing function if they are not
|
||||
passed to it.
|
||||
/ - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows
|
||||
! - the parameter it follows can be of specified type or NULL (only applies
|
||||
to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results
|
||||
pointer is set to NULL as well.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
@@ -88,6 +88,11 @@ If you are patching PEAR, send the patch to pear-dev@lists.php.net.
|
||||
|
||||
Please add the prefix "[PATCH]" to your email subject and make sure
|
||||
to include the patch as a MIME attachment even if it is short.
|
||||
|
||||
NOTE: only MIME attachments of type 'text/*' are accepted. The
|
||||
easiest way to acclomplish this, is to make the extension
|
||||
'.txt'.
|
||||
|
||||
Test scripts should be included in the same email.
|
||||
Explain what has been fixed/added/changed by your patch.
|
||||
|
||||
|
||||
+2
-139
@@ -1,6 +1,6 @@
|
||||
[IMPORTANT NOTICE]
|
||||
------------------
|
||||
Do _not_ ask to developers why some or all tests are failed under
|
||||
Please do not ask developers why some or all tests are failing in
|
||||
your environment! Let us know if you find why it fails. Thank you.
|
||||
|
||||
|
||||
@@ -141,145 +141,8 @@ advised to test for non-zero, rather then a specific value.
|
||||
[Creating new test files]
|
||||
-------------------------
|
||||
Writing test file is very easy if you are used to PHP.
|
||||
See the HOWTO at http://qa.php.net/write-test.php
|
||||
|
||||
Here is an actual test file from standard module.
|
||||
|
||||
===== ext/standard/tests/strings/strtr.phpt =======
|
||||
--TEST--
|
||||
strtr() function
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a REATME.TESTING example. */
|
||||
$trans = array("hello"=>"hi", "hi"=>"hello", "a"=>"A", "world"=>"planet");
|
||||
var_dump(strtr("# hi all, I said hello world! #", $trans));
|
||||
?>
|
||||
--EXPECT--
|
||||
string(32) "# hello All, I sAid hi planet! #"
|
||||
===== ext/standard/tests/strings/strtr.phpt =======
|
||||
|
||||
As you can see the file is devided into several sections. Below is a
|
||||
list of all possible sections:
|
||||
|
||||
"--TEST--" is title of the test (required).
|
||||
"--SKIPIF--" is condition when to skip this test (optional).
|
||||
"--POST--" is POST variable passed to test script (optional).
|
||||
"--GET--" is GET variable passed to test script (optional).
|
||||
"--INI--" each line contains an ini setting e.g. foo=bar (optional).
|
||||
"--FILE--" is the test script (required).
|
||||
"--EXPECT--" is the expected output from the test script (required).
|
||||
"--EXPECTF--" is an alternative of --EXPECT--. The difference is that
|
||||
this form uses sscanf for output validation (alternative).
|
||||
"--EXPECTREGEX--" is an alternative of --EXPECT--. This form allows the tester
|
||||
to specify the result in a regular expression (alternative).
|
||||
|
||||
A test must at least contain the sections TEST, FILE and either EXPECT
|
||||
or EXPECTF. When a test is called run-test.php takes the name from the
|
||||
TEST section and writes the FILE section into a ".php" file with the
|
||||
same name as the ".phpt" file. This ".php" file will then be executed
|
||||
and its output compared to the contents of the EXPECT section. It is a
|
||||
good idea to generate output with var_dump() calls.
|
||||
|
||||
/ext/standard/tests/strings/str_shuffle.phpt is a good example for using
|
||||
EXPECTF instead of EXPECT. From time to time the algorithm used for shuffle
|
||||
changed and sometimes the machine used to execute the code has influence
|
||||
on the result of shuffle. But it always returns a three character string
|
||||
detectable by %s. Other scan-able forms are %i for integers, %d for numbers
|
||||
only, %f for floating point values, %c for single characters and %x for
|
||||
hexadecimal values.
|
||||
|
||||
==== /ext/standard/tests/strings/str_shuffle.phpt ===
|
||||
--TEST--
|
||||
Testing str_shuffle.
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a REATME.TESTING example. */
|
||||
$s = '123';
|
||||
var_dump(str_shuffle($s));
|
||||
var_dump($s);
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(3) %s
|
||||
string(3) "123"
|
||||
==== end of /ext/standard/tests/strings/str_shuffle.phpt ===
|
||||
|
||||
/ext/standard/tests/strings/strings001.phpt is a good example for using
|
||||
EXPECTREGEX instead of EXPECT. This test also shows that in EXPECTREGEX
|
||||
some characters need to be escaped since otherwise they would be
|
||||
interpreted as a regular expression.
|
||||
|
||||
==== /ext/standard/tests/strings/strings001.phpt ===
|
||||
--TEST--
|
||||
Test whether strstr() and strrchr() are binary safe.
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a REATME.TESTING example. */
|
||||
$s = "alabala nica".chr(0)."turska panica";
|
||||
var_dump(strstr($s, "nic"));
|
||||
var_dump(strrchr($s," nic"));
|
||||
?>
|
||||
--EXPECTREGEX--
|
||||
string\(18\) \"nica\x00turska panica\"
|
||||
string\(19\) \" nica\x00turska panica\"
|
||||
==== end of /ext/standard/tests/strings/strings001.phpt ===
|
||||
|
||||
Some tests depend on modules or functions available only in certain versions
|
||||
or they even require minimum version of php or zend. These tests should be
|
||||
skipped when the requirement cannot be fullfilled. To achieve this you can
|
||||
use the SKIPIF section. To tell run-test.php that your test should be skipped
|
||||
the SKIPIF section must print out the word "skip" followed by a reason why
|
||||
the test should skip.
|
||||
|
||||
==== /ext/exif/tests/exif005.phpt ===
|
||||
--TEST--
|
||||
Check for exif_read_data, unusual IFD start
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('exif')) print 'skip exif extension not available';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
/* Do not change this test it is a REATME.TESTING example.
|
||||
* test5.jpg is a 1*1 image that contains an Exif section with ifd = 00000009h
|
||||
*/
|
||||
$image = exif_read_data('./ext/exif/tests/test5.jpg','',true,false);
|
||||
var_dump($image['IFD0']);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(2) {
|
||||
["ImageDescription"]=>
|
||||
string(11) "Ifd00000009"
|
||||
["DateTime"]=>
|
||||
string(19) "2002:10:18 20:06:00"
|
||||
}
|
||||
==== end of /ext/exif/tests/exif005.phpt ===
|
||||
|
||||
Test script and SKIPIF code should be directly written into *.phpt. However,
|
||||
it is recommended to use include files when more test scripts depend on the
|
||||
same SKIPIF code or when certain test files need the same values for some
|
||||
input. But no file used by any test should have one of the following
|
||||
extensions: ".php", ".log", ".exp", ".out" or ".diff".
|
||||
|
||||
Tests should be named according to the following list:
|
||||
|
||||
Class: Name: Example:
|
||||
Tests for bugs bug<bugid>.phpt bug17123.phpt
|
||||
Tests for functions <functionname>.phpt dba_open.phpt
|
||||
General tests for extensions <extname><no>.phpt dba3.phpt
|
||||
|
||||
When you use an include file for the SKIPIF section it should be named
|
||||
"skipif.inc" and an include file used in the FILE section of many tests
|
||||
should be named "test.inc".
|
||||
|
||||
NOTE: All tests should run correctly with error_reporting(E_ALL) and
|
||||
display_errors=1. This is the default when called from run-test.php.
|
||||
If you have a good reason for lowering the error reporting, use --INI--
|
||||
section and comment this in your testcode.
|
||||
|
||||
NOTE: If your test intentionally generates a PHP warning message use
|
||||
$php_errormsg variable, which you can then output. This will result
|
||||
in a consistent error message output across all platforms and PHP
|
||||
configurations, preventing your test from failing due inconsistencies
|
||||
in the error message content.
|
||||
|
||||
[How to help us]
|
||||
----------------
|
||||
|
||||
@@ -3,9 +3,7 @@ parenthesis means that person has taken on this project.
|
||||
|
||||
Zend
|
||||
----
|
||||
For PHP 4.3.0:
|
||||
* Allow foreach ($array as $k => &$val) syntax. right now we cannot
|
||||
traverse an array without copying each element.
|
||||
For PHP 5.0.0:
|
||||
* Allow foreach ($array as $k => list($a, $b)) syntax for multi
|
||||
dimensional arrays.
|
||||
* Look at replacing c-lib call tolower().
|
||||
@@ -16,8 +14,8 @@ Zend
|
||||
* Add configure test to determine if dlsym() requires underscore and set
|
||||
DLSYM_NEEDS_UNDERSCORE accordingly. Perl and zsh have it in configure,
|
||||
for example. (DONE?)
|
||||
|
||||
For PHP 5.0.0:
|
||||
* Allow foreach ($array as $k => &$val) syntax. right now we cannot
|
||||
traverse an array without copying each element.
|
||||
* Native large number support (probably with GNU GMP)
|
||||
* Const'ify APIs. Right now, many functions leave parameters untouched,
|
||||
but don't declare those as const. This makes interaction with other
|
||||
@@ -27,17 +25,10 @@ Zend
|
||||
global
|
||||
------
|
||||
For PHP 4.3.0:
|
||||
* Add aliases to functions to conform to new naming conventions, e.g.
|
||||
str_to_upper().
|
||||
* Make all extensions thread-safe.
|
||||
* Make everything on the language-level independent of your locale
|
||||
settings.
|
||||
* Change PHP error messages, so that they point to pages or sections
|
||||
in the PHP Manual.
|
||||
in the PHP Manual.
|
||||
* Make sure that all ZTS globals get destructed. Most ts_allocate_id()
|
||||
calls should have a dtor entry.
|
||||
* Activate all extensions by default that don't rely on external
|
||||
dependencies. (eg ftp) (DONE?)
|
||||
* on some platforms unimplemented function will just do nothing
|
||||
(e.g. symlink) they should print a warning or not even be defined!
|
||||
(DONE ?)
|
||||
|
||||
@@ -0,0 +1,211 @@
|
||||
Component: Zend Engine 2
|
||||
|
||||
Important stuff to finish: PPP members/PPP methods,
|
||||
support of overloaded extensions, possibly differentiate
|
||||
between class and namespace as discussed with Stig in
|
||||
Germany.
|
||||
Responsibility: Zeev, Andi, Stas
|
||||
Time frame: Couple of months for first part and extensions will be
|
||||
ongoing while PHP is being fixed.
|
||||
Things to leave for later versions: Native aggregation
|
||||
support, accessing static members via object and not class.
|
||||
|
||||
|
||||
Component: Aggregation
|
||||
Responsibility: Andi, Stig?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Introspection
|
||||
|
||||
get_function_definition(<is_callable> [field]) =>
|
||||
array(
|
||||
file => filename
|
||||
line_start =>
|
||||
line_end =>
|
||||
parameters => array( name, byref, default )
|
||||
static_variables => array( name, value/default )
|
||||
scope => 'namespace' | 'class' | null
|
||||
namespace => classname | namespacename | 'main'
|
||||
protection => protection_flags
|
||||
phpdoc => pre-scanned-phpdoc-string
|
||||
type => 'internal' | 'user'
|
||||
)
|
||||
|
||||
get_class_definition(<class> [field]) =>
|
||||
array(
|
||||
type => 'internal' | 'user'
|
||||
file => filename
|
||||
line_start =>
|
||||
line_end =>
|
||||
name => pretty-name
|
||||
parent => classname | namespace | null
|
||||
flags => bitfield (ABSTRACT)
|
||||
methods => array( array( name, phpdoc ) )
|
||||
default_properties => array( array( name, value, phpdoc ) )
|
||||
private_properties => array( array( name, value, phpdoc ) )
|
||||
protected_properties => array( array( name, value, phpdoc ) )
|
||||
public_properties => array( array( name, value, phpdoc ) )
|
||||
static_members => array( array( name, value, phpdoc ) )
|
||||
constants => array( array( name, value, phpdoc ) )
|
||||
classes => array( array( name, phpdoc ) )
|
||||
phpdoc => pre-scanned-phpdoc-string
|
||||
)
|
||||
|
||||
get_constant_definition(<constant> [field]) =>
|
||||
array(
|
||||
file => filename
|
||||
line_start =>
|
||||
line_end =>
|
||||
name =>
|
||||
value =>
|
||||
phpdoc =>
|
||||
)
|
||||
|
||||
get_global_variable_defintion(<name> [field]) =>
|
||||
array(
|
||||
file =>
|
||||
line_start =>
|
||||
line_end =>
|
||||
name =>
|
||||
phpdoc =>
|
||||
)
|
||||
|
||||
We tried to take into account the implementation of each piece of
|
||||
information, and there are some that are problematic, especially those
|
||||
regarding constants and global variables (where do we store the extra
|
||||
information?)
|
||||
|
||||
With "pre-scanned-phpdoc-string" we mean converting:
|
||||
|
||||
/**
|
||||
* Blah blah blah
|
||||
* @param foo ...
|
||||
*/
|
||||
|
||||
to:
|
||||
|
||||
Blah blah blah
|
||||
@param foo
|
||||
|
||||
The rest of the phpdoc handling should be left to an extension.
|
||||
Responsibility: Stig, Andrei, Harald
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Redesign of API Versioning
|
||||
Responsibility: ?
|
||||
Time frame: 1 month
|
||||
|
||||
|
||||
Component: Thread Safety
|
||||
Identify the extensions that are not thread safe by design
|
||||
or due to dependant libraries and identify them as such.
|
||||
If possible try to resolve thread safety issue via code
|
||||
improvements (if php code or patches will be accepted by
|
||||
library maintainers). For situations where thread safety
|
||||
cannot easily be acheived a flag in the extension API is
|
||||
set so PHP can identify non-thread safe extensions. These
|
||||
extensions will not be loaded in a ZTS compiled binary
|
||||
(unless it is cli/cgi).
|
||||
|
||||
Responsibility: ?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: SAPI
|
||||
Environment variables defined in the CGI spec need to be
|
||||
verified in each SAPI module that they conform to the CGI
|
||||
spec correctly. If they do not, the SAPI module needs to
|
||||
fix the variable prior to script execution. Having this
|
||||
conformity will aid in having PHP scripts run correctly
|
||||
under different sapi modules.
|
||||
|
||||
Responsibility: Shane Caraveo & each sapi module owner
|
||||
Timeframe: ? (but shouldn't be much effort, most modules are probably ok)
|
||||
|
||||
|
||||
Component: Input Filtering
|
||||
- Implement a SAPI input filter hook that will get called
|
||||
just before registering a variable in the
|
||||
treat_data/post_handler hooks.
|
||||
- Make sure this is also done in mbstring
|
||||
- Provide access functions, or perhaps a new
|
||||
$_RAW_GET/POST/Cookie set of superglobals to get at the
|
||||
unfiltered data
|
||||
- Provide a .ini directive which allows people to set their
|
||||
input filter to one of the built-in strip_tags,
|
||||
htmlspecialchars or whatever other internal function might
|
||||
be useful here.
|
||||
- (The main benefit of this is to make it easier for people
|
||||
to solve the XSS problem once and for all without having
|
||||
to go through every line of their code and adding input
|
||||
validation/filtering everywhere)
|
||||
Responsibility: Rasmus
|
||||
Timeframe: Yesterday
|
||||
|
||||
|
||||
Component: RPC Abstraction Layer
|
||||
Porting java, com, dotnet, xmlrpc, corba, soap and python, srm
|
||||
(are there more ?) to work with the new oo api and preferably
|
||||
by using ext/rpc.
|
||||
Responsibility: Harald
|
||||
Time frame: 2 months (but i have to wait for a few engine features first)
|
||||
|
||||
|
||||
Component: OO Extensions
|
||||
Each OO extension has to be revised and rewritten to fit into
|
||||
the new OO model. We should decide which extensions are a must
|
||||
to have for the release and which can be ported by the maintainer
|
||||
later as a separate pecl release.
|
||||
A list of extensions to be extended that have to be investigated:
|
||||
* browscap
|
||||
* aggregate
|
||||
* all *sql extensions (*_fetch_object)
|
||||
* domxml (seems like christian is rewriting it anyways)
|
||||
* ming
|
||||
Responsibility: Harald (, extension maintainers)
|
||||
|
||||
|
||||
Component: Abstract Data Types (ADT)
|
||||
Responsibility: Sterling, Harald
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: MySQL Extension
|
||||
Complete rewrite, leveraging the new MySQL 4 / MySQL 5
|
||||
features.
|
||||
Responsibility: Georg Richter, Zak Greant
|
||||
Timeframe: ?
|
||||
|
||||
|
||||
Component: XML
|
||||
- Rewrite DOMXML and incorporate all (or most of) W3C-DOM2.
|
||||
- Use the new ZE2 features (Exceptions, setter/getter).
|
||||
- Add SAX(2), XML Schema.
|
||||
- XSLT, HTML, XPath, XPointer, DTD Validation will still be
|
||||
supported, have to find a meaningful API for it.
|
||||
- Break BC, warn users now.
|
||||
- Look at the libxml2 patch by lukas schröder and see if we can prevent
|
||||
memory leaks with it (anyway, getting rid of mem-leaks and intelligent
|
||||
memory management is on top prio...)
|
||||
- In the longer term, domxml (or another name, as with todays features
|
||||
domxml is a little bit misleading) shall be the main xml-class, which
|
||||
covers most of what's needed for decent XML support in PHP ;)
|
||||
But there is certainly place for others like Sablotron etc.
|
||||
Responsibility: Christian Stocker
|
||||
Timeframe: ?
|
||||
|
||||
|
||||
Component: Test Suite
|
||||
Extending the test suite with atleast a test for every
|
||||
function in an extension that doesn't require external
|
||||
resources. Also developing an automated test thing which
|
||||
cvs ups's, compiles and tests the build on a daily base on
|
||||
as much platforms/extensions as possible.
|
||||
|
||||
The test suite will also be extended to support threaded
|
||||
testing and testing for differing sapi modules (via http
|
||||
calls or other methods).
|
||||
Reponsibility: Derick (, extension maintainers)
|
||||
Time frame: 3 months
|
||||
+44
-4
@@ -158,6 +158,9 @@ TSRM_API void tsrm_shutdown(void)
|
||||
|
||||
next_p = p->next;
|
||||
for (j=0; j<id_count; j++) {
|
||||
if (resource_types_table && resource_types_table[j].dtor) {
|
||||
resource_types_table[j].dtor(p->storage[j], &p->storage);
|
||||
}
|
||||
free(p->storage[j]);
|
||||
}
|
||||
free(p->storage);
|
||||
@@ -290,6 +293,15 @@ TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
|
||||
int hash_value;
|
||||
tsrm_tls_entry *thread_resources;
|
||||
|
||||
#ifdef NETWARE
|
||||
/* The below if loop is added for NetWare to fix an abend while unloading PHP
|
||||
* when an Apache unload command is issued on the system console.
|
||||
* While exiting from PHP, at the end for some reason, this function is called
|
||||
* with tsrm_tls_table = NULL. When this happened, the server abends when
|
||||
* tsrm_tls_table is accessed since it is NULL.
|
||||
*/
|
||||
if(tsrm_tls_table) {
|
||||
#endif
|
||||
if (!th_id) {
|
||||
#if defined(PTHREADS)
|
||||
/* Fast path for looking up the resources for the current
|
||||
@@ -352,6 +364,9 @@ TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
|
||||
* changes to the structure as we read it.
|
||||
*/
|
||||
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
|
||||
#ifdef NETWARE
|
||||
} /* if(tsrm_tls_table) */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -419,7 +434,12 @@ TSRM_API THREAD_T tsrm_thread_id(void)
|
||||
#ifdef TSRM_WIN32
|
||||
return GetCurrentThreadId();
|
||||
#elif defined(NETWARE)
|
||||
return NXThreadGetId();
|
||||
/* There seems to be some problem with the LibC call: NXThreadGetId().
|
||||
* Due to this, the PHPMyAdmin application is abending in PHP calls.
|
||||
* Used the call, kCurrentThread instead and it works fine.
|
||||
*/
|
||||
/* return NXThreadGetId(); */
|
||||
return kCurrentThread();
|
||||
#elif defined(GNUPTH)
|
||||
return pth_self();
|
||||
#elif defined(PTHREADS)
|
||||
@@ -441,16 +461,23 @@ TSRM_API MUTEX_T tsrm_mutex_alloc(void)
|
||||
{
|
||||
MUTEX_T mutexp;
|
||||
#ifdef NETWARE
|
||||
long flags = 0; /* Don't require NX_MUTEX_RECURSIVE, I guess */
|
||||
#ifndef USE_MPK
|
||||
/* To use the Recursive Mutex Locking of LibC */
|
||||
long flags = NX_MUTEX_RECURSIVE;
|
||||
NXHierarchy_t order = 0;
|
||||
NX_LOCK_INFO_ALLOC (lockInfo, "PHP-TSRM", 0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
mutexp = malloc(sizeof(CRITICAL_SECTION));
|
||||
InitializeCriticalSection(mutexp);
|
||||
#elif defined(NETWARE)
|
||||
mutexp = NXMutexAlloc(flags, order, &lockInfo); /* return value ignored for now */
|
||||
#ifdef USE_MPK
|
||||
mutexp = kMutexAlloc((BYTE*)"PHP-TSRM");
|
||||
#else
|
||||
mutexp = NXMutexAlloc(flags, order, &lockInfo);
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
|
||||
pth_mutex_init(mutexp);
|
||||
@@ -481,8 +508,13 @@ TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
|
||||
if (mutexp) {
|
||||
#ifdef TSRM_WIN32
|
||||
DeleteCriticalSection(mutexp);
|
||||
free(mutexp);
|
||||
#elif defined(NETWARE)
|
||||
#ifdef USE_MPK
|
||||
kMutexFree(mutexp);
|
||||
#else
|
||||
NXMutexFree(mutexp);
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
free(mutexp);
|
||||
#elif defined(PTHREADS)
|
||||
@@ -513,7 +545,11 @@ TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
|
||||
EnterCriticalSection(mutexp);
|
||||
return 1;
|
||||
#elif defined(NETWARE)
|
||||
#ifdef USE_MPK
|
||||
return kMutexLock(mutexp);
|
||||
#else
|
||||
return NXLock(mutexp);
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
return pth_mutex_acquire(mutexp, 0, NULL);
|
||||
#elif defined(PTHREADS)
|
||||
@@ -540,7 +576,11 @@ TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
|
||||
LeaveCriticalSection(mutexp);
|
||||
return 1;
|
||||
#elif defined(NETWARE)
|
||||
#ifdef USE_MPK
|
||||
return kMutexUnlock(mutexp);
|
||||
#else
|
||||
return NXUnlock(mutexp);
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
return pth_mutex_release(mutexp);
|
||||
#elif defined(PTHREADS)
|
||||
|
||||
@@ -40,7 +40,11 @@
|
||||
# include <windows.h>
|
||||
#elif defined(NETWARE)
|
||||
# include <nks/thread.h>
|
||||
#ifdef USE_MPK
|
||||
# include <mpklib4php.h>
|
||||
#else
|
||||
# include <nks/synch.h>
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
# include <pth.h>
|
||||
#elif defined(PTHREADS)
|
||||
@@ -60,7 +64,11 @@ typedef int ts_rsrc_id;
|
||||
# define MUTEX_T CRITICAL_SECTION *
|
||||
#elif defined(NETWARE)
|
||||
# define THREAD_T NXThreadId_t
|
||||
#ifdef USE_MPK
|
||||
# define MUTEX_T MUTEX
|
||||
#else
|
||||
# define MUTEX_T NXMutex_t *
|
||||
#endif
|
||||
#elif defined(GNUPTH)
|
||||
# define THREAD_T pth_t
|
||||
# define MUTEX_T pth_mutex_t *
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
|
||||
#define HAVE_UTIME 1
|
||||
|
||||
/* Though we have alloca(), this seems to be causing some problem with the stack pointer -- hence not using it */
|
||||
/* #define HAVE_ALLOCA 1 */
|
||||
/* Though we have alloca(), this seems to be causing some problem
|
||||
* with the stack pointer. Hence not using it
|
||||
*/
|
||||
/*#define HAVE_ALLOCA 1*/
|
||||
|
||||
#endif
|
||||
@@ -25,7 +25,9 @@
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca /* predefined by HP cc +Olibcalls */
|
||||
# ifndef NETWARE
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
+133
-153
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -13,6 +13,7 @@
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Venkat Raghavan S <rvenkat@novell.com> |
|
||||
| Anantha Kesari H Y <hyanantha@novell.com> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
@@ -39,8 +40,9 @@
|
||||
|
||||
#include "mktemp.h"
|
||||
|
||||
/* strtok() call in LibC is abending when used in a different address space -- hence using
|
||||
PHP's version itself for now : Venkat (30/4/02) */
|
||||
/* strtok() call in LibC is abending when used in a different address space
|
||||
* -- hence using PHP's version itself for now
|
||||
*/
|
||||
#include "tsrm_strtok_r.h"
|
||||
#define tsrm_strtok_r(a,b,c) strtok((a),(b))
|
||||
|
||||
@@ -50,211 +52,189 @@
|
||||
|
||||
TSRM_API FILE* popen(const char *commandline, const char *type)
|
||||
{
|
||||
char *command = NULL, *argv[MAX_ARGS] = {'\0'}, **env = NULL;
|
||||
char *command = NULL, *argv[MAX_ARGS] = {'\0'}, **env = NULL;
|
||||
char *tempName = "sys:/php/temp/phpXXXXXX.tmp";
|
||||
char *filePath = NULL;
|
||||
char *ptr = NULL;
|
||||
int ptrLen = 0, argc = 0, i = 0, envCount = 0, err = 0;
|
||||
char *filePath = NULL;
|
||||
char *ptr = NULL;
|
||||
int ptrLen = 0, argc = 0, i = 0, envCount = 0, err = 0;
|
||||
FILE *stream = NULL;
|
||||
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
|
||||
int pipe_handle;
|
||||
int mode = O_RDONLY;
|
||||
int pipe_handle;
|
||||
int mode = O_RDONLY;
|
||||
#else
|
||||
NXHandle_t pipe_handle;
|
||||
NXMode_t mode = NX_O_RDONLY;
|
||||
NXHandle_t pipe_handle;
|
||||
NXMode_t mode = NX_O_RDONLY;
|
||||
#endif
|
||||
NXExecEnvSpec_t envSpec;
|
||||
NXNameSpec_t nameSpec;
|
||||
NXVmId_t newVM = 0;
|
||||
NXExecEnvSpec_t envSpec;
|
||||
NXNameSpec_t nameSpec;
|
||||
NXVmId_t newVM = 0;
|
||||
|
||||
/* Check for validity of input parameters */
|
||||
if (!commandline || !type)
|
||||
return NULL;
|
||||
/* Check for validity of input parameters */
|
||||
if (!commandline || !type)
|
||||
return NULL;
|
||||
|
||||
/* Get temporary file name */
|
||||
filePath = mktemp(tempName);
|
||||
/*consoleprintf ("PHP | popen: file path = %s, mode = %s\n", filePath, type);*/
|
||||
/* Get temporary file name */
|
||||
filePath = mktemp(tempName);
|
||||
if (!filePath)
|
||||
return NULL;
|
||||
|
||||
/* Set pipe mode according to type -- for now allow only "r" or "w" */
|
||||
if (strcmp(type, "r") == 0)
|
||||
/* Set pipe mode according to type -- for now allow only "r" or "w" */
|
||||
if (strcmp(type, "r") == 0)
|
||||
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
|
||||
mode = O_RDONLY;
|
||||
mode = O_RDONLY;
|
||||
#else
|
||||
mode = NX_O_RDONLY;
|
||||
mode = NX_O_RDONLY;
|
||||
#endif
|
||||
else if (strcmp(type, "w") == 0)
|
||||
else if (strcmp(type, "w") == 0)
|
||||
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
|
||||
mode = O_WRONLY;
|
||||
mode = O_WRONLY;
|
||||
#else
|
||||
mode = NX_O_WRONLY;
|
||||
mode = NX_O_WRONLY;
|
||||
#endif
|
||||
else
|
||||
return NULL;
|
||||
else
|
||||
return NULL;
|
||||
|
||||
#ifdef USE_PIPE_OPEN
|
||||
pipe_handle = pipe_open(filePath, mode);
|
||||
/*consoleprintf ("PHP | popen: pipe_open() returned %d\n", pipe_handle);*/
|
||||
if (pipe_handle == -1)
|
||||
return NULL;
|
||||
pipe_handle = pipe_open(filePath, mode);
|
||||
if (pipe_handle == -1)
|
||||
return NULL;
|
||||
#elif defined(USE_MKFIFO)
|
||||
pipe_handle = mkfifo(filePath, mode);
|
||||
consoleprintf ("PHP | popen: mkfifo() returned %d\n", pipe_handle);
|
||||
if (pipe_handle == -1)
|
||||
return NULL;
|
||||
pipe_handle = mkfifo(filePath, mode);
|
||||
if (pipe_handle == -1)
|
||||
return NULL;
|
||||
#else
|
||||
/*
|
||||
- NetWare doesn't require first parameter
|
||||
- Allowing LibC to choose the buffer size for now
|
||||
*/
|
||||
err = NXFifoOpen(0, filePath, mode, 0, &pipe_handle);
|
||||
/*consoleprintf ("PHP | popen: NXFifoOpen() returned %d\n", err);*/
|
||||
if (err)
|
||||
return NULL;
|
||||
/* - NetWare doesn't require first parameter
|
||||
* - Allowing LibC to choose the buffer size for now
|
||||
*/
|
||||
err = NXFifoOpen(0, filePath, mode, 0, &pipe_handle);
|
||||
if (err)
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
/* Copy the environment variables in preparation for the spawn call */
|
||||
/* Copy the environment variables in preparation for the spawn call */
|
||||
envCount = NXGetEnvCount() + 1; /* add one for NULL */
|
||||
env = (char **) NXMemAlloc(sizeof(char *) * envCount, 0);
|
||||
if (!env)
|
||||
return NULL;
|
||||
|
||||
envCount = NXGetEnvCount() + 1; /* add one for NULL */
|
||||
env = (char**)NXMemAlloc(sizeof(char*) * envCount, 0);
|
||||
if (!env)
|
||||
return NULL;
|
||||
err = NXCopyEnv(env, envCount);
|
||||
if (err) {
|
||||
NXMemFree (env);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
err = NXCopyEnv(env, envCount);
|
||||
consoleprintf ("PHP | popen: NXCopyEnv() returned %d\n", err);
|
||||
if (err)
|
||||
{
|
||||
NXMemFree (env);
|
||||
return NULL;
|
||||
}
|
||||
/* Separate commandline string into words */
|
||||
ptr = tsrm_strtok_r((char*)commandline, WHITESPACE, NULL);
|
||||
ptrLen = strlen(ptr);
|
||||
|
||||
/* Separate commandline string into words */
|
||||
consoleprintf ("PHP | popen: commandline = %s\n", commandline);
|
||||
ptr = tsrm_strtok_r((char*)commandline, WHITESPACE, NULL);
|
||||
ptrLen = strlen(ptr);
|
||||
command = (char*)malloc(ptrLen + 1);
|
||||
if (!command) {
|
||||
NXMemFree (env);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
command = (char*)malloc(ptrLen + 1);
|
||||
if (!command)
|
||||
{
|
||||
NXMemFree (env);
|
||||
return NULL;
|
||||
}
|
||||
strcpy (command, ptr);
|
||||
|
||||
strcpy (command, ptr);
|
||||
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
|
||||
while (ptr && (argc < MAX_ARGS)) {
|
||||
ptrLen = strlen(ptr);
|
||||
|
||||
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
|
||||
while (ptr && (argc < MAX_ARGS))
|
||||
{
|
||||
ptrLen = strlen(ptr);
|
||||
argv[argc] = (char*)malloc(ptrLen + 1);
|
||||
if (!argv[argc]) {
|
||||
NXMemFree (env);
|
||||
if (command)
|
||||
free (command);
|
||||
|
||||
argv[argc] = (char*)malloc(ptrLen + 1);
|
||||
if (!argv[argc])
|
||||
{
|
||||
NXMemFree (env);
|
||||
for (i = 0; i < argc; i++) {
|
||||
if (argv[i])
|
||||
free (argv[i]);
|
||||
}
|
||||
|
||||
if (command)
|
||||
free (command);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (argv[i])
|
||||
free (argv[i]);
|
||||
}
|
||||
strcpy (argv[argc], ptr);
|
||||
argc++;
|
||||
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
/* Setup the execution environment and spawn new process */
|
||||
envSpec.esFlags = 0; /* Not used */
|
||||
envSpec.esArgc = argc;
|
||||
envSpec.esArgv = (void **) argv;
|
||||
envSpec.esEnv = (void **) env;
|
||||
|
||||
strcpy (argv[argc], ptr);
|
||||
/* envSpec.esStdin.ssType = */
|
||||
envSpec.esStdout.ssType = NX_OBJ_FIFO;
|
||||
envSpec.esStderr.ssType = NX_OBJ_FILE;
|
||||
|
||||
argc++;
|
||||
|
||||
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
|
||||
}
|
||||
consoleprintf ("PHP | popen: commandline string parsed into tokens\n");
|
||||
/* Setup the execution environment and spawn new process */
|
||||
|
||||
envSpec.esFlags = 0; /* Not used */
|
||||
envSpec.esArgc = argc;
|
||||
envSpec.esArgv = (void**)argv;
|
||||
envSpec.esEnv = (void**)env;
|
||||
|
||||
envSpec.esStdin.ssType =
|
||||
envSpec.esStdout.ssType = NX_OBJ_FIFO;
|
||||
envSpec.esStderr.ssType = NX_OBJ_FILE;
|
||||
/* 'ssHandle' is not a struct/union/class member */
|
||||
/*
|
||||
envSpec.esStdin.ssHandle =
|
||||
envSpec.esStdout.ssHandle =
|
||||
envSpec.esStderr.ssHandle = -1;
|
||||
envSpec.esStdin.ssHandle =
|
||||
envSpec.esStdout.ssHandle =
|
||||
envSpec.esStderr.ssHandle = -1;
|
||||
*/
|
||||
envSpec.esStdin.ssPathCtx =
|
||||
envSpec.esStdout.ssPathCtx =
|
||||
envSpec.esStderr.ssPathCtx = NULL;
|
||||
envSpec.esStdin.ssPathCtx = NULL;
|
||||
envSpec.esStdout.ssPathCtx = NULL;
|
||||
envSpec.esStderr.ssPathCtx = NULL;
|
||||
|
||||
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
|
||||
if (mode == O_RDONLY)
|
||||
if (mode == O_RDONLY) {
|
||||
#else
|
||||
if (mode == NX_O_RDONLY)
|
||||
if (mode == NX_O_RDONLY) {
|
||||
#endif
|
||||
{
|
||||
envSpec.esStdin.ssPath = filePath;
|
||||
envSpec.esStdout.ssPath = stdout;
|
||||
}
|
||||
else /* Write Only */
|
||||
{
|
||||
envSpec.esStdin.ssPath = stdin;
|
||||
envSpec.esStdout.ssPath = filePath;
|
||||
}
|
||||
envSpec.esStdin.ssPath = filePath;
|
||||
envSpec.esStdout.ssPath = stdout;
|
||||
} else { /* Write Only */
|
||||
envSpec.esStdin.ssPath = stdin;
|
||||
envSpec.esStdout.ssPath = filePath;
|
||||
}
|
||||
|
||||
envSpec.esStderr.ssPath = stdout;
|
||||
envSpec.esStderr.ssPath = stdout;
|
||||
|
||||
nameSpec.ssType = NX_OBJ_FIFO;
|
||||
/* nameSpec.ssHandle = 0; */ /* Not used */
|
||||
nameSpec.ssPathCtx = NULL; /* Not used */
|
||||
nameSpec.ssPath = argv[0];
|
||||
consoleprintf ("PHP | popen: environment setup\n");
|
||||
err = NXVmSpawn(&nameSpec, &envSpec, 0, &newVM);
|
||||
consoleprintf ("PHP | popen: NXVmSpawn() returned %d\n", err);
|
||||
if (!err)
|
||||
/* Get file pointer corresponding to the pipe (file) opened */
|
||||
stream = fdopen(pipe_handle, type);
|
||||
nameSpec.ssType = NX_OBJ_FIFO;
|
||||
/* nameSpec.ssHandle = 0; */ /* 'ssHandle' is not a struct/union/class member */
|
||||
nameSpec.ssPathCtx = NULL; /* Not used */
|
||||
nameSpec.ssPath = argv[0];
|
||||
err = NXVmSpawn(&nameSpec, &envSpec, 0, &newVM);
|
||||
if (!err)
|
||||
/* Get file pointer corresponding to the pipe (file) opened */
|
||||
stream = fdopen(pipe_handle, type);
|
||||
|
||||
/* Clean-up */
|
||||
/* Clean-up */
|
||||
if (env)
|
||||
NXMemFree (env);
|
||||
|
||||
if (env)
|
||||
NXMemFree (env);
|
||||
|
||||
if (pipe_handle)
|
||||
if (pipe_handle)
|
||||
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
|
||||
close(pipe_handle);
|
||||
close(pipe_handle);
|
||||
#else
|
||||
NXClose(pipe_handle);
|
||||
NXClose(pipe_handle);
|
||||
#endif
|
||||
|
||||
if (command)
|
||||
free (command);
|
||||
if (command)
|
||||
free (command);
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (argv[i])
|
||||
free (argv[i]);
|
||||
}
|
||||
consoleprintf ("PHP | popen: all clean-up done, returning...\n");
|
||||
return stream;
|
||||
for (i = 0; i < argc; i++) {
|
||||
if (argv[i])
|
||||
free (argv[i]);
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
TSRM_API int pclose(FILE* stream)
|
||||
{
|
||||
int err = 0;
|
||||
NXHandle_t fd = 0;
|
||||
int err = 0;
|
||||
NXHandle_t fd = 0;
|
||||
|
||||
/* Get the process associated with this pipe (file) handle and terminate it */
|
||||
fd = fileno(stream);
|
||||
NXClose (fd);
|
||||
/* Get the process associated with this pipe (file) handle and terminate it */
|
||||
fd = fileno(stream);
|
||||
NXClose (fd);
|
||||
|
||||
err = fclose(stream);
|
||||
err = fclose(stream);
|
||||
|
||||
return err;
|
||||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* NETWARE */
|
||||
+2
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -13,6 +13,7 @@
|
||||
| license@php.net so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Venkat Raghavan S <rvenkat@novell.com> |
|
||||
| Anantha Kesari H Y <hyanantha@novell.com> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
||||
+13
-12
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
#include "TSRM.h"
|
||||
|
||||
/* Only need mutex for popen() in Windows and NetWare, because it doesn't chdir() on UNIX */
|
||||
/* Only need mutex for popen() in Windows and NetWare because it doesn't chdir() on UNIX */
|
||||
#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
|
||||
MUTEX_T cwd_mutex;
|
||||
#endif
|
||||
@@ -210,7 +210,7 @@ CWD_API void virtual_cwd_startup(void)
|
||||
cwd_globals_ctor(&cwd_globals TSRMLS_CC);
|
||||
#endif
|
||||
|
||||
#if defined(TSRM_WIN32) && defined(ZTS)
|
||||
#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
|
||||
cwd_mutex = tsrm_mutex_alloc();
|
||||
#endif
|
||||
}
|
||||
@@ -220,7 +220,7 @@ CWD_API void virtual_cwd_shutdown(void)
|
||||
#ifndef ZTS
|
||||
cwd_globals_dtor(&cwd_globals TSRMLS_CC);
|
||||
#endif
|
||||
#if defined(TSRM_WIN32) && defined(ZTS)
|
||||
#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
|
||||
tsrm_mutex_free(cwd_mutex);
|
||||
#endif
|
||||
|
||||
@@ -340,9 +340,6 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
copy_amount = COPY_WHEN_ABSOLUTE(path_copy);
|
||||
is_absolute = 1;
|
||||
#ifdef TSRM_WIN32
|
||||
} else if (IS_UNC_PATH(path_copy, path_length)) {
|
||||
copy_amount = 2;
|
||||
is_absolute = 1;
|
||||
} else if (IS_SLASH(path_copy[0])) {
|
||||
copy_amount = 2;
|
||||
#endif
|
||||
@@ -477,19 +474,23 @@ CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path
|
||||
CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
|
||||
{
|
||||
cwd_state new_state;
|
||||
int retval;
|
||||
char *retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
retval = virtual_file_ex(&new_state, path, NULL, 1);
|
||||
|
||||
if (!retval) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, 1)==0) {
|
||||
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
|
||||
|
||||
memcpy(real_path, new_state.cwd, len);
|
||||
real_path[len] = '\0';
|
||||
return real_path;
|
||||
retval = real_path;
|
||||
} else {
|
||||
retval = NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
CWD_STATE_FREE(&new_state);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -53,14 +53,13 @@ typedef unsigned short mode_t;
|
||||
#define IS_SLASH_P(c) (*(c) == '/' || \
|
||||
(*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
|
||||
|
||||
/* COPY_WHEN_ABSOLUTE also takes path as argument because netware needs it
|
||||
* to account for volume name that is unique to NetWare absolute paths
|
||||
*/
|
||||
/* COPY_WHEN_ABSOLUTE is 2 under Win32 because by chance both regular absolute paths
|
||||
in the file system and UNC paths need copying of two characters */
|
||||
#define COPY_WHEN_ABSOLUTE(path) 2
|
||||
#define IS_ABSOLUTE_PATH(path, len) \
|
||||
(len >= 2 && isalpha(path[0]) && path[1] == ':')
|
||||
#define IS_UNC_PATH(path, len) \
|
||||
(len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
|
||||
#define IS_ABSOLUTE_PATH(path, len) \
|
||||
(len >= 2 && ((isalpha(path[0]) && path[1] == ':') || IS_UNC_PATH(path, len)))
|
||||
|
||||
#elif defined(NETWARE)
|
||||
#ifdef HAVE_DIRENT_H
|
||||
@@ -70,6 +69,7 @@ typedef unsigned short mode_t;
|
||||
#define DEFAULT_SLASH '/'
|
||||
#define DEFAULT_DIR_SEPARATOR ';'
|
||||
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
|
||||
#define IS_SLASH_P(c) IS_SLASH(*(c))
|
||||
#define COPY_WHEN_ABSOLUTE(path) \
|
||||
(strchr(path, ':') - path + 1) /* Take the volume name which ends with a colon */
|
||||
#define IS_ABSOLUTE_PATH(path, len) \
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 4 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2002 The PHP Group |
|
||||
| Copyright (c) 1997-2003 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.02 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+754
@@ -1,3 +1,757 @@
|
||||
2003-01-27 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c:
|
||||
Replace MAKE_VAR opcode with special 'data' opcode
|
||||
This opcode is not executeable but only holds data for opcodes
|
||||
that need more than two arguments (presently only ASSIGN_OBJ and the ilk
|
||||
but
|
||||
in the future also ASSIGN_DIM)
|
||||
|
||||
2003-01-26 Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
* zend_API.c:
|
||||
Replace snprintf() call using zend_error's capabilities
|
||||
|
||||
2003-01-23 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
Let the scope propagate to internal functions
|
||||
|
||||
2003-01-23 Jani Taskinen <sniper@iki.fi>
|
||||
|
||||
* zend_execute_API.c:
|
||||
Fixed bug: #14542, register_shutdown_function() timeout problem
|
||||
|
||||
2003-01-22 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* OBJECTS2_HOWTO:
|
||||
some small refinements for get_class_*
|
||||
|
||||
2003-01-22 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_execute.c:
|
||||
Fixed bug #21814 (Allow booleans to be used as array keys).
|
||||
|
||||
2003-01-21 Sterling Hughes <sterling@bumblebury.com>
|
||||
|
||||
* zend_objects_API.c:
|
||||
fix by phanto to the cloning
|
||||
|
||||
2003-01-19 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* Zend.m4:
|
||||
relabel
|
||||
|
||||
2003-01-19 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
Restore for now old statics behaviour (so that indirect $$var references
|
||||
would work again). Comprehensive fix will follow later.
|
||||
|
||||
2003-01-19 Harald Radi <harald.radi+coding.php@nme.at>
|
||||
|
||||
* zend_ini.h
|
||||
zend_ini_parser.y
|
||||
zend_ini_scanner.l:
|
||||
ini patch to allow 'entry[] = value' entries
|
||||
|
||||
2003-01-17 Harald Radi <harald.radi+coding.php@nme.at>
|
||||
|
||||
* zend_objects.c
|
||||
zend_objects.h:
|
||||
export zend_objects_destroy_object()
|
||||
static inline was meaningless anyways as the function
|
||||
was only used as a callback handler and was never
|
||||
called directly
|
||||
|
||||
* zend_objects_API.c
|
||||
zend_objects_API.h:
|
||||
make std_object_handlers struct available for shared modules
|
||||
|
||||
2003-01-16 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_execute.c:
|
||||
Fixed bug #20933 (isset/empty didn't work when used on string offsets).
|
||||
|
||||
2003-01-15 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
- Revert int -> unsigned int change for str.len
|
||||
|
||||
2003-01-15 Sascha Schumann <sascha@schumann.cx>
|
||||
|
||||
* zend.h:
|
||||
Revert commit which turned the lengths of strings into zend_uint.
|
||||
|
||||
2003-01-14 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* ZEND_CHANGES
|
||||
zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_language_parser.y
|
||||
zend_language_scanner.l
|
||||
zend_operators.c
|
||||
zend_operators.h:
|
||||
- Change "is" to "instanceof" as it explains better what the operator
|
||||
means.
|
||||
- "is_a" was also appropriate but ugly.
|
||||
|
||||
2003-01-14 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_API.c:
|
||||
fix memory leaks and key size
|
||||
|
||||
2003-01-14 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_ini_parser.y:
|
||||
MFZE2
|
||||
|
||||
2003-01-14 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
fix warning
|
||||
|
||||
* zend_API.c
|
||||
zend_API.h:
|
||||
Make add_property_ functions work via write_property handler
|
||||
|
||||
* zend.c
|
||||
zend_object_handlers.c:
|
||||
ws
|
||||
|
||||
2003-01-14 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_ini_parser.y:
|
||||
Reverting previous patch.
|
||||
|
||||
2003-01-13 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_ini_parser.y:
|
||||
MFZE2
|
||||
|
||||
2003-01-13 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_objects_API.c:
|
||||
- Don't check if the handle is bogus. We should crash.
|
||||
|
||||
2003-01-12 Harald Radi <harald.radi+coding.php@nme.at>
|
||||
|
||||
* zend_modules.h:
|
||||
fix wrong dereferenciation
|
||||
|
||||
2003-01-12 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
fix inheritance
|
||||
|
||||
* zend_API.h:
|
||||
Remove handle_property from here too
|
||||
|
||||
* zend.c
|
||||
zend.h
|
||||
zend_compile.c:
|
||||
RIP handle_* functions. ZE2 will use __ handlers instead.
|
||||
|
||||
* zend_object_handlers.c:
|
||||
Move Z_OBJ_P here.
|
||||
|
||||
* zend_operators.h:
|
||||
Remove Z_OBJ - it's internal to Zend objects, no generic function except
|
||||
those in zend_object_handlers.c should use it.
|
||||
Add Z_OBJ_HANDLER macro for easy access to handlers
|
||||
|
||||
2003-01-12 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* zend.c
|
||||
zend.h
|
||||
zend_builtin_functions.c:
|
||||
ZTS fixes.
|
||||
|
||||
2003-01-12 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_object_handlers.c:
|
||||
add get_class_name handler
|
||||
|
||||
* zend.c:
|
||||
Use generic handlers instead of Z_OBJ
|
||||
|
||||
2003-01-12 Harald Radi <harald.radi+coding.php@nme.at>
|
||||
|
||||
* zend_modules.h:
|
||||
|
||||
|
||||
* zend_ini.h
|
||||
zend_ini_entry.h
|
||||
zend_modules.h:
|
||||
partially revert previous commit and
|
||||
change zend_modules.h to include
|
||||
a forward declaration to zend_ini_entry
|
||||
|
||||
* zend_ini.h
|
||||
zend_ini_entry.h
|
||||
zend_modules.h:
|
||||
added zend_ini_entry to zend_modules_entry as
|
||||
discussed with zeev
|
||||
|
||||
* zend_builtin_functions.c:
|
||||
fix 'use of uninitialized variable' warning
|
||||
|
||||
2003-01-12 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_objects_API.c:
|
||||
validate handle
|
||||
|
||||
2003-01-12 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend.c
|
||||
zend_compile.c
|
||||
zend_execute.c
|
||||
zend_execute_API.c
|
||||
zend_globals.h
|
||||
zend_ini.c
|
||||
zend_ini.h
|
||||
zend_variables.c:
|
||||
Implemented compatibility mode
|
||||
To enable - zend2.implicit_clone = on in php.ini or using ini_set()
|
||||
|
||||
2003-01-11 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
- Fix typo and whitespace
|
||||
|
||||
2003-01-11 Derick Rethans <d.rethans@jdimedia.nl>
|
||||
|
||||
* zend.c
|
||||
zend_execute.c
|
||||
zend_execute.h
|
||||
zend_execute_API.c:
|
||||
- Ported the zend_execute_internal hook to ZendEngine2.
|
||||
|
||||
2003-01-11 Harald Radi <harald.radi+coding.php@nme.at>
|
||||
|
||||
* zend_ts_hash.c:
|
||||
freed reader twice instead of writer and reader
|
||||
|
||||
2003-01-10 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_alloc.c:
|
||||
MFZE2
|
||||
|
||||
2003-01-10 Andrei Zmievski <andrei@gravitonic.com>
|
||||
|
||||
* zend_API.c:
|
||||
Automatically register constructor, destructor, and clone function when
|
||||
class methods are registered.
|
||||
|
||||
2003-01-09 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
Found some more occurences of that elusive bug...
|
||||
|
||||
* zend_compile.c:
|
||||
Fix one lousy, annoying lurking bug (memory corruption)
|
||||
Sebastian - try coWiki again please...
|
||||
|
||||
* zend_API.h:
|
||||
Unify and make it easy to add code into the broken-string error handler
|
||||
|
||||
* zend_language_parser.y:
|
||||
Fix writability checks
|
||||
|
||||
* zend.c:
|
||||
Fix leak
|
||||
|
||||
2003-01-08 James Cox <james@imajes.info>
|
||||
|
||||
* zend.h:
|
||||
cvs is dev not alpha.
|
||||
|
||||
2003-01-08 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_builtin_functions.c:
|
||||
MFZE2
|
||||
|
||||
2003-01-05 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_globals.h
|
||||
zend_language_scanner.l:
|
||||
MFZE1 - lineno fix
|
||||
|
||||
2003-01-02 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c:
|
||||
Fix incorrect linkage of access-levels, when using private methods
|
||||
|
||||
2003-01-01 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_API.c
|
||||
zend_operators.h:
|
||||
Win32 build fix
|
||||
|
||||
2003-01-01 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_operators.h:
|
||||
use handler for Z_OBJPROP
|
||||
|
||||
2003-01-01 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_API.c:
|
||||
Fix Wez's problem
|
||||
|
||||
2002-12-31 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* LICENSE
|
||||
zend.c
|
||||
zend.h
|
||||
zend_API.c
|
||||
zend_API.h
|
||||
zend_alloc.c
|
||||
zend_alloc.h
|
||||
zend_builtin_functions.c
|
||||
zend_builtin_functions.h
|
||||
zend_compile.c
|
||||
zend_compile.h
|
||||
zend_config.nw.h
|
||||
zend_config.w32.h
|
||||
zend_constants.c
|
||||
zend_constants.h
|
||||
zend_dynamic_array.c
|
||||
zend_dynamic_array.h
|
||||
zend_errors.h
|
||||
zend_execute.c
|
||||
zend_execute.h
|
||||
zend_execute_API.c
|
||||
zend_extensions.c
|
||||
zend_extensions.h
|
||||
zend_fast_cache.h
|
||||
zend_globals.h
|
||||
zend_globals_macros.h
|
||||
zend_hash.c
|
||||
zend_hash.h
|
||||
zend_highlight.c
|
||||
zend_highlight.h
|
||||
zend_indent.c
|
||||
zend_indent.h
|
||||
zend_ini.c
|
||||
zend_ini.h
|
||||
zend_language_scanner.h
|
||||
zend_list.c
|
||||
zend_list.h
|
||||
zend_llist.c
|
||||
zend_llist.h
|
||||
zend_mm.c
|
||||
zend_mm.h
|
||||
zend_modules.h
|
||||
zend_opcode.c
|
||||
zend_operators.c
|
||||
zend_operators.h
|
||||
zend_ptr_stack.c
|
||||
zend_ptr_stack.h
|
||||
zend_qsort.c
|
||||
zend_qsort.h
|
||||
zend_sprintf.c
|
||||
zend_stack.c
|
||||
zend_stack.h
|
||||
zend_static_allocator.c
|
||||
zend_static_allocator.h
|
||||
zend_ts_hash.c
|
||||
zend_ts_hash.h
|
||||
zend_types.h
|
||||
zend_variables.c
|
||||
zend_variables.h:
|
||||
Bump year.
|
||||
|
||||
2002-12-31 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_object_handlers.h:
|
||||
fix level of indirection
|
||||
|
||||
2002-12-30 Andrei Zmievski <andrei@gravitonic.com>
|
||||
|
||||
* zend_execute_API.c:
|
||||
Adjust the error message.
|
||||
|
||||
2002-12-30 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_object_handlers.h:
|
||||
Oops, fix it indeed
|
||||
|
||||
* zend_object_handlers.h:
|
||||
Better check
|
||||
|
||||
2002-12-26 Andrei Zmievski <andrei@gravitonic.com>
|
||||
|
||||
* zend_compile.c:
|
||||
do_inherit_method_check() is supposed to return 0 or 1, not SUCCESS or
|
||||
FAILURE.
|
||||
|
||||
2002-12-14 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_language_scanner.l:
|
||||
MFZE2
|
||||
|
||||
2002-12-10 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
Fix check to allow for static+access level modifiers
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_language_parser.y:
|
||||
- Allow variables to have both 'static' modifier and an access level.
|
||||
NOTE: This only works at the syntax level right now (parser). It
|
||||
doesn't actually work as of yet - all statics are considered
|
||||
public for now
|
||||
- Prevent users from putting more restrictions on methods in derived
|
||||
classes
|
||||
(i.e., you cannot make a public method private in a derived class, etc.)
|
||||
|
||||
2002-12-09 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_mm.c:
|
||||
- Fix a bug which I just introduced.
|
||||
|
||||
* zend_mm.c:
|
||||
- Fix typo
|
||||
|
||||
* zend_mm.c:
|
||||
- Improvements
|
||||
|
||||
* zend_mm.c
|
||||
zend_mm.h:
|
||||
- First attempt to improve memory manager during realloc()'s
|
||||
|
||||
2002-12-08 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
Remove comment
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_language_parser.y:
|
||||
Treat the absence of an access type just as if 'public' was supplied
|
||||
|
||||
* zend_compile.c:
|
||||
Simplify/fix inheritance checks
|
||||
|
||||
* zend_execute.c:
|
||||
Support private/protected constructors
|
||||
|
||||
2002-12-07 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* ZEND_CHANGES:
|
||||
Update.
|
||||
|
||||
2002-12-07 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
Fix error messages
|
||||
|
||||
* zend_language_parser.y
|
||||
zend_language_scanner.l:
|
||||
Remove unintentional code
|
||||
|
||||
2002-12-07 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
- Dissallow using parent, self and main as class names
|
||||
|
||||
2002-12-06 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend.c
|
||||
zend.h
|
||||
zend_API.c
|
||||
zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_globals.h
|
||||
zend_hash.h
|
||||
zend_language_parser.y
|
||||
zend_language_scanner.l:
|
||||
- Implement public/protected/private methods.
|
||||
- Prevent instantiation of classes with abstract methods.
|
||||
Based in part on Marcus's patch.
|
||||
|
||||
2002-12-01 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_alloc.c:
|
||||
- Allow enabling of memory cache with zend_mm
|
||||
|
||||
* zend.c
|
||||
zend.c
|
||||
zend.h
|
||||
zend.h
|
||||
zend_builtin_functions.c
|
||||
zend_builtin_functions.c:
|
||||
- MFZE1
|
||||
|
||||
* zend.c
|
||||
zend.h
|
||||
zend_builtin_functions.c:
|
||||
- Revert as the patch doesn't compile
|
||||
|
||||
* zend.c
|
||||
zend_API.c
|
||||
zend_builtin_functions.c
|
||||
zend_compile.c
|
||||
zend_execute.c
|
||||
zend_execute_API.c
|
||||
zend_indent.c
|
||||
zend_object_handlers.c
|
||||
zend_opcode.c
|
||||
zend_operators.c
|
||||
zend_operators.h
|
||||
zend_variables.c:
|
||||
h WHitespace
|
||||
|
||||
* zend.c:
|
||||
- Initialize constants_updated (by Marcus)
|
||||
|
||||
* zend_builtin_functions.c:
|
||||
- Nuke use of deprecated macro
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_language_parser.y:
|
||||
- FN_IS_STATIC -> FN_STATIC
|
||||
|
||||
* zend.c:
|
||||
- Fix crash
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h:
|
||||
- My personal cleanups
|
||||
|
||||
* zend_API.c
|
||||
zend_API.h
|
||||
zend_builtin_functions.c
|
||||
zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_execute.h
|
||||
zend_language_parser.y
|
||||
zend_object_handlers.c:
|
||||
- Commit Marcus' cleanup of abstract and static inheritance and improve
|
||||
- error messages
|
||||
|
||||
2002-11-22 Derick Rethans <d.rethans@jdimedia.nl>
|
||||
|
||||
* zend_API.c:
|
||||
- Initialize all functions to non-static (patch by Marcus Börger
|
||||
<marcus.boerger@t-online.de>.
|
||||
|
||||
2002-11-22 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* zend_execute.c:
|
||||
Show class name as well. Patch by Marcus Börger.
|
||||
|
||||
* zend_execute.c:
|
||||
Show the name of the abstract method in the error.
|
||||
|
||||
* zend_compile.h:
|
||||
Fix prototype.
|
||||
|
||||
2002-11-20 Derick Rethans <d.rethans@jdimedia.nl>
|
||||
|
||||
* zend_builtin_functions.c:
|
||||
- MFZE1: Disable leak() and crash() when not using debug mode
|
||||
|
||||
2002-11-20 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* ZEND_CHANGES:
|
||||
- Add abstract methods
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_language_parser.y
|
||||
zend_language_scanner.l:
|
||||
- Fix build (thanks Marcus)
|
||||
- Implement abstract methods, syntax:
|
||||
- abstract function foo($vars);
|
||||
- I don't see any reason why modifiers such as static/public need to be
|
||||
- used with abstract. PHP is weakly typed and there would be no meaning to
|
||||
- this anyway. People who want a strictly typed compiled language are
|
||||
- looking in the wrong place.
|
||||
|
||||
2002-11-19 Zeev Suraski <zeev@zend.com>
|
||||
|
||||
* zend.c
|
||||
zend.h
|
||||
zend_builtin_functions.c
|
||||
zend_execute.c
|
||||
zend_execute_API.c:
|
||||
MFZE1 - error_reporting fix
|
||||
|
||||
2002-11-18 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_language_scanner.l:
|
||||
- MFZE1
|
||||
|
||||
2002-11-17 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
fix the leak
|
||||
|
||||
2002-11-16 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_language_scanner.l
|
||||
zend_language_scanner.l:
|
||||
- MFZE1
|
||||
|
||||
* Zend.m4
|
||||
configure.in:
|
||||
- MFZE1
|
||||
|
||||
* zend_hash.c:
|
||||
- Commit fix for bug #19566 (I think it's by Marcus :)
|
||||
|
||||
2002-11-14 Andrei Zmievski <andrei@gravitonic.com>
|
||||
|
||||
* zend_llist.h:
|
||||
MFZE1
|
||||
|
||||
2002-11-13 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
semi-fix string offsets crash - now it doesn't crash, but still leaks
|
||||
|
||||
* zend_object_handlers.c:
|
||||
fix static
|
||||
|
||||
2002-11-11 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* ZEND_CHANGES:
|
||||
- Update with statics
|
||||
|
||||
2002-11-11 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* zend_execute.c:
|
||||
Fugbix typo.
|
||||
|
||||
2002-11-11 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend.h:
|
||||
MFZE1
|
||||
|
||||
2002-11-10 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_compile.c:
|
||||
- MFZE1
|
||||
|
||||
2002-11-10 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_language_parser.y:
|
||||
fix statics - make it behave like $this (fetch type "static")
|
||||
Side effect: indirect references to statics won't work.
|
||||
|
||||
2002-11-06 Sebastian Bergmann <sb@sebastian-bergmann.de>
|
||||
|
||||
* zend_execute.c:
|
||||
Fix ZTS build.
|
||||
|
||||
2002-11-06 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_execute.c:
|
||||
fix zend_assign_to_object_op
|
||||
|
||||
2002-11-05 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_language_scanner.l:
|
||||
MFZE1
|
||||
|
||||
2002-11-05 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_compile.h:
|
||||
- Shift around zend_op members
|
||||
|
||||
* ZEND_CHANGES:
|
||||
- A couple of updates
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h
|
||||
zend_execute.c
|
||||
zend_language_parser.y:
|
||||
- Add support for static methods. Basically methods which are defined as
|
||||
- static don't have $this. That's the whole difference.
|
||||
|
||||
* tests/zend2.php:
|
||||
- $clone -> $that
|
||||
|
||||
* zend_execute_API.c:
|
||||
- Fix bug introduced with type change of free_op1/2
|
||||
|
||||
* zend_language_parser.y
|
||||
zend_language_scanner.l:
|
||||
- ATTENTION: Finally nuke old_function and cfunction. I think it is time
|
||||
- to get rid of these BC notations. This is from the days of the move from
|
||||
- PHP/FI 2 -> PHP 3
|
||||
|
||||
2002-11-05 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_hash.c:
|
||||
Revert of previous patch.
|
||||
|
||||
2002-11-05 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_objects.c:
|
||||
- Change the automatically created variable $clone in __clone() to
|
||||
- $that as discussed at the PHP Conference. If there are any objections
|
||||
- alternative names please let me know. The reason for changing it from
|
||||
- $clone is because $clone sounds as if it's the newly cloned object and
|
||||
- not the old one.
|
||||
|
||||
2002-11-05 Stanislav Malyshev <stas@zend.com>
|
||||
|
||||
* zend_compile.c
|
||||
zend_compile.h:
|
||||
avoid using 'class' in exported functions - it annoys c++
|
||||
|
||||
2002-11-05 Stig Bakken <ssb@fast.no>
|
||||
|
||||
* zend.c:
|
||||
Fixed some special cases that were crashing for the exception default
|
||||
handler.
|
||||
|
||||
2002-11-04 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_compile.c:
|
||||
Silence compiler warnings.
|
||||
|
||||
* zend_hash.c:
|
||||
If ordered is not set a random compiler assigned value of *p2 would be
|
||||
used,
|
||||
this patch fixes the problem by initializing *p2 to NULL.
|
||||
|
||||
* zend_operators.c:
|
||||
Silence compile warning, ctype.h is needed for tolower() function.
|
||||
|
||||
* zend_language_scanner.l:
|
||||
MFZE1
|
||||
|
||||
2002-11-02 Derick Rethans <d.rethans@jdimedia.nl>
|
||||
|
||||
* zend_language_scanner.l:
|
||||
- Fix segfault when __CLASS__ was used outside a class definition
|
||||
|
||||
* zend.c:
|
||||
- MFZE1
|
||||
|
||||
2002-11-02 Ilia Alshanetsky <ilia@prohost.org>
|
||||
|
||||
* zend_language_scanner.l:
|
||||
MFZE1 (20214).
|
||||
|
||||
2002-11-01 Andi Gutmans <andi@zend.com>
|
||||
|
||||
* zend_execute.c: - Fix unset($this->foo)
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
--------------------------------------------------------------------
|
||||
The Zend Engine License, version 2.00
|
||||
Copyright (c) 1999-2002 Zend Technologies Ltd. All rights reserved.
|
||||
The Zend Engine License, Version 2.00
|
||||
Copyright (c) 1999-2003 Zend Technologies Ltd. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
||||
+5
-3
@@ -101,8 +101,10 @@ compared.
|
||||
Objects - reflection
|
||||
--------------------
|
||||
|
||||
get_class_name is used to retrieve class name of the object. No other
|
||||
reflection functions are currently implemented.
|
||||
get_class_name is used to retrieve class name of the object.
|
||||
get_class_entry returns class entry (zend_class_entry) for the object,
|
||||
in case there exists PHP class for it.
|
||||
No other reflection functions are currently implemented.
|
||||
|
||||
Objects - data structures and handlers
|
||||
---------------------------------------
|
||||
@@ -186,7 +188,7 @@ for any other PHP internal function).
|
||||
|
||||
get_constructor - get description for the object constructor method
|
||||
|
||||
get_class_entry - should return the class entry
|
||||
get_class_entry - should return the class entry for the object
|
||||
|
||||
get_class_name - get the name of the class the object belongs to
|
||||
|
||||
|
||||
+27
-49
@@ -21,9 +21,10 @@ Changes in the Zend Engine 2.0
|
||||
|
||||
* Private and Protected Members.
|
||||
|
||||
The Zend Engine 2.0 introduces private and protected member variables.
|
||||
Note that for performance reasons no error message is emitted in
|
||||
case of an illegal access to a private or protectecd member variable.
|
||||
The Zend Engine 2.0 introduces private and protected member
|
||||
variables. Note that for performance reasons no error message is
|
||||
emitted in case of an illegal access to a private or protectecd
|
||||
member variable.
|
||||
|
||||
Example:
|
||||
|
||||
@@ -34,9 +35,9 @@ Changes in the Zend Engine 2.0
|
||||
protected $Foo = "Hello, Bar!\n";
|
||||
|
||||
function printHello() {
|
||||
print "MyClass::printHello() ".$this->Hello;
|
||||
print "MyClass::printHello() ".$this->Bar;
|
||||
print "MyClass::printHello() ".$this->Foo;
|
||||
print "MyClass::printHello() " . $this->Hello;
|
||||
print "MyClass::printHello() " . $this->Bar;
|
||||
print "MyClass::printHello() " . $this->Foo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,10 +45,10 @@ Changes in the Zend Engine 2.0
|
||||
protected $Foo;
|
||||
|
||||
function printHello() {
|
||||
MyClass::printHello(); /* Should print */
|
||||
print "MyClass2::printHello() ".$this->Hello; /* Shouldn't print out anything */
|
||||
print "MyClass2::printHello() ".$this->Bar; /* Shouldn't print (not declared)*/
|
||||
print "MyClass2::printHello() ".$this->Foo; /* Should print */
|
||||
MyClass::printHello(); /* Should print */
|
||||
print "MyClass2::printHello() " . $this->Hello; /* Shouldn't print out anything */
|
||||
print "MyClass2::printHello() " . $this->Bar; /* Shouldn't print (not declared)*/
|
||||
print "MyClass2::printHello() " . $this->Foo; /* Should print */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +65,15 @@ Changes in the Zend Engine 2.0
|
||||
$obj->printHello();
|
||||
?>
|
||||
|
||||
Protected member variables can be accessed in classes extending the class
|
||||
they are declared in, whereas private member variables can only be accessed
|
||||
by the class they belong to.
|
||||
|
||||
Note: Protected member variables have to be declared in every class they
|
||||
are used!
|
||||
Protected member variables can be accessed in classes extending the
|
||||
class they are declared in, whereas private member variables can
|
||||
only be accessed by the class they belong to.
|
||||
|
||||
Note: Protected member variables have to be declared in every class
|
||||
they are used!
|
||||
|
||||
* Private and protected methods. (TBD)
|
||||
|
||||
* Object Cloning.
|
||||
|
||||
The Zend Engine 1.0 offered no way a user could decide what copy
|
||||
@@ -489,10 +492,15 @@ Changes in the Zend Engine 2.0
|
||||
print foo::$my_static;
|
||||
?>
|
||||
|
||||
* Static methods (TBD)
|
||||
* Static methods. (TBD)
|
||||
|
||||
* static function variables
|
||||
statics are now treated at compile-time which allows developers
|
||||
* Abstract methods. (TBD)
|
||||
|
||||
* instanceof (TBD)
|
||||
|
||||
* Static function variables.
|
||||
|
||||
Statics are now treated at compile-time which allows developers
|
||||
to assign variables to statics by reference. This change also
|
||||
greatly improves their performance but means that indirect
|
||||
references to statics will not work anymore.
|
||||
@@ -510,36 +518,6 @@ Changes in the Zend Engine 2.0
|
||||
}
|
||||
?>
|
||||
|
||||
* Built-In Backtracing.
|
||||
|
||||
Example:
|
||||
|
||||
<?php
|
||||
$backtrace = debug_backtrace();
|
||||
|
||||
foreach ($backtrace as $step) {
|
||||
if (!empty($step['args'])) {
|
||||
foreach ($step['args'] as $arg) {
|
||||
$args = isset($args) ? $args . ', ' : '';
|
||||
$args .= var_export($arg, true);
|
||||
}
|
||||
} else {
|
||||
$args = '';
|
||||
}
|
||||
|
||||
$args = str_replace(array("\n", ',)'), array('', ')'), $args);
|
||||
|
||||
printf(
|
||||
"%s%s(%s) [%s:%s]\n",
|
||||
isset($step['class']) ? $step['class'] . '::' : '',
|
||||
$step['function'],
|
||||
$args,
|
||||
$step['file'],
|
||||
$step['line']
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
||||
* __autoload(). TBD.
|
||||
|
||||
* Method calls and property accesses can be overloaded
|
||||
|
||||
+10
-6
@@ -57,9 +57,12 @@ dlfcn.h)
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_SIGNAL
|
||||
|
||||
AC_DEFUN(LIBZEND_LIBDL_CHECKS,[
|
||||
AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"])
|
||||
AC_CHECK_FUNC(dlopen,[AC_DEFINE(HAVE_LIBDL, 1,[ ])])
|
||||
])
|
||||
|
||||
AC_DEFUN(LIBZEND_DLSYM_CHECK,[
|
||||
dnl
|
||||
dnl Ugly hack to check if dlsym() requires a leading underscore in symbol name.
|
||||
dnl
|
||||
@@ -72,6 +75,7 @@ _LT_AC_TRY_DLOPEN_SELF([
|
||||
], [
|
||||
AC_MSG_RESULT(no)
|
||||
], [])
|
||||
])
|
||||
|
||||
dnl This is required for QNX and may be some BSD derived systems
|
||||
AC_CHECK_TYPE( uint, unsigned int )
|
||||
@@ -103,11 +107,11 @@ AC_ARG_ENABLE(debug,
|
||||
|
||||
AC_DEFUN(LIBZEND_OTHER_CHECKS,[
|
||||
|
||||
AC_ARG_ENABLE(experimental-zts,
|
||||
[ --enable-experimental-zts This will most likely break your build],[
|
||||
ZEND_EXPERIMENTAL_ZTS=$enableval
|
||||
AC_ARG_ENABLE(maintainer-zts,
|
||||
[ --enable-maintainer-zts Enable thread safety - for code maintainers only],[
|
||||
ZEND_MAINTAINER_ZTS=$enableval
|
||||
],[
|
||||
ZEND_EXPERIMENTAL_ZTS=no
|
||||
ZEND_MAINTAINER_ZTS=no
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(inline-optimization,
|
||||
@@ -126,7 +130,7 @@ AC_ARG_ENABLE(memory-limit,
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING(whether to enable thread-safety)
|
||||
AC_MSG_RESULT($ZEND_EXPERIMENTAL_ZTS)
|
||||
AC_MSG_RESULT($ZEND_MAINTAINER_ZTS)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable inline optimization for GCC)
|
||||
AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
|
||||
@@ -152,7 +156,7 @@ fi
|
||||
|
||||
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
|
||||
|
||||
if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then
|
||||
if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
|
||||
AC_DEFINE(ZTS,1,[ ])
|
||||
CFLAGS="$CFLAGS -DZTS"
|
||||
LIBZEND_CPLUSPLUS_CHECKS
|
||||
|
||||
@@ -17,6 +17,8 @@ test -z "$CFLAGS" && auto_cflags=1
|
||||
sinclude(Zend.m4)
|
||||
|
||||
LIBZEND_BASIC_CHECKS
|
||||
LIBZEND_LIBDL_CHECKS
|
||||
LIBZEND_DLSYM_CHECK
|
||||
|
||||
AM_PROG_LIBTOOL
|
||||
if test "$enable_debug" != "yes"; then
|
||||
|
||||
+160
-27
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -58,6 +58,34 @@ static void (*zend_message_dispatcher_p)(long message, void *data);
|
||||
static int (*zend_get_configuration_directive_p)(char *name, uint name_length, zval *contents);
|
||||
|
||||
|
||||
static ZEND_INI_MH(OnUpdateErrorReporting)
|
||||
{
|
||||
if (!new_value) {
|
||||
EG(error_reporting) = E_ALL & ~E_NOTICE;
|
||||
} else {
|
||||
EG(error_reporting) = atoi(new_value);
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static ZEND_INI_MH(OnUpdateImplicitClone)
|
||||
{
|
||||
if (!new_value) {
|
||||
EG(implicit_clone) = 0;
|
||||
} else {
|
||||
EG(implicit_clone) = atoi(new_value) ? 1 : 0;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
ZEND_INI_BEGIN()
|
||||
ZEND_INI_ENTRY("error_reporting", NULL, ZEND_INI_ALL, OnUpdateErrorReporting)
|
||||
ZEND_INI_ENTRY("zend2.implicit_clone", NULL, ZEND_INI_ALL, OnUpdateImplicitClone)
|
||||
ZEND_INI_END()
|
||||
|
||||
|
||||
#ifdef ZTS
|
||||
ZEND_API int compiler_globals_id;
|
||||
ZEND_API int executor_globals_id;
|
||||
@@ -73,12 +101,12 @@ ZEND_API zval zval_used_for_init; /* True global variable */
|
||||
/* version information */
|
||||
static char *zend_version_info;
|
||||
static uint zend_version_info_length;
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2002 Zend Technologies\n"
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2003 Zend Technologies\n"
|
||||
|
||||
|
||||
#define PRINT_ZVAL_INDENT 4
|
||||
|
||||
static void print_hash(HashTable *ht, int indent)
|
||||
static void print_hash(HashTable *ht, int indent TSRMLS_DC)
|
||||
{
|
||||
zval **tmp;
|
||||
char *string_key;
|
||||
@@ -107,7 +135,7 @@ static void print_hash(HashTable *ht, int indent)
|
||||
break;
|
||||
}
|
||||
ZEND_PUTS("] => ");
|
||||
zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT);
|
||||
zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT TSRMLS_CC);
|
||||
ZEND_PUTS("\n");
|
||||
zend_hash_move_forward_ex(ht, &iterator);
|
||||
}
|
||||
@@ -118,6 +146,34 @@ static void print_hash(HashTable *ht, int indent)
|
||||
ZEND_PUTS(")\n");
|
||||
}
|
||||
|
||||
static void print_flat_hash(HashTable *ht TSRMLS_DC)
|
||||
{
|
||||
zval **tmp;
|
||||
char *string_key;
|
||||
HashPosition iterator;
|
||||
ulong num_key;
|
||||
uint str_len;
|
||||
int i = 0;
|
||||
|
||||
zend_hash_internal_pointer_reset_ex(ht, &iterator);
|
||||
while (zend_hash_get_current_data_ex(ht, (void **) &tmp, &iterator) == SUCCESS) {
|
||||
if (i++ > 0) {
|
||||
ZEND_PUTS(",");
|
||||
}
|
||||
ZEND_PUTS("[");
|
||||
switch (zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, &iterator)) {
|
||||
case HASH_KEY_IS_STRING:
|
||||
ZEND_PUTS(string_key);
|
||||
break;
|
||||
case HASH_KEY_IS_LONG:
|
||||
zend_printf("%ld", num_key);
|
||||
break;
|
||||
}
|
||||
ZEND_PUTS("] => ");
|
||||
zend_print_flat_zval_r(*tmp TSRMLS_CC);
|
||||
zend_hash_move_forward_ex(ht, &iterator);
|
||||
}
|
||||
}
|
||||
|
||||
ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy)
|
||||
{
|
||||
@@ -200,16 +256,65 @@ ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int in
|
||||
return expr->value.str.len;
|
||||
}
|
||||
|
||||
|
||||
ZEND_API void zend_print_zval_r(zval *expr, int indent)
|
||||
ZEND_API void zend_print_flat_zval_r(zval *expr TSRMLS_DC)
|
||||
{
|
||||
zend_print_zval_r_ex(zend_write, expr, indent);
|
||||
zend_write_func_t write_func = zend_write;
|
||||
|
||||
switch (expr->type) {
|
||||
case IS_ARRAY:
|
||||
ZEND_PUTS("Array (");
|
||||
if (++expr->value.ht->nApplyCount>1) {
|
||||
ZEND_PUTS(" *RECURSION*");
|
||||
expr->value.ht->nApplyCount--;
|
||||
return;
|
||||
}
|
||||
print_flat_hash(expr->value.ht TSRMLS_CC);
|
||||
ZEND_PUTS(")");
|
||||
expr->value.ht->nApplyCount--;
|
||||
break;
|
||||
case IS_OBJECT:
|
||||
{
|
||||
HashTable *properties = NULL;
|
||||
char *class_name = NULL;
|
||||
zend_uint clen;
|
||||
|
||||
if (Z_OBJ_HANDLER_P(expr, get_class_name)) {
|
||||
Z_OBJ_HANDLER_P(expr, get_class_name)(expr, &class_name, &clen, 0 TSRMLS_CC);
|
||||
}
|
||||
if (class_name == NULL) {
|
||||
class_name = "Unknown Class";
|
||||
}
|
||||
zend_printf("%s Object (", class_name);
|
||||
if (Z_OBJ_HANDLER_P(expr, get_properties)) {
|
||||
properties = Z_OBJPROP_P(expr);
|
||||
}
|
||||
if (properties) {
|
||||
if (++properties->nApplyCount>1) {
|
||||
ZEND_PUTS(" *RECURSION*");
|
||||
properties->nApplyCount--;
|
||||
return;
|
||||
}
|
||||
print_flat_hash(properties TSRMLS_CC);
|
||||
properties->nApplyCount--;
|
||||
}
|
||||
ZEND_PUTS(")");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
zend_print_variable(expr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ZEND_API void zend_print_zval_r(zval *expr, int indent TSRMLS_DC)
|
||||
{
|
||||
zend_print_zval_r_ex(zend_write, expr, indent TSRMLS_CC);
|
||||
}
|
||||
|
||||
|
||||
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent)
|
||||
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC)
|
||||
{
|
||||
switch(expr->type) {
|
||||
switch (expr->type) {
|
||||
case IS_ARRAY:
|
||||
ZEND_PUTS("Array\n");
|
||||
if (++expr->value.ht->nApplyCount>1) {
|
||||
@@ -217,21 +322,34 @@ ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int
|
||||
expr->value.ht->nApplyCount--;
|
||||
return;
|
||||
}
|
||||
print_hash(expr->value.ht, indent);
|
||||
print_hash(expr->value.ht, indent TSRMLS_CC);
|
||||
expr->value.ht->nApplyCount--;
|
||||
break;
|
||||
case IS_OBJECT:
|
||||
{
|
||||
zend_object *object = Z_OBJ_P(expr);
|
||||
|
||||
if (++object->properties->nApplyCount>1) {
|
||||
ZEND_PUTS(" *RECURSION*");
|
||||
object->properties->nApplyCount--;
|
||||
return;
|
||||
HashTable *properties = NULL;
|
||||
char *class_name = NULL;
|
||||
zend_uint clen;
|
||||
|
||||
if (Z_OBJ_HANDLER_P(expr, get_class_name)) {
|
||||
Z_OBJ_HANDLER_P(expr, get_class_name)(expr, &class_name, &clen, 0 TSRMLS_CC);
|
||||
}
|
||||
if (class_name == NULL) {
|
||||
class_name = "Unknown Class";
|
||||
}
|
||||
zend_printf("%s Object\n", class_name);
|
||||
if (Z_OBJ_HANDLER_P(expr, get_properties)) {
|
||||
properties = Z_OBJPROP_P(expr);
|
||||
}
|
||||
if (properties) {
|
||||
if (++properties->nApplyCount>1) {
|
||||
ZEND_PUTS(" *RECURSION*");
|
||||
properties->nApplyCount--;
|
||||
return;
|
||||
}
|
||||
print_hash(properties, indent TSRMLS_CC);
|
||||
properties->nApplyCount--;
|
||||
}
|
||||
zend_printf("%s Object\n", object->ce->name);
|
||||
print_hash(object->properties, indent);
|
||||
object->properties->nApplyCount--;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -253,7 +371,7 @@ static FILE *zend_fopen_wrapper(const char *filename, char **opened_path)
|
||||
static void register_standard_class(void)
|
||||
{
|
||||
zend_standard_class_def = malloc(sizeof(zend_class_entry));
|
||||
|
||||
|
||||
zend_standard_class_def->type = ZEND_INTERNAL_CLASS;
|
||||
zend_standard_class_def->name_length = sizeof("stdClass") - 1;
|
||||
zend_standard_class_def->name = zend_strndup("stdClass", zend_standard_class_def->name_length);
|
||||
@@ -269,10 +387,13 @@ static void register_standard_class(void)
|
||||
zend_standard_class_def->constructor = NULL;
|
||||
zend_standard_class_def->destructor = NULL;
|
||||
zend_standard_class_def->clone = NULL;
|
||||
zend_standard_class_def->handle_function_call = NULL;
|
||||
zend_standard_class_def->handle_property_get = NULL;
|
||||
zend_standard_class_def->handle_property_set = NULL;
|
||||
zend_standard_class_def->__call = NULL;
|
||||
zend_standard_class_def->__get = NULL;
|
||||
zend_standard_class_def->__set = NULL;
|
||||
zend_standard_class_def->refcount = 1;
|
||||
zend_standard_class_def->constants_updated = 0;
|
||||
zend_standard_class_def->ce_flags = 0;
|
||||
|
||||
zend_hash_add(GLOBAL_CLASS_TABLE, "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry *), NULL);
|
||||
}
|
||||
|
||||
@@ -436,6 +557,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
|
||||
|
||||
zend_compile_file = compile_file;
|
||||
zend_execute = execute;
|
||||
zend_execute_internal = NULL;
|
||||
|
||||
zend_init_opcodes_handlers();
|
||||
|
||||
@@ -508,6 +630,14 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
|
||||
}
|
||||
|
||||
|
||||
void zend_register_standard_ini_entries(TSRMLS_D)
|
||||
{
|
||||
int module_number = 0;
|
||||
|
||||
REGISTER_INI_ENTRIES();
|
||||
}
|
||||
|
||||
|
||||
#ifdef ZTS
|
||||
/* Unlink the global (r/o) copies of the class, function and constant tables,
|
||||
* and use a fresh r/w copy for the startup thread
|
||||
@@ -520,6 +650,7 @@ void zend_post_startup(TSRMLS_D)
|
||||
*GLOBAL_FUNCTION_TABLE = *compiler_globals->function_table;
|
||||
*GLOBAL_CLASS_TABLE = *compiler_globals->class_table;
|
||||
*GLOBAL_CONSTANTS_TABLE = *executor_globals->zend_constants;
|
||||
zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
|
||||
compiler_globals_ctor(compiler_globals, tsrm_ls);
|
||||
executor_globals_ctor(executor_globals, tsrm_ls);
|
||||
}
|
||||
@@ -637,7 +768,7 @@ void zend_deactivate_modules(TSRMLS_D)
|
||||
void zend_deactivate(TSRMLS_D)
|
||||
{
|
||||
/* we're no longer executing anything */
|
||||
EG(opline_ptr) = NULL;
|
||||
EG(opline_ptr) = NULL;
|
||||
EG(active_symbol_table) = NULL;
|
||||
|
||||
zend_try {
|
||||
@@ -771,7 +902,7 @@ ZEND_API void zend_error(int type, const char *format, ...)
|
||||
z_error_filename->value.str.val = estrndup(error_filename, z_error_filename->value.str.len);
|
||||
z_error_filename->type = IS_STRING;
|
||||
}
|
||||
|
||||
|
||||
z_error_lineno->value.lval = error_lineno;
|
||||
z_error_lineno->type = IS_LONG;
|
||||
|
||||
@@ -789,7 +920,9 @@ ZEND_API void zend_error(int type, const char *format, ...)
|
||||
orig_user_error_handler = EG(user_error_handler);
|
||||
EG(user_error_handler) = NULL;
|
||||
if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) {
|
||||
zval_ptr_dtor(&retval);
|
||||
if (retval) {
|
||||
zval_ptr_dtor(&retval);
|
||||
}
|
||||
} else {
|
||||
/* The user error handler failed, use built-in error handler */
|
||||
zend_error_cb(type, error_filename, error_lineno, format, args);
|
||||
@@ -849,7 +982,7 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
|
||||
zend_file_handle *file_handle;
|
||||
zend_op_array *orig_op_array = EG(active_op_array);
|
||||
zval *local_retval=NULL;
|
||||
|
||||
|
||||
va_start(files, file_count);
|
||||
for (i=0; i<file_count; i++) {
|
||||
file_handle = va_arg(files, zend_file_handle *);
|
||||
|
||||
+12
-5
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -22,7 +22,7 @@
|
||||
#ifndef ZEND_H
|
||||
#define ZEND_H
|
||||
|
||||
#define ZEND_VERSION "2.0.0-alpha3"
|
||||
#define ZEND_VERSION "2.0.0-dev"
|
||||
|
||||
#define ZEND_ENGINE_2
|
||||
|
||||
@@ -247,7 +247,7 @@ typedef union _zvalue_value {
|
||||
double dval; /* double value */
|
||||
struct {
|
||||
char *val;
|
||||
zend_uint len;
|
||||
int len;
|
||||
} str;
|
||||
HashTable *ht; /* hash table value */
|
||||
/* struct {
|
||||
@@ -295,6 +295,8 @@ typedef struct _zend_overloaded_element {
|
||||
/* A lot of stuff needs shifiting around in order to include zend_compile.h here */
|
||||
union _zend_function;
|
||||
|
||||
#define ZEND_CE_ABSTRACT ZEND_ACC_ABSTRACT /* same as ZEND_ACC_ABSTRACT */
|
||||
|
||||
struct _zend_class_entry {
|
||||
char type;
|
||||
char *name;
|
||||
@@ -302,6 +304,7 @@ struct _zend_class_entry {
|
||||
struct _zend_class_entry *parent;
|
||||
int refcount;
|
||||
zend_bool constants_updated;
|
||||
zend_uint ce_flags;
|
||||
|
||||
HashTable function_table;
|
||||
HashTable default_properties;
|
||||
@@ -323,9 +326,11 @@ struct _zend_class_entry {
|
||||
zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC);
|
||||
|
||||
/* old handlers */
|
||||
#if 0
|
||||
void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
|
||||
zval (*handle_property_get)(zend_property_reference *property_reference);
|
||||
int (*handle_property_set)(zend_property_reference *property_reference, zval *value);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -396,6 +401,7 @@ typedef int (*zend_write_func_t)(const char *str, uint str_length);
|
||||
|
||||
int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions);
|
||||
void zend_shutdown(TSRMLS_D);
|
||||
void zend_register_standard_ini_entries(TSRMLS_D);
|
||||
|
||||
#ifdef ZTS
|
||||
void zend_post_startup(TSRMLS_D);
|
||||
@@ -429,8 +435,9 @@ ZEND_API char *get_zend_version(void);
|
||||
ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy);
|
||||
ZEND_API int zend_print_zval(zval *expr, int indent);
|
||||
ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent);
|
||||
ZEND_API void zend_print_zval_r(zval *expr, int indent);
|
||||
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent);
|
||||
ZEND_API void zend_print_zval_r(zval *expr, int indent TSRMLS_DC);
|
||||
ZEND_API void zend_print_flat_zval_r(zval *expr TSRMLS_DC);
|
||||
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC);
|
||||
ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...);
|
||||
|
||||
#if ZEND_DEBUG
|
||||
|
||||
+87
-30
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -443,16 +443,13 @@ static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec)
|
||||
static int zend_parse_arg(int arg_num, zval **arg, va_list *va, char **spec, int quiet TSRMLS_DC)
|
||||
{
|
||||
char *expected_type = NULL;
|
||||
char buf[1024];
|
||||
|
||||
expected_type = zend_parse_arg_impl(arg, va, spec);
|
||||
if (expected_type) {
|
||||
if (!quiet) {
|
||||
snprintf(buf, sizeof(buf)-1, "%s() expects parameter %d to be %s, %s given",
|
||||
zend_error(E_WARNING, "%s() expects parameter %d to be %s, %s given",
|
||||
get_active_function_name(TSRMLS_C), arg_num, expected_type,
|
||||
zend_zval_type_name(*arg));
|
||||
buf[sizeof(buf)-1] = '\0';
|
||||
zend_error(E_WARNING, buf);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
@@ -933,81 +930,118 @@ ZEND_API int add_get_index_stringl(zval *arg, uint index, char *str, uint length
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n)
|
||||
ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_LONG(tmp, n);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b)
|
||||
ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_BOOL(tmp, b);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len)
|
||||
ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_NULL(tmp);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n)
|
||||
ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_RESOURCE(tmp, n);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d)
|
||||
ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_DOUBLE(tmp, d);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate)
|
||||
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_STRING(tmp, str, duplicate);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate)
|
||||
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zval z_key;
|
||||
|
||||
MAKE_STD_ZVAL(tmp);
|
||||
ZVAL_STRINGL(tmp, str, length, duplicate);
|
||||
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL);
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC);
|
||||
zval_ptr_dtor(&tmp); /* write_property will add 1 to refcount */
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value)
|
||||
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC)
|
||||
{
|
||||
return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL);
|
||||
zval z_key;
|
||||
|
||||
ZVAL_STRINGL(&z_key, key, key_len-1, 0);
|
||||
|
||||
Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, value TSRMLS_CC);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
ZEND_API int zend_startup_module(zend_module_entry *module)
|
||||
@@ -1030,14 +1064,15 @@ ZEND_API int zend_startup_module(zend_module_entry *module)
|
||||
|
||||
|
||||
/* registers all functions in *library_functions in the function hash */
|
||||
int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC)
|
||||
int zend_register_functions(zend_class_entry *scope, zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC)
|
||||
{
|
||||
zend_function_entry *ptr = functions;
|
||||
zend_function function;
|
||||
zend_function function, *reg_function;
|
||||
zend_internal_function *internal_function = (zend_internal_function *)&function;
|
||||
int count=0, unload=0;
|
||||
HashTable *target_function_table = function_table;
|
||||
int error_type;
|
||||
zend_function *ctor = NULL, *dtor = NULL, *clone = NULL;
|
||||
|
||||
if (type==MODULE_PERSISTENT) {
|
||||
error_type = E_CORE_WARNING;
|
||||
@@ -1054,16 +1089,32 @@ int zend_register_functions(zend_function_entry *functions, HashTable *function_
|
||||
internal_function->handler = ptr->handler;
|
||||
internal_function->arg_types = ptr->func_arg_types;
|
||||
internal_function->function_name = ptr->fname;
|
||||
internal_function->scope = NULL;
|
||||
internal_function->scope = scope;
|
||||
internal_function->fn_flags = ZEND_ACC_PUBLIC;
|
||||
if (!internal_function->handler) {
|
||||
zend_error(error_type, "Null function defined as active function");
|
||||
zend_unregister_functions(functions, count, target_function_table TSRMLS_CC);
|
||||
return FAILURE;
|
||||
}
|
||||
if (zend_hash_add(target_function_table, ptr->fname, strlen(ptr->fname)+1, &function, sizeof(zend_function), NULL) == FAILURE) {
|
||||
if (zend_hash_add(target_function_table, ptr->fname, strlen(ptr->fname)+1, &function, sizeof(zend_function), (void**)®_function) == FAILURE) {
|
||||
unload=1;
|
||||
break;
|
||||
}
|
||||
if (scope) {
|
||||
/*
|
||||
* If it's an old-style constructor, store it only if we don't have
|
||||
* a constructor already.
|
||||
*/
|
||||
if (!strcmp(ptr->fname, scope->name) && !ctor) {
|
||||
ctor = reg_function;
|
||||
} else if (!strcmp(ptr->fname, ZEND_CONSTRUCTOR_FUNC_NAME)) {
|
||||
ctor = reg_function;
|
||||
} else if (!strcmp(ptr->fname, ZEND_DESTRUCTOR_FUNC_NAME)) {
|
||||
dtor = reg_function;
|
||||
} else if (!strcmp(ptr->fname, ZEND_CLONE_FUNC_NAME)) {
|
||||
clone = reg_function;
|
||||
}
|
||||
}
|
||||
ptr++;
|
||||
count++;
|
||||
}
|
||||
@@ -1077,6 +1128,11 @@ int zend_register_functions(zend_function_entry *functions, HashTable *function_
|
||||
zend_unregister_functions(functions, count, target_function_table TSRMLS_CC);
|
||||
return FAILURE;
|
||||
}
|
||||
if (scope) {
|
||||
scope->constructor = ctor;
|
||||
scope->destructor = dtor;
|
||||
scope->clone = clone;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1113,7 +1169,7 @@ ZEND_API int zend_register_module(zend_module_entry *module)
|
||||
#if 0
|
||||
zend_printf("%s: Registering module %d\n", module->name, module->module_number);
|
||||
#endif
|
||||
if (module->functions && zend_register_functions(module->functions, NULL, module->type TSRMLS_CC)==FAILURE) {
|
||||
if (module->functions && zend_register_functions(NULL, module->functions, NULL, module->type TSRMLS_CC)==FAILURE) {
|
||||
zend_error(E_CORE_WARNING,"%s: Unable to register functions, unable to load", module->name);
|
||||
return FAILURE;
|
||||
}
|
||||
@@ -1173,7 +1229,7 @@ int module_registry_request_startup(zend_module_entry *module TSRMLS_DC)
|
||||
*/
|
||||
int module_registry_cleanup(zend_module_entry *module TSRMLS_DC)
|
||||
{
|
||||
switch(module->type) {
|
||||
switch (module->type) {
|
||||
case MODULE_PERSISTENT:
|
||||
if (module->request_shutdown_func) {
|
||||
#if 0
|
||||
@@ -1235,6 +1291,7 @@ ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *orig_c
|
||||
class_entry->parent = NULL;
|
||||
class_entry->refcount = 1;
|
||||
class_entry->constants_updated = 0;
|
||||
class_entry->ce_flags = 0;
|
||||
zend_hash_init(&class_entry->default_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
|
||||
zend_hash_init(&class_entry->private_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
|
||||
zend_hash_init(&class_entry->protected_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
|
||||
@@ -1245,7 +1302,7 @@ ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *orig_c
|
||||
zend_hash_init(&class_entry->class_table, 10, NULL, ZEND_CLASS_DTOR, 1);
|
||||
|
||||
if (class_entry->builtin_functions) {
|
||||
zend_register_functions(class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);
|
||||
zend_register_functions(class_entry, class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);
|
||||
}
|
||||
|
||||
zend_hash_update(CG(class_table), lowercase_name, class_entry->name_length+1, &class_entry, sizeof(zend_class_entry *), NULL);
|
||||
@@ -1308,7 +1365,7 @@ ZEND_API int zend_disable_function(char *function_name, uint function_name_lengt
|
||||
return FAILURE;
|
||||
}
|
||||
disabled_function[0].fname = function_name;
|
||||
return zend_register_functions(disabled_function, CG(function_table), MODULE_PERSISTENT TSRMLS_CC);
|
||||
return zend_register_functions(NULL, disabled_function, CG(function_table), MODULE_PERSISTENT TSRMLS_CC);
|
||||
}
|
||||
|
||||
zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name)
|
||||
|
||||
+23
-23
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -95,9 +95,9 @@ BEGIN_EXTERN_C()
|
||||
class_container.destructor = NULL; \
|
||||
class_container.clone = NULL; \
|
||||
class_container.create_object = NULL; \
|
||||
class_container.handle_function_call = handle_fcall; \
|
||||
class_container.handle_property_get = handle_propget; \
|
||||
class_container.handle_property_set = handle_propset; \
|
||||
class_container.__call = handle_fcall; \
|
||||
class_container.__get = handle_propget; \
|
||||
class_container.__set = handle_propset; \
|
||||
}
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ ZEND_API char *zend_zval_type_name(zval *arg);
|
||||
|
||||
/* End of parameter parsing API -- andrei */
|
||||
|
||||
int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC);
|
||||
int zend_register_functions(zend_class_entry *scope, zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC);
|
||||
void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table TSRMLS_DC);
|
||||
ZEND_API int zend_register_module(zend_module_entry *module_entry);
|
||||
|
||||
@@ -220,23 +220,23 @@ ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
|
||||
ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
|
||||
ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
|
||||
|
||||
ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l);
|
||||
ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len);
|
||||
ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b);
|
||||
ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r);
|
||||
ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d);
|
||||
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
|
||||
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
|
||||
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value);
|
||||
ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l TSRMLS_DC);
|
||||
ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC);
|
||||
ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC);
|
||||
ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r TSRMLS_DC);
|
||||
ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC);
|
||||
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC);
|
||||
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate TSRMLS_DC);
|
||||
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC);
|
||||
|
||||
#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
|
||||
#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
|
||||
#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
|
||||
#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
|
||||
#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d)
|
||||
#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
|
||||
#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
|
||||
#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)
|
||||
#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n TSRMLS_CC)
|
||||
#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1 TSRMLS_CC)
|
||||
#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b TSRMLS_CC)
|
||||
#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r TSRMLS_CC)
|
||||
#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d TSRMLS_CC)
|
||||
#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate TSRMLS_CC)
|
||||
#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate TSRMLS_CC)
|
||||
#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value TSRMLS_CC)
|
||||
|
||||
ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC);
|
||||
ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);
|
||||
@@ -250,9 +250,9 @@ ZEND_API ZEND_FUNCTION(display_disabled_function);
|
||||
|
||||
#if ZEND_DEBUG
|
||||
#define CHECK_ZVAL_STRING(z) \
|
||||
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s)", (z)->value.str.val);
|
||||
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') { zend_error(E_WARNING, "String is not zero-terminated (%s)", (z)->value.str.val); }
|
||||
#define CHECK_ZVAL_STRING_REL(z) \
|
||||
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", (z)->value.str.val ZEND_FILE_LINE_RELAY_CC);
|
||||
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') { zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", (z)->value.str.val ZEND_FILE_LINE_RELAY_CC); }
|
||||
#else
|
||||
#define CHECK_ZVAL_STRING(z)
|
||||
#define CHECK_ZVAL_STRING_REL(z)
|
||||
|
||||
+16
-12
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -72,18 +72,22 @@ static long mem_block_end_magic = MEM_BLOCK_END_MAGIC;
|
||||
|
||||
#define _CHECK_MEMORY_LIMIT(s, rs, file, lineno) { AG(allocated_memory) += rs;\
|
||||
if (AG(memory_limit)<AG(allocated_memory)) {\
|
||||
if ((AG(memory_limit)+1048576)<AG(allocated_memory)) { \
|
||||
/* failed to handle this gracefully, exit() */ \
|
||||
exit(1); \
|
||||
} \
|
||||
if (!AG(memory_exhausted)) { \
|
||||
if (!file) { \
|
||||
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", AG(memory_limit), s); \
|
||||
int php_mem_limit = AG(memory_limit); \
|
||||
if (AG(memory_limit)+1048576 > AG(allocated_memory) - rs) { \
|
||||
AG(memory_limit) = AG(allocated_memory) + 1048576; \
|
||||
if (file) { \
|
||||
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", php_mem_limit, s); \
|
||||
} else { \
|
||||
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", AG(memory_limit), file, lineno, s); \
|
||||
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", php_mem_limit, file, lineno, s); \
|
||||
} \
|
||||
AG(memory_exhausted)=1; \
|
||||
} \
|
||||
} else { \
|
||||
if (file) { \
|
||||
fprintf(stderr, "Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)\n", php_mem_limit, file, lineno, s); \
|
||||
} else { \
|
||||
fprintf(stderr, "Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)\n", php_mem_limit, s); \
|
||||
} \
|
||||
exit(1); \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
# endif
|
||||
@@ -467,7 +471,7 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC)
|
||||
}
|
||||
#endif /* ZEND_ENABLE_FAST_CACHE */
|
||||
|
||||
#if !ZEND_DISABLE_MEMORY_CACHE
|
||||
#if !ZEND_DISABLE_MEMORY_CACHE && !defined(ZEND_MM)
|
||||
if (1 || clean_cache) {
|
||||
unsigned int i, j;
|
||||
zend_mem_header *ptr;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+160
-14
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "zend_API.h"
|
||||
#include "zend_builtin_functions.h"
|
||||
#include "zend_constants.h"
|
||||
|
||||
#include "zend_ini.h"
|
||||
#undef ZEND_TEST_EXCEPTIONS
|
||||
|
||||
static ZEND_FUNCTION(zend_version);
|
||||
@@ -43,10 +43,12 @@ static ZEND_FUNCTION(get_parent_class);
|
||||
static ZEND_FUNCTION(method_exists);
|
||||
static ZEND_FUNCTION(class_exists);
|
||||
static ZEND_FUNCTION(function_exists);
|
||||
#if ZEND_DEBUG
|
||||
static ZEND_FUNCTION(leak);
|
||||
#ifdef ZEND_TEST_EXCEPTIONS
|
||||
static ZEND_FUNCTION(crash);
|
||||
#endif
|
||||
#endif
|
||||
static ZEND_FUNCTION(get_included_files);
|
||||
static ZEND_FUNCTION(is_subclass_of);
|
||||
static ZEND_FUNCTION(is_a);
|
||||
@@ -68,6 +70,7 @@ static ZEND_FUNCTION(extension_loaded);
|
||||
static ZEND_FUNCTION(get_extension_funcs);
|
||||
static ZEND_FUNCTION(get_defined_constants);
|
||||
static ZEND_FUNCTION(debug_backtrace);
|
||||
static ZEND_FUNCTION(debug_print_backtrace);
|
||||
#if ZEND_DEBUG
|
||||
static ZEND_FUNCTION(zend_test_func);
|
||||
#ifdef ZTS
|
||||
@@ -98,9 +101,11 @@ static zend_function_entry builtin_functions[] = {
|
||||
ZEND_FE(method_exists, NULL)
|
||||
ZEND_FE(class_exists, NULL)
|
||||
ZEND_FE(function_exists, NULL)
|
||||
#if ZEND_DEBUG
|
||||
ZEND_FE(leak, NULL)
|
||||
#ifdef ZEND_TEST_EXCEPTIONS
|
||||
ZEND_FE(crash, NULL)
|
||||
#endif
|
||||
#endif
|
||||
ZEND_FE(get_included_files, NULL)
|
||||
ZEND_FALIAS(get_required_files, get_included_files, NULL)
|
||||
@@ -125,6 +130,7 @@ static zend_function_entry builtin_functions[] = {
|
||||
ZEND_FE(get_extension_funcs, NULL)
|
||||
ZEND_FE(get_defined_constants, NULL)
|
||||
ZEND_FE(debug_backtrace, NULL)
|
||||
ZEND_FE(debug_print_backtrace, NULL)
|
||||
#if ZEND_DEBUG
|
||||
ZEND_FE(zend_test_func, NULL)
|
||||
#ifdef ZTS
|
||||
@@ -137,7 +143,7 @@ static zend_function_entry builtin_functions[] = {
|
||||
|
||||
int zend_startup_builtin_functions(TSRMLS_D)
|
||||
{
|
||||
return zend_register_functions(builtin_functions, NULL, MODULE_PERSISTENT TSRMLS_CC);
|
||||
return zend_register_functions(NULL, builtin_functions, NULL, MODULE_PERSISTENT TSRMLS_CC);
|
||||
}
|
||||
|
||||
|
||||
@@ -408,8 +414,8 @@ ZEND_FUNCTION(error_reporting)
|
||||
if (zend_get_parameters_ex(1, &arg) == FAILURE) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
convert_to_long_ex(arg);
|
||||
EG(error_reporting)=(*arg)->value.lval;
|
||||
convert_to_string_ex(arg);
|
||||
zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
|
||||
break;
|
||||
default:
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
@@ -429,7 +435,7 @@ ZEND_FUNCTION(define)
|
||||
int case_sensitive;
|
||||
zend_constant c;
|
||||
|
||||
switch(ZEND_NUM_ARGS()) {
|
||||
switch (ZEND_NUM_ARGS()) {
|
||||
case 2:
|
||||
if (zend_get_parameters_ex(2, &var, &val)==FAILURE) {
|
||||
RETURN_FALSE;
|
||||
@@ -452,7 +458,7 @@ ZEND_FUNCTION(define)
|
||||
break;
|
||||
}
|
||||
|
||||
switch((*val)->type) {
|
||||
switch ((*val)->type) {
|
||||
case IS_LONG:
|
||||
case IS_DOUBLE:
|
||||
case IS_STRING:
|
||||
@@ -836,7 +842,7 @@ ZEND_FUNCTION(function_exists)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
#if ZEND_DEBUG
|
||||
/* {{{ proto void leak(int num_bytes=3)
|
||||
Cause an intentional memory leak, for testing/debugging purposes */
|
||||
ZEND_FUNCTION(leak)
|
||||
@@ -865,6 +871,7 @@ ZEND_FUNCTION(crash)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ZEND_DEBUG */
|
||||
|
||||
/* {{{ proto array get_included_files(void)
|
||||
Returns an array with the file names that were include_once()'d */
|
||||
@@ -892,7 +899,7 @@ ZEND_FUNCTION(trigger_error)
|
||||
int error_type = E_USER_NOTICE;
|
||||
zval **z_error_type, **z_error_message;
|
||||
|
||||
switch(ZEND_NUM_ARGS()) {
|
||||
switch (ZEND_NUM_ARGS()) {
|
||||
case 1:
|
||||
if (zend_get_parameters_ex(1, &z_error_message)==FAILURE) {
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
@@ -1248,7 +1255,7 @@ static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC)
|
||||
ZEND_FUNCTION(get_loaded_extensions)
|
||||
{
|
||||
if (ZEND_NUM_ARGS() != 0) {
|
||||
WRONG_PARAM_COUNT;
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
array_init(return_value);
|
||||
@@ -1262,7 +1269,7 @@ ZEND_FUNCTION(get_loaded_extensions)
|
||||
ZEND_FUNCTION(get_defined_constants)
|
||||
{
|
||||
if (ZEND_NUM_ARGS() != 0) {
|
||||
WRONG_PARAM_COUNT;
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
array_init(return_value);
|
||||
@@ -1291,6 +1298,145 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC) {
|
||||
return arg_array;
|
||||
}
|
||||
|
||||
void debug_print_backtrace_args(zval *arg_array TSRMLS_DC)
|
||||
{
|
||||
zval **tmp;
|
||||
HashPosition iterator;
|
||||
int i = 0;
|
||||
|
||||
zend_hash_internal_pointer_reset_ex(arg_array->value.ht, &iterator);
|
||||
while (zend_hash_get_current_data_ex(arg_array->value.ht, (void **) &tmp, &iterator) == SUCCESS) {
|
||||
if (i++) {
|
||||
ZEND_PUTS(", ");
|
||||
}
|
||||
zend_print_flat_zval_r(*tmp TSRMLS_CC);
|
||||
zend_hash_move_forward_ex(arg_array->value.ht, &iterator);
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ proto void debug_print_backtrace(void) */
|
||||
ZEND_FUNCTION(debug_print_backtrace)
|
||||
{
|
||||
zend_execute_data *ptr;
|
||||
int lineno;
|
||||
char *function_name;
|
||||
char *filename;
|
||||
char *class_name = NULL;
|
||||
char *call_type;
|
||||
char *include_filename = NULL;
|
||||
zval *arg_array = NULL;
|
||||
void **cur_arg_pos = EG(argument_stack).top_element;
|
||||
void **args = cur_arg_pos;
|
||||
int arg_stack_consistent = 0;
|
||||
int frames_on_stack = 0;
|
||||
int indent = 0;
|
||||
|
||||
if (ZEND_NUM_ARGS()) {
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
while (--args >= EG(argument_stack).elements) {
|
||||
if (*args--) {
|
||||
break;
|
||||
}
|
||||
args -= *(ulong*)args;
|
||||
frames_on_stack++;
|
||||
|
||||
if (args == EG(argument_stack).elements) {
|
||||
arg_stack_consistent = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = EG(current_execute_data);
|
||||
|
||||
/* skip debug_backtrace() */
|
||||
ptr = ptr->prev_execute_data;
|
||||
cur_arg_pos -= 2;
|
||||
frames_on_stack--;
|
||||
|
||||
array_init(return_value);
|
||||
|
||||
while (ptr) {
|
||||
if (ptr->op_array) {
|
||||
filename = ptr->op_array->filename;
|
||||
lineno = ptr->opline->lineno;
|
||||
} else {
|
||||
filename = NULL;
|
||||
}
|
||||
|
||||
function_name = ptr->function_state.function->common.function_name;
|
||||
|
||||
if (function_name) {
|
||||
if (ptr->object) {
|
||||
class_name = Z_OBJCE(*ptr->object)->name;
|
||||
call_type = "->";
|
||||
} else if (ptr->function_state.function->common.scope) {
|
||||
class_name = ptr->function_state.function->common.scope->name;
|
||||
call_type = "::";
|
||||
} else {
|
||||
class_name = NULL;
|
||||
call_type = NULL;
|
||||
}
|
||||
if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {
|
||||
if (arg_stack_consistent && (frames_on_stack > 0)) {
|
||||
arg_array = debug_backtrace_get_args(&cur_arg_pos TSRMLS_CC);
|
||||
frames_on_stack--;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* i know this is kinda ugly, but i'm trying to avoid extra cycles in the main execution loop */
|
||||
zend_bool build_filename_arg = 1;
|
||||
|
||||
switch (ptr->opline->op2.u.constant.value.lval) {
|
||||
case ZEND_EVAL:
|
||||
function_name = "eval";
|
||||
build_filename_arg = 0;
|
||||
break;
|
||||
case ZEND_INCLUDE:
|
||||
function_name = "include";
|
||||
break;
|
||||
case ZEND_REQUIRE:
|
||||
function_name = "require";
|
||||
break;
|
||||
case ZEND_INCLUDE_ONCE:
|
||||
function_name = "include_once";
|
||||
break;
|
||||
case ZEND_REQUIRE_ONCE:
|
||||
function_name = "require_once";
|
||||
break;
|
||||
default:
|
||||
/* this can actually happen if you use debug_backtrace() in your error_handler and
|
||||
* you're in the top-scope */
|
||||
function_name = "unknown";
|
||||
build_filename_arg = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (build_filename_arg && include_filename) {
|
||||
MAKE_STD_ZVAL(arg_array);
|
||||
array_init(arg_array);
|
||||
add_next_index_string(arg_array, include_filename, 1);
|
||||
}
|
||||
}
|
||||
zend_printf("#%-2d ", indent);
|
||||
if (class_name) {
|
||||
ZEND_PUTS(class_name);
|
||||
ZEND_PUTS(call_type);
|
||||
}
|
||||
zend_printf("%s(", function_name?function_name:"main");
|
||||
if (arg_array) {
|
||||
debug_print_backtrace_args(arg_array TSRMLS_CC);
|
||||
zval_ptr_dtor(&arg_array);
|
||||
}
|
||||
zend_printf(") called at [%s:%d]\n", filename, lineno);
|
||||
include_filename = filename;
|
||||
ptr = ptr->prev_execute_data;
|
||||
++indent;
|
||||
}
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ proto void debug_backtrace(void)
|
||||
Prints out a backtrace */
|
||||
ZEND_FUNCTION(debug_backtrace)
|
||||
@@ -1309,7 +1455,7 @@ ZEND_FUNCTION(debug_backtrace)
|
||||
int frames_on_stack = 0;
|
||||
|
||||
if (ZEND_NUM_ARGS()) {
|
||||
WRONG_PARAM_COUNT;
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
while (--args >= EG(argument_stack).elements) {
|
||||
@@ -1441,7 +1587,7 @@ ZEND_FUNCTION(extension_loaded)
|
||||
zval **extension_name;
|
||||
|
||||
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &extension_name)) {
|
||||
WRONG_PARAM_COUNT;
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
convert_to_string_ex(extension_name);
|
||||
@@ -1463,7 +1609,7 @@ ZEND_FUNCTION(get_extension_funcs)
|
||||
zend_function_entry *func;
|
||||
|
||||
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &extension_name)) {
|
||||
WRONG_PARAM_COUNT;
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
|
||||
convert_to_string_ex(extension_name);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+215
-99
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -79,6 +79,7 @@ void zend_init_compiler_data_structures(TSRMLS_D)
|
||||
zend_stack_init(&CG(list_stack));
|
||||
CG(handle_op_arrays) = 1;
|
||||
CG(in_compilation) = 0;
|
||||
CG(start_lineno) = 0;
|
||||
init_compiler_declarables(TSRMLS_C);
|
||||
CG(throw_list) = NULL;
|
||||
zend_register_auto_global("GLOBALS", sizeof("GLOBALS")-1 TSRMLS_CC);
|
||||
@@ -183,84 +184,71 @@ void zend_do_unary_op(zend_uchar op, znode *result, znode *op1 TSRMLS_DC)
|
||||
|
||||
#define MAKE_NOP(opline) { opline->opcode = ZEND_NOP; memset(&opline->result,0,sizeof(znode)); memset(&opline->op1,0,sizeof(znode)); memset(&opline->op2,0,sizeof(znode)); opline->result.op_type=opline->op1.op_type=opline->op2.op_type=IS_UNUSED; }
|
||||
|
||||
static void zend_replace_object_fetch(zend_op *last_op, znode *value TSRMLS_DC)
|
||||
|
||||
static void zend_do_op_data(zend_op *data_op, znode *value TSRMLS_DC)
|
||||
{
|
||||
if (value->op_type != IS_VAR) {
|
||||
last_op->opcode = ZEND_MAKE_VAR;
|
||||
last_op->result.op_type = IS_VAR;
|
||||
last_op->result.u.EA.type = 0;
|
||||
last_op->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
last_op->op1 = *value;
|
||||
SET_UNUSED(last_op->op2);
|
||||
value->op_type = IS_VAR;
|
||||
value->u.EA.type = 0;
|
||||
value->u.var = last_op->result.u.var;
|
||||
} else {
|
||||
MAKE_NOP(last_op);
|
||||
}
|
||||
data_op->opcode = ZEND_OP_DATA;
|
||||
data_op->op1 = *value;
|
||||
SET_UNUSED(data_op->op2);
|
||||
}
|
||||
|
||||
void zend_do_binary_assign_op(zend_uchar op, znode *result, znode *op1, znode *op2 TSRMLS_DC)
|
||||
{
|
||||
int last_op_number = get_next_op_number(CG(active_op_array))-1;
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
|
||||
if (last_op->opcode == ZEND_FETCH_OBJ_RW) {
|
||||
|
||||
switch(op) {
|
||||
switch (op) {
|
||||
case ZEND_ASSIGN_ADD:
|
||||
opline->opcode = ZEND_ASSIGN_ADD_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_ADD_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_SUB:
|
||||
opline->opcode = ZEND_ASSIGN_SUB_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_SUB_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_MUL:
|
||||
opline->opcode = ZEND_ASSIGN_MUL_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_MUL_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_DIV:
|
||||
opline->opcode = ZEND_ASSIGN_DIV_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_DIV_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_MOD:
|
||||
opline->opcode = ZEND_ASSIGN_MOD_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_MOD_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_SL:
|
||||
opline->opcode = ZEND_ASSIGN_SL_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_SL_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_SR:
|
||||
opline->opcode = ZEND_ASSIGN_SR_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_SR_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_CONCAT:
|
||||
opline->opcode = ZEND_ASSIGN_CONCAT_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_CONCAT_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_BW_OR:
|
||||
opline->opcode = ZEND_ASSIGN_BW_OR_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_BW_OR_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_BW_AND:
|
||||
opline->opcode = ZEND_ASSIGN_BW_AND_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_BW_AND_OBJ;
|
||||
break;
|
||||
case ZEND_ASSIGN_BW_XOR:
|
||||
opline->opcode = ZEND_ASSIGN_BW_XOR_OBJ;
|
||||
last_op->opcode = ZEND_ASSIGN_BW_XOR_OBJ;
|
||||
break;
|
||||
default:
|
||||
zend_error(E_COMPILE_ERROR, "Unknown binary op opcode %d", op);
|
||||
}
|
||||
|
||||
opline->op2 = last_op->op2;
|
||||
opline->op1 = last_op->op1;
|
||||
zend_replace_object_fetch(last_op, op2 TSRMLS_CC);
|
||||
opline->extended_value = op2->u.var;
|
||||
|
||||
|
||||
zend_do_op_data(opline, op2 TSRMLS_CC);
|
||||
SET_UNUSED(opline->result);
|
||||
*result = last_op->result;
|
||||
} else {
|
||||
opline->opcode = op;
|
||||
opline->op1 = *op1;
|
||||
opline->op2 = *op2;
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.EA.type = 0;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
*result = opline->result;
|
||||
}
|
||||
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.EA.type = 0;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
*result = opline->result;
|
||||
}
|
||||
|
||||
|
||||
@@ -287,13 +275,13 @@ void fetch_simple_variable_ex(znode *result, znode *varname, int bp, zend_uchar
|
||||
|
||||
opline_ptr->op2.u.EA.type = ZEND_FETCH_LOCAL;
|
||||
if (varname->op_type == IS_CONST && varname->u.constant.type == IS_STRING) {
|
||||
if(zend_hash_exists(CG(auto_globals), varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
|
||||
if (zend_hash_exists(CG(auto_globals), varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
|
||||
opline_ptr->op2.u.EA.type = ZEND_FETCH_GLOBAL;
|
||||
} else {
|
||||
if(CG(active_op_array)->static_variables && zend_hash_exists(CG(active_op_array)->static_variables, varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
|
||||
/* if (CG(active_op_array)->static_variables && zend_hash_exists(CG(active_op_array)->static_variables, varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
|
||||
opline_ptr->op2.u.EA.type = ZEND_FETCH_STATIC;
|
||||
}
|
||||
}
|
||||
*/ }
|
||||
}
|
||||
|
||||
if (bp) {
|
||||
@@ -378,30 +366,37 @@ void zend_do_echo(znode *arg TSRMLS_DC)
|
||||
SET_UNUSED(opline->op2);
|
||||
}
|
||||
|
||||
void zend_do_abstract_method(TSRMLS_D)
|
||||
{
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
|
||||
opline->opcode = ZEND_RAISE_ABSTRACT_ERROR;
|
||||
SET_UNUSED(opline->op1);
|
||||
SET_UNUSED(opline->op2);
|
||||
}
|
||||
|
||||
|
||||
void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC)
|
||||
{
|
||||
int last_op_number = get_next_op_number(CG(active_op_array))-1;
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
|
||||
if (last_op->opcode == ZEND_FETCH_OBJ_W) {
|
||||
opline->opcode = ZEND_ASSIGN_OBJ;
|
||||
opline->op1 = last_op->op1;
|
||||
opline->op2 = last_op->op2;
|
||||
|
||||
zend_replace_object_fetch(last_op, value TSRMLS_CC);
|
||||
last_op->opcode = ZEND_ASSIGN_OBJ;
|
||||
|
||||
opline->extended_value = value->u.var;
|
||||
zend_do_op_data(opline, value TSRMLS_CC);
|
||||
SET_UNUSED(opline->result);
|
||||
*result = last_op->result;
|
||||
} else {
|
||||
opline->opcode = ZEND_ASSIGN;
|
||||
opline->op1 = *variable;
|
||||
opline->op2 = *value;
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.EA.type = 0;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
*result = opline->result;
|
||||
}
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.EA.type = 0;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
*result = opline->result;
|
||||
}
|
||||
|
||||
|
||||
@@ -525,8 +520,8 @@ void zend_do_for_end(znode *second_semicolon_token TSRMLS_DC)
|
||||
void zend_do_pre_incdec(znode *result, znode *op1, zend_uchar op TSRMLS_DC)
|
||||
{
|
||||
int last_op_number = get_next_op_number(CG(active_op_array))-1;
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
|
||||
if (last_op->opcode == ZEND_FETCH_OBJ_RW) {
|
||||
opline->opcode = (op==ZEND_PRE_INC)?ZEND_PRE_INC_OBJ:ZEND_PRE_DEC_OBJ;
|
||||
@@ -550,8 +545,8 @@ void zend_do_pre_incdec(znode *result, znode *op1, zend_uchar op TSRMLS_DC)
|
||||
void zend_do_post_incdec(znode *result, znode *op1, zend_uchar op TSRMLS_DC)
|
||||
{
|
||||
int last_op_number = get_next_op_number(CG(active_op_array))-1;
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
zend_op *last_op = &CG(active_op_array)->opcodes[last_op_number];
|
||||
|
||||
if (last_op->opcode == ZEND_FETCH_OBJ_RW) {
|
||||
opline->opcode = (op==ZEND_POST_INC)?ZEND_POST_INC_OBJ:ZEND_POST_DEC_OBJ;
|
||||
@@ -864,7 +859,7 @@ void zend_do_free(znode *op1 TSRMLS_DC)
|
||||
} else if (op1->op_type==IS_VAR) {
|
||||
zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
|
||||
|
||||
while (opline->opcode == ZEND_END_SILENCE || opline->opcode == ZEND_EXT_FCALL_END) {
|
||||
while (opline->opcode == ZEND_END_SILENCE || opline->opcode == ZEND_EXT_FCALL_END || opline->opcode == ZEND_OP_DATA) {
|
||||
opline--;
|
||||
}
|
||||
if (opline->result.op_type == op1->op_type
|
||||
@@ -900,7 +895,18 @@ void zend_do_free(znode *op1 TSRMLS_DC)
|
||||
}
|
||||
}
|
||||
|
||||
void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, int is_static TSRMLS_DC)
|
||||
|
||||
int zend_do_verify_access_types(znode *current_access_type, znode *new_modifier)
|
||||
{
|
||||
if ((new_modifier->u.constant.value.lval & ZEND_ACC_PPP_MASK)
|
||||
&& ((current_access_type->u.constant.value.lval & ZEND_ACC_PPP_MASK) != (new_modifier->u.constant.value.lval & ZEND_ACC_PPP_MASK))) {
|
||||
zend_error(E_COMPILE_ERROR, "Multiple access type modifiers are not allowed");
|
||||
}
|
||||
return (current_access_type->u.constant.value.lval | new_modifier->u.constant.value.lval);
|
||||
}
|
||||
|
||||
|
||||
void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, zend_uint fn_flags TSRMLS_DC)
|
||||
{
|
||||
zend_op_array op_array;
|
||||
char *name = function_name->u.constant.value.str.val;
|
||||
@@ -915,7 +921,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
|
||||
op_array.function_name = name;
|
||||
op_array.arg_types = NULL;
|
||||
op_array.return_reference = return_reference;
|
||||
op_array.is_static = is_static;
|
||||
op_array.fn_flags = fn_flags;
|
||||
|
||||
op_array.scope = CG(active_class_entry);
|
||||
|
||||
@@ -941,6 +947,9 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
|
||||
zend_error(E_COMPILE_ERROR, "Cannot redeclare %s()", name);
|
||||
}
|
||||
}
|
||||
if (fn_flags & ZEND_ACC_ABSTRACT) {
|
||||
CG(active_class_entry)->ce_flags |= ZEND_ACC_ABSTRACT;
|
||||
}
|
||||
|
||||
if ((short_class_name_length == name_len) && (!memcmp(short_class_name, name, name_len))) {
|
||||
CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);
|
||||
@@ -1295,7 +1304,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC)
|
||||
}
|
||||
|
||||
if (original_op == ZEND_SEND_VAR) {
|
||||
switch(op) {
|
||||
switch (op) {
|
||||
case ZEND_SEND_VAR_NO_REF:
|
||||
zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
|
||||
break;
|
||||
@@ -1493,7 +1502,6 @@ ZEND_API void function_add_ref(zend_function *function)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void do_inherit_parent_constructor(zend_class_entry *ce)
|
||||
{
|
||||
zend_function *function;
|
||||
@@ -1515,14 +1523,86 @@ static void do_inherit_parent_constructor(zend_class_entry *ce)
|
||||
function_add_ref(function);
|
||||
}
|
||||
ce->constructor = ce->parent->constructor;
|
||||
ce->__get = ce->parent->__get;
|
||||
ce->__set = ce->parent->__set;
|
||||
ce->__call = ce->parent->__call;
|
||||
if (!ce->__get) {
|
||||
ce->__get = ce->parent->__get;
|
||||
}
|
||||
if (!ce->__set) {
|
||||
ce->__set = ce->parent->__set;
|
||||
}
|
||||
if (!ce->__call) {
|
||||
ce->__call = ce->parent->__call;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char *zend_visibility_string(zend_uint fn_flags)
|
||||
{
|
||||
if (fn_flags & ZEND_ACC_PRIVATE) {
|
||||
return "private";
|
||||
}
|
||||
if (fn_flags & ZEND_ACC_PROTECTED) {
|
||||
return "protected";
|
||||
}
|
||||
if (fn_flags & ZEND_ACC_PUBLIC) {
|
||||
return "public";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
static void do_inherit_method(zend_function *function)
|
||||
{
|
||||
/* The class entry of the derived function intentionally remains the same
|
||||
* as that of the parent class. That allows us to know in which context
|
||||
* we're running, and handle private method calls properly.
|
||||
*/
|
||||
if (function->common.fn_flags & ZEND_ACC_ABSTRACT) {
|
||||
function->op_array.scope->ce_flags |= ZEND_ACC_ABSTRACT;
|
||||
}
|
||||
function_add_ref(function);
|
||||
}
|
||||
|
||||
|
||||
static zend_bool do_inherit_method_check(zend_function *child, zend_function *parent)
|
||||
{
|
||||
zend_uint child_flags = child->common.fn_flags;
|
||||
zend_uint parent_flags = parent->common.fn_flags;
|
||||
|
||||
/* You cannot change from static to non static and vice versa.
|
||||
*/
|
||||
if ((child_flags & ZEND_ACC_STATIC) != (parent_flags & ZEND_ACC_STATIC)) {
|
||||
if (child->common.fn_flags & ZEND_ACC_STATIC) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot make non static method %s::%s() static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
|
||||
} else {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot make static method %s::%s() non static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
|
||||
}
|
||||
}
|
||||
|
||||
/* Disallow making an inherited method abstract.
|
||||
*/
|
||||
if ((child_flags & ZEND_ACC_ABSTRACT) && !(parent_flags & ZEND_ACC_ABSTRACT)) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot make non abstract method %s::%s() abstract in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
|
||||
}
|
||||
|
||||
if (parent_flags & ZEND_ACC_CHANGED) {
|
||||
child->common.fn_flags |= ZEND_ACC_CHANGED;
|
||||
} else {
|
||||
/* Prevent derived classes from restricting access that was available in parent classes
|
||||
*/
|
||||
if ((child_flags & ZEND_ACC_PPP_MASK) > (parent_flags & ZEND_ACC_PPP_MASK)) {
|
||||
zend_error(E_COMPILE_ERROR, "Access level to %s::%s() must be %s (as in class %s)%s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, zend_visibility_string(parent_flags), ZEND_FN_SCOPE_NAME(child), (parent_flags&ZEND_ACC_PUBLIC) ? "" : " or weaker");
|
||||
} else if (((child_flags & ZEND_ACC_PPP_MASK) < (parent_flags & ZEND_ACC_PPP_MASK))
|
||||
&& ((parent_flags & ZEND_ACC_PPP_MASK) & ZEND_ACC_PRIVATE)) {
|
||||
child->common.fn_flags |= ZEND_ACC_CHANGED;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce)
|
||||
{
|
||||
zend_function tmp_zend_function;
|
||||
zval *tmp;
|
||||
|
||||
/* Perform inheritance */
|
||||
@@ -1531,14 +1611,8 @@ void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce)
|
||||
/* STATIC_MEMBERS_FIXME */
|
||||
/* zend_hash_merge(ce->static_members, parent_ce->static_members, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0); */
|
||||
zend_hash_merge(&ce->constants_table, &parent_ce->constants_table, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
|
||||
zend_hash_merge(&ce->function_table, &parent_ce->function_table, (void (*)(void *)) function_add_ref, &tmp_zend_function, sizeof(zend_function), 0);
|
||||
zend_hash_merge_ex(&ce->function_table, &parent_ce->function_table, (copy_ctor_func_t) do_inherit_method, sizeof(zend_function), (zend_bool (*)(void *, void *)) do_inherit_method_check);
|
||||
ce->parent = parent_ce;
|
||||
if (!ce->handle_property_get)
|
||||
ce->handle_property_get = parent_ce->handle_property_get;
|
||||
if (!ce->handle_property_set)
|
||||
ce->handle_property_set = parent_ce->handle_property_set;
|
||||
if (!ce->handle_function_call)
|
||||
ce->handle_function_call = parent_ce->handle_function_call;
|
||||
do_inherit_parent_constructor(ce);
|
||||
}
|
||||
|
||||
@@ -1553,6 +1627,7 @@ static void create_class(HashTable *class_table, char *name, int name_length, ze
|
||||
new_class_entry->name_length = name_length;
|
||||
new_class_entry->refcount = 1;
|
||||
new_class_entry->constants_updated = 0;
|
||||
new_class_entry->ce_flags = 0;
|
||||
|
||||
zend_str_tolower(new_class_entry->name, new_class_entry->name_length);
|
||||
|
||||
@@ -1573,10 +1648,6 @@ static void create_class(HashTable *class_table, char *name, int name_length, ze
|
||||
new_class_entry->__call = NULL;
|
||||
|
||||
new_class_entry->create_object = NULL;
|
||||
new_class_entry->handle_function_call = NULL;
|
||||
new_class_entry->handle_property_set = NULL;
|
||||
new_class_entry->handle_property_get = NULL;
|
||||
|
||||
new_class_entry->parent = NULL;
|
||||
|
||||
if (zend_hash_update(class_table, new_class_entry->name, name_length+1, &new_class_entry, sizeof(zend_class_entry *), NULL) == FAILURE) {
|
||||
@@ -2013,6 +2084,10 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
|
||||
|
||||
class_token->u.previously_active_class_entry = CG(active_class_entry);
|
||||
new_class_entry->type = ZEND_USER_CLASS;
|
||||
if (!(strcmp(class_name->u.constant.value.str.val, "main") && strcmp(class_name->u.constant.value.str.val, "self") &&
|
||||
strcmp(class_name->u.constant.value.str.val, "parent"))) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use '%s' as class name as it is reserved", class_name->u.constant.value.str.val);
|
||||
}
|
||||
if (CG(active_class_entry)) {
|
||||
new_class_entry->name_length = sizeof("::")-1 + class_name->u.constant.value.str.len + CG(active_class_entry)->name_length;
|
||||
new_class_entry->name = emalloc(new_class_entry->name_length+1);
|
||||
@@ -2026,6 +2101,7 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
|
||||
}
|
||||
new_class_entry->refcount = 1;
|
||||
new_class_entry->constants_updated = 0;
|
||||
new_class_entry->ce_flags = 0;
|
||||
|
||||
zend_str_tolower(new_class_entry->name, new_class_entry->name_length);
|
||||
|
||||
@@ -2046,10 +2122,6 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
|
||||
new_class_entry->__call = NULL;
|
||||
|
||||
new_class_entry->create_object = NULL;
|
||||
new_class_entry->handle_function_call = NULL;
|
||||
new_class_entry->handle_property_set = NULL;
|
||||
new_class_entry->handle_property_get = NULL;
|
||||
|
||||
new_class_entry->parent = NULL;
|
||||
|
||||
if (parent_class_name->op_type != IS_UNUSED) {
|
||||
@@ -2105,7 +2177,8 @@ void mangle_property_name(char **dest, int *dest_length, char *src1, int src1_le
|
||||
*dest_length = prop_name_length;
|
||||
}
|
||||
|
||||
void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC)
|
||||
|
||||
void zend_do_declare_property(znode *var_name, znode *value TSRMLS_DC)
|
||||
{
|
||||
zval *property;
|
||||
|
||||
@@ -2118,8 +2191,14 @@ void zend_do_declare_property(znode *var_name, znode *value, int declaration_typ
|
||||
property->type = IS_NULL;
|
||||
}
|
||||
|
||||
switch (declaration_type) {
|
||||
case T_PRIVATE:
|
||||
if (CG(access_type) & ZEND_ACC_STATIC) {
|
||||
/* FIXME: Currently, ignores access type for static variables */
|
||||
zend_hash_update(CG(active_class_entry)->static_members, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (CG(access_type)) {
|
||||
case ZEND_ACC_PRIVATE:
|
||||
{
|
||||
char *priv_name;
|
||||
int priv_name_length;
|
||||
@@ -2133,7 +2212,7 @@ void zend_do_declare_property(znode *var_name, znode *value, int declaration_typ
|
||||
zend_hash_update(&CG(active_class_entry)->private_properties, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
break;
|
||||
}
|
||||
case T_PROTECTED:
|
||||
case ZEND_ACC_PROTECTED:
|
||||
{
|
||||
char *prot_name;
|
||||
int prot_name_length;
|
||||
@@ -2159,19 +2238,34 @@ void zend_do_declare_property(znode *var_name, znode *value, int declaration_typ
|
||||
efree(prot_name);
|
||||
break;
|
||||
}
|
||||
case T_VAR:
|
||||
case ZEND_ACC_PUBLIC:
|
||||
zend_hash_update(&CG(active_class_entry)->default_properties, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
break;
|
||||
case T_STATIC:
|
||||
zend_hash_update(CG(active_class_entry)->static_members, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
break;
|
||||
case T_CONST:
|
||||
zend_hash_update(&CG(active_class_entry)->constants_table, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
break;
|
||||
}
|
||||
FREE_PNODE(var_name);
|
||||
}
|
||||
|
||||
|
||||
void zend_do_declare_class_constant(znode *var_name, znode *value TSRMLS_DC)
|
||||
{
|
||||
zval *property;
|
||||
|
||||
ALLOC_ZVAL(property);
|
||||
|
||||
if (value) {
|
||||
*property = value->u.constant;
|
||||
} else {
|
||||
INIT_PZVAL(property);
|
||||
property->type = IS_NULL;
|
||||
}
|
||||
|
||||
zend_hash_update(&CG(active_class_entry)->constants_table, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
|
||||
|
||||
FREE_PNODE(var_name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC)
|
||||
{
|
||||
zend_op opline;
|
||||
@@ -2193,7 +2287,7 @@ void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS
|
||||
SET_UNUSED(opline_ptr->op1); /* this means $this for objects */
|
||||
opline_ptr->op2 = *property;
|
||||
/* if it was usual fetch, we change it to object fetch */
|
||||
switch(opline_ptr->opcode) {
|
||||
switch (opline_ptr->opcode) {
|
||||
case ZEND_FETCH_W:
|
||||
opline_ptr->opcode = ZEND_FETCH_OBJ_W;
|
||||
break;
|
||||
@@ -2521,7 +2615,7 @@ void zend_do_list_end(znode *result, znode *expr TSRMLS_DC)
|
||||
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
if (dimension == tmp_dimension_llist->head) { /* first */
|
||||
last_container = *expr;
|
||||
switch(expr->op_type) {
|
||||
switch (expr->op_type) {
|
||||
case IS_VAR:
|
||||
opline->opcode = ZEND_FETCH_DIM_R;
|
||||
break;
|
||||
@@ -2574,10 +2668,13 @@ void zend_do_list_end(znode *result, znode *expr TSRMLS_DC)
|
||||
void zend_do_fetch_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC)
|
||||
{
|
||||
zval *tmp;
|
||||
zend_op *opline;
|
||||
znode lval;
|
||||
znode result;
|
||||
|
||||
ALLOC_ZVAL(tmp);
|
||||
convert_to_string(&varname->u.constant);
|
||||
if(static_assignment) {
|
||||
if (static_assignment) {
|
||||
*tmp = static_assignment->u.constant;
|
||||
} else {
|
||||
INIT_ZVAL(*tmp);
|
||||
@@ -2587,7 +2684,26 @@ void zend_do_fetch_static_variable(znode *varname, znode *static_assignment, int
|
||||
zend_hash_init(CG(active_op_array)->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
|
||||
}
|
||||
zend_hash_update(CG(active_op_array)->static_variables, varname->u.constant.value.str.val, varname->u.constant.value.str.len+1, &tmp, sizeof(zval *), NULL);
|
||||
zval_dtor(&varname->u.constant);
|
||||
|
||||
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
opline->opcode = ZEND_FETCH_W; /* the default mode must be Write, since fetch_simple_variable() is used to define function arguments */
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.EA.type = 0;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
opline->op1 = *varname;
|
||||
SET_UNUSED(opline->op2);
|
||||
opline->op2.u.EA.type = fetch_type;
|
||||
result = opline->result;
|
||||
|
||||
if (varname->op_type == IS_CONST) {
|
||||
zval_copy_ctor(&varname->u.constant);
|
||||
}
|
||||
fetch_simple_variable(&lval, varname, 0 TSRMLS_CC); /* Relies on the fact that the default fetch is BP_VAR_W */
|
||||
|
||||
zend_do_assign_ref(NULL, &lval, &result TSRMLS_CC);
|
||||
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
|
||||
|
||||
/* zval_dtor(&varname->u.constant); */
|
||||
}
|
||||
|
||||
void zend_do_fetch_global_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC)
|
||||
@@ -2712,11 +2828,11 @@ void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC
|
||||
}
|
||||
|
||||
|
||||
void zend_do_is_class(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC)
|
||||
void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC)
|
||||
{
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
|
||||
opline->opcode = ZEND_IS_CLASS;
|
||||
opline->opcode = ZEND_INSTANCEOF;
|
||||
opline->result.op_type = IS_TMP_VAR;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
opline->op1 = *expr;
|
||||
@@ -3061,7 +3177,7 @@ int zendlex(znode *zendlval TSRMLS_DC)
|
||||
|
||||
zendlval->u.constant.type = IS_LONG;
|
||||
retval = lex_scan(&zendlval->u.constant TSRMLS_CC);
|
||||
switch(retval) {
|
||||
switch (retval) {
|
||||
case T_COMMENT:
|
||||
case T_OPEN_TAG:
|
||||
case T_WHITESPACE:
|
||||
|
||||
+30
-9
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -88,13 +88,26 @@ typedef struct _zend_brk_cont_element {
|
||||
} zend_brk_cont_element;
|
||||
|
||||
|
||||
#define ZEND_ACC_STATIC 0x01
|
||||
#define ZEND_ACC_ABSTRACT 0x02
|
||||
|
||||
/* The order of those must be kept - public < protected < private */
|
||||
#define ZEND_ACC_PUBLIC 0x10
|
||||
#define ZEND_ACC_PROTECTED 0x20
|
||||
#define ZEND_ACC_PRIVATE 0x40
|
||||
#define ZEND_ACC_PPP_MASK (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE)
|
||||
|
||||
#define ZEND_ACC_CHANGED 0x80
|
||||
|
||||
char *zend_visibility_string(zend_uint fn_flags);
|
||||
|
||||
struct _zend_op_array {
|
||||
zend_uchar type; /* MUST be the first element of this struct! */
|
||||
|
||||
zend_uchar *arg_types; /* MUST be the second element of this struct! */
|
||||
char *function_name; /* MUST be the third element of this struct! */
|
||||
zend_class_entry *scope; /* MUST be the fourth element of this struct! */
|
||||
zend_bool is_static; /* MUST be the fifth element of this struct! */
|
||||
zend_uint fn_flags; /* MUST be the fifth element of this struct! */
|
||||
|
||||
zend_uint *refcount;
|
||||
|
||||
@@ -129,11 +142,13 @@ typedef struct _zend_internal_function {
|
||||
zend_uchar *arg_types; /* MUST be the second element of this struct! */
|
||||
char *function_name; /* MUST be the third element of this struct! */
|
||||
zend_class_entry *scope; /* MUST be the fourth element of this struct! */
|
||||
zend_bool is_static; /* MUST be the fifth element of this struct! */
|
||||
zend_uint fn_flags; /* MUST be the fifth element of this struct! */
|
||||
|
||||
void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
|
||||
} zend_internal_function;
|
||||
|
||||
#define ZEND_FN_SCOPE_NAME(function) ((function) && (function)->common.scope ? (function)->common.scope->name : "")
|
||||
|
||||
typedef union _zend_function {
|
||||
zend_uchar type; /* MUST be the first element of this struct! */
|
||||
|
||||
@@ -142,7 +157,7 @@ typedef union _zend_function {
|
||||
zend_uchar *arg_types;
|
||||
char *function_name;
|
||||
zend_class_entry *scope;
|
||||
zend_bool is_static;
|
||||
zend_uint fn_flags;
|
||||
} common;
|
||||
|
||||
zend_op_array op_array;
|
||||
@@ -289,7 +304,8 @@ void zend_do_add_char(znode *result, znode *op1, znode *op2 TSRMLS_DC);
|
||||
void zend_do_add_string(znode *result, znode *op1, znode *op2 TSRMLS_DC);
|
||||
void zend_do_add_variable(znode *result, znode *op1, znode *op2 TSRMLS_DC);
|
||||
|
||||
void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, int is_static TSRMLS_DC);
|
||||
int zend_do_verify_access_types(znode *current_access_type, znode *new_modifier);
|
||||
void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference, zend_uint fn_flags TSRMLS_DC);
|
||||
void zend_do_end_function_declaration(znode *function_token TSRMLS_DC);
|
||||
void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initialization, zend_uchar pass_type TSRMLS_DC);
|
||||
int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
|
||||
@@ -331,7 +347,8 @@ void zend_do_default_before_statement(znode *case_list, znode *default_token TSR
|
||||
|
||||
void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC);
|
||||
void zend_do_end_class_declaration(znode *class_token TSRMLS_DC);
|
||||
void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC);
|
||||
void zend_do_declare_property(znode *var_name, znode *value TSRMLS_DC);
|
||||
void zend_do_declare_class_constant(znode *var_name, znode *value TSRMLS_DC);
|
||||
|
||||
void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC);
|
||||
|
||||
@@ -362,7 +379,7 @@ void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC);
|
||||
void zend_do_unset(znode *variable TSRMLS_DC);
|
||||
void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC);
|
||||
|
||||
void zend_do_is_class(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC);
|
||||
void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC);
|
||||
|
||||
void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable TSRMLS_DC);
|
||||
void zend_do_foreach_cont(znode *value, znode *key, znode *as_token TSRMLS_DC);
|
||||
@@ -393,6 +410,8 @@ void zend_do_begin_import(TSRMLS_D);
|
||||
void zend_do_import(int type, znode *what TSRMLS_DC);
|
||||
void zend_do_end_import(znode *import_from TSRMLS_DC);
|
||||
|
||||
void zend_do_abstract_method(TSRMLS_D);
|
||||
|
||||
ZEND_API void function_add_ref(zend_function *function);
|
||||
|
||||
#define INITIAL_OP_ARRAY_SIZE 64
|
||||
@@ -600,14 +619,16 @@ int zendlex(znode *zendlval TSRMLS_DC);
|
||||
#define ZEND_POST_DEC_OBJ 135
|
||||
|
||||
#define ZEND_ASSIGN_OBJ 136
|
||||
#define ZEND_MAKE_VAR 137
|
||||
#define ZEND_OP_DATA 137
|
||||
|
||||
#define ZEND_IS_CLASS 138
|
||||
#define ZEND_INSTANCEOF 138
|
||||
|
||||
#define ZEND_DECLARE_CLASS 139
|
||||
#define ZEND_DECLARE_INHERITED_CLASS 140
|
||||
#define ZEND_DECLARE_FUNCTION 141
|
||||
|
||||
#define ZEND_RAISE_ABSTRACT_ERROR 142
|
||||
|
||||
/* end of block */
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+279
-66
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "zend_extensions.h"
|
||||
#include "zend_fast_cache.h"
|
||||
#include "zend_execute_locks.h"
|
||||
#include "zend_ini.h"
|
||||
|
||||
#define get_zval_ptr(node, Ts, should_free, type) _get_zval_ptr(node, Ts, should_free TSRMLS_CC)
|
||||
#define get_zval_ptr_ptr(node, Ts, type) _get_zval_ptr_ptr(node, Ts TSRMLS_CC)
|
||||
@@ -51,7 +52,7 @@ static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_
|
||||
|
||||
static inline zval *_get_zval_ptr(znode *node, temp_variable *Ts, zval **should_free TSRMLS_DC)
|
||||
{
|
||||
switch(node->op_type) {
|
||||
switch (node->op_type) {
|
||||
case IS_CONST:
|
||||
*should_free = 0;
|
||||
return &node->u.constant;
|
||||
@@ -242,8 +243,8 @@ static inline void make_real_object(zval **object_ptr TSRMLS_DC)
|
||||
|
||||
static inline zval **get_obj_zval_ptr_ptr(znode *op, temp_variable *Ts, int type TSRMLS_DC)
|
||||
{
|
||||
if(op->op_type == IS_UNUSED) {
|
||||
if(EG(This)) {
|
||||
if (op->op_type == IS_UNUSED) {
|
||||
if (EG(This)) {
|
||||
/* this should actually never be modified, _ptr_ptr is modified only when
|
||||
the object is empty */
|
||||
return &EG(This);
|
||||
@@ -256,8 +257,8 @@ static inline zval **get_obj_zval_ptr_ptr(znode *op, temp_variable *Ts, int type
|
||||
|
||||
static inline zval *get_obj_zval_ptr(znode *op, temp_variable *Ts, zval **freeop, int type TSRMLS_DC)
|
||||
{
|
||||
if(op->op_type == IS_UNUSED) {
|
||||
if(EG(This)) {
|
||||
if (op->op_type == IS_UNUSED) {
|
||||
if (EG(This)) {
|
||||
return EG(This);
|
||||
} else {
|
||||
zend_error(E_ERROR, "Using $this when not in object context");
|
||||
@@ -266,11 +267,13 @@ static inline zval *get_obj_zval_ptr(znode *op, temp_variable *Ts, zval **freeop
|
||||
return get_zval_ptr(op, Ts, freeop, type);
|
||||
}
|
||||
|
||||
static inline void zend_assign_to_object(znode *result, znode *op1, znode *op2, zval *value, temp_variable *Ts TSRMLS_DC)
|
||||
static inline void zend_assign_to_object(znode *result, znode *op1, znode *op2, znode *value_op, temp_variable *Ts TSRMLS_DC)
|
||||
{
|
||||
zval **object_ptr = get_obj_zval_ptr_ptr(op1, Ts, BP_VAR_W TSRMLS_CC);
|
||||
zval *object;
|
||||
zval *property = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
|
||||
zval *free_value;
|
||||
zval *value = get_zval_ptr(value_op, Ts, &free_value, BP_VAR_R);
|
||||
zval tmp;
|
||||
zval **retval = &T(result->u.var).var.ptr;
|
||||
|
||||
@@ -303,11 +306,13 @@ static inline void zend_assign_to_object(znode *result, znode *op1, znode *op2,
|
||||
break;
|
||||
}
|
||||
|
||||
/* here property is a string */
|
||||
|
||||
Z_OBJ_HT_P(object)->write_property(object, property, value TSRMLS_CC);
|
||||
if (EG(implicit_clone)) {
|
||||
SEPARATE_ZVAL_IF_NOT_REF(object_ptr);
|
||||
object = *object_ptr;
|
||||
}
|
||||
|
||||
PZVAL_UNLOCK(value);
|
||||
/* here property is a string */
|
||||
Z_OBJ_HT_P(object)->write_property(object, property, value TSRMLS_CC);
|
||||
if (property == &tmp) {
|
||||
zval_dtor(property);
|
||||
}
|
||||
@@ -320,11 +325,13 @@ static inline void zend_assign_to_object(znode *result, znode *op1, znode *op2,
|
||||
}
|
||||
}
|
||||
|
||||
static inline void zend_assign_to_object_op(znode *result, znode *op1, znode *op2, zval *value, temp_variable *Ts, int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC) TSRMLS_DC)
|
||||
static inline void zend_assign_to_object_op(znode *result, znode *op1, znode *op2, znode *value_op, temp_variable *Ts, int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC) TSRMLS_DC)
|
||||
{
|
||||
zval **object_ptr = get_obj_zval_ptr_ptr(op1, Ts, BP_VAR_W TSRMLS_CC);
|
||||
zval *object;
|
||||
zval *property = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
|
||||
zval *free_value;
|
||||
zval *value = get_zval_ptr(value_op, Ts, &free_value, BP_VAR_R);
|
||||
zval tmp;
|
||||
zval **retval = &T(result->u.var).var.ptr;
|
||||
int have_get_ptr = 0;
|
||||
@@ -359,8 +366,6 @@ static inline void zend_assign_to_object_op(znode *result, znode *op1, znode *op
|
||||
}
|
||||
|
||||
/* here property is a string */
|
||||
PZVAL_UNLOCK(value);
|
||||
|
||||
if (Z_OBJ_HT_P(object)->get_property_zval_ptr) {
|
||||
zval **zptr = Z_OBJ_HT_P(object)->get_property_zval_ptr(object, property TSRMLS_CC);
|
||||
if (zptr != NULL) { /* NULL means no success in getting PTR */
|
||||
@@ -623,7 +628,7 @@ static inline HashTable *zend_get_target_symbol_table(zend_op *opline, temp_vari
|
||||
return EG(active_op_array)->static_variables;
|
||||
break;
|
||||
case ZEND_FETCH_STATIC_MEMBER:
|
||||
if(T(opline->op2.u.var).EA.class_entry->parent) {
|
||||
if (T(opline->op2.u.var).EA.class_entry->parent) {
|
||||
/* if inherited, try to look up */
|
||||
return zend_find_inherited_static(T(opline->op2.u.var).EA.class_entry, variable);
|
||||
} else {
|
||||
@@ -783,8 +788,12 @@ static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2,
|
||||
zval ***retval = &T(result->u.var).var.ptr_ptr;
|
||||
|
||||
if (!container_ptr) {
|
||||
if(T(op1->u.var).EA.type == IS_STRING_OFFSET) {
|
||||
if (T(op1->u.var).EA.type == IS_STRING_OFFSET) {
|
||||
zval *offset;
|
||||
zend_error(E_WARNING, "Cannot use string offset as an array");
|
||||
|
||||
offset = get_zval_ptr(op2, Ts, &EG(free_op2), BP_VAR_R);
|
||||
FREE_OP(Ts, op2, EG(free_op2));
|
||||
}
|
||||
*retval = &EG(error_zval_ptr);
|
||||
SELECTIVE_PZVAL_LOCK(**retval, result);
|
||||
@@ -1154,6 +1163,11 @@ static int zend_check_symbol(zval **pz TSRMLS_DC)
|
||||
|
||||
opcode_handler_t zend_opcode_handlers[512];
|
||||
|
||||
ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC)
|
||||
{
|
||||
((zend_internal_function *) execute_data_ptr->function_state.function)->handler(execute_data_ptr->opline->extended_value, (*(temp_variable *)((char *) execute_data_ptr->Ts + execute_data_ptr->opline->result.u.var)).var.ptr, execute_data_ptr->object, return_value_used TSRMLS_CC);
|
||||
}
|
||||
|
||||
ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)
|
||||
{
|
||||
zend_execute_data execute_data;
|
||||
@@ -1491,67 +1505,100 @@ int zend_assign_bw_xor_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
int zend_assign_add_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), add_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), add_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_sub_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), sub_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), sub_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_mul_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), mul_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), mul_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_div_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), div_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), div_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_mod_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), mod_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), mod_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_sl_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), shift_left_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), shift_left_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_sr_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), shift_right_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), shift_right_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_concat_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), concat_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), concat_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_bw_or_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), bitwise_or_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), bitwise_or_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_bw_and_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), bitwise_and_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), bitwise_and_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_assign_bw_xor_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts), bitwise_xor_function TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object_op(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts), bitwise_xor_function TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@@ -1823,7 +1870,7 @@ int zend_make_var_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zval *value, *value2;
|
||||
|
||||
value = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
|
||||
switch(EX(opline)->op1.op_type) {
|
||||
switch (EX(opline)->op1.op_type) {
|
||||
case IS_TMP_VAR:
|
||||
value2 = value;
|
||||
ALLOC_ZVAL(value);
|
||||
@@ -1849,7 +1896,10 @@ int zend_make_var_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
int zend_assign_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_assign_to_object(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, EX_T(EX(opline)->extended_value).var.ptr, EX(Ts) TSRMLS_CC);
|
||||
zend_op *op_data = EX(opline)+1;
|
||||
zend_assign_to_object(&EX(opline)->result, &EX(opline)->op1, &EX(opline)->op2, &op_data->op1, EX(Ts) TSRMLS_CC);
|
||||
/* assign_obj has two opcodes! */
|
||||
EX(opline)++;
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@@ -2212,6 +2262,79 @@ int zend_fetch_class_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
/* Ensures that we're allowed to call a private method.
|
||||
* Will update EX(fbc) with the correct handler as necessary.
|
||||
*/
|
||||
inline int zend_check_private(zend_execute_data *execute_data, zend_class_entry *ce, int fn_flags, char *function_name_strval, int function_name_strlen TSRMLS_DC)
|
||||
{
|
||||
zend_function *orig_fbc;
|
||||
|
||||
if (!ce) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We may call a private function if:
|
||||
* 1. The class of our object is the same as the scope, and the private
|
||||
* function (EX(fbc)) has the same scope.
|
||||
* 2. One of our parent classes are the same as the scope, and it contains
|
||||
* a private function with the same name that has the same scope.
|
||||
*/
|
||||
if (EX(fbc)->common.scope == ce
|
||||
&& EG(scope) == ce) {
|
||||
/* rule #1 checks out ok, allow the function call */
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* Check rule #2 */
|
||||
orig_fbc = EX(fbc);
|
||||
|
||||
ce = ce->parent;
|
||||
while (ce) {
|
||||
if (ce == EG(scope)) {
|
||||
if (zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void **) &EX(fbc))==SUCCESS
|
||||
&& EX(fbc)->op_array.fn_flags & ZEND_ACC_PRIVATE
|
||||
&& EX(fbc)->common.scope == EG(scope)) {
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
ce = ce->parent;
|
||||
}
|
||||
|
||||
EX(fbc) = orig_fbc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Ensures that we're allowed to call a protected method.
|
||||
*/
|
||||
inline int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope)
|
||||
{
|
||||
zend_class_entry *fbc_scope = ce;
|
||||
|
||||
/* Is the context that's calling the function, the same as one of
|
||||
* the function's parents?
|
||||
*/
|
||||
while (fbc_scope) {
|
||||
if (fbc_scope==scope) {
|
||||
return 1;
|
||||
}
|
||||
fbc_scope = fbc_scope->parent;
|
||||
}
|
||||
|
||||
/* Is the function's scope the same as our current object context,
|
||||
* or any of the parents of our context?
|
||||
*/
|
||||
while (scope) {
|
||||
if (scope==ce) {
|
||||
return 1;
|
||||
}
|
||||
scope = scope->parent;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int zend_init_ctor_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_ptr_stack_n_push(&EG(arg_types_stack), 3, EX(fbc), EX(object), EX(calling_scope));
|
||||
@@ -2236,6 +2359,22 @@ int zend_init_ctor_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
EX(fbc) = EX(fbc_constructor);
|
||||
if (EX(fbc)->type == ZEND_USER_FUNCTION) { /* HACK!! */
|
||||
if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PUBLIC) {
|
||||
/* No further checks necessary */
|
||||
} else if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PRIVATE) {
|
||||
/* Ensure that if we're calling a private function, we're allowed to do so.
|
||||
*/
|
||||
if (EX(object)->value.obj.handlers->get_class_entry(EX(object) TSRMLS_CC) != EG(scope)) {
|
||||
zend_error(E_ERROR, "Call to private constructor from context '%s'", EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
} else if ((EX(fbc)->common.fn_flags & ZEND_ACC_PROTECTED)) {
|
||||
/* Ensure that if we're calling a protected function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_protected(EX(fbc)->common.scope, EG(scope))) {
|
||||
zend_error(E_ERROR, "Call to protected constructor from context '%s'", EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
}
|
||||
|
||||
/* The scope should be the scope of the class where the constructor
|
||||
was initially declared in */
|
||||
EX(calling_scope) = EX(fbc)->common.scope;
|
||||
@@ -2246,6 +2385,7 @@ int zend_init_ctor_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
|
||||
int zend_init_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zval *function_name;
|
||||
@@ -2263,15 +2403,43 @@ int zend_init_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
EX(object) = get_obj_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R TSRMLS_CC);
|
||||
|
||||
if (EX(object) && EX(object)->type == IS_OBJECT) {
|
||||
|
||||
/* First, locate the function. */
|
||||
EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
|
||||
if (!EX(fbc)) {
|
||||
zend_error(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
|
||||
}
|
||||
|
||||
if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PUBLIC) {
|
||||
/* Ensure that we haven't overridden a private function and end up calling
|
||||
* the overriding public function...
|
||||
*/
|
||||
if (EX(fbc)->op_array.fn_flags & ZEND_ACC_CHANGED) {
|
||||
zend_function *priv_fbc;
|
||||
|
||||
if (zend_hash_find(&EG(scope)->function_table, function_name_strval, function_name_strlen+1, (void **) &priv_fbc)==SUCCESS
|
||||
&& priv_fbc->common.fn_flags & ZEND_ACC_PRIVATE) {
|
||||
EX(fbc) = priv_fbc;
|
||||
}
|
||||
}
|
||||
} else if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PRIVATE) {
|
||||
/* Ensure that if we're calling a private function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_private(execute_data, EX(object)->value.obj.handlers->get_class_entry(EX(object) TSRMLS_CC), EX(fbc)->common.fn_flags, function_name_strval, function_name_strlen TSRMLS_CC)) {
|
||||
zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(EX(fbc)->common.fn_flags), ZEND_FN_SCOPE_NAME(EX(fbc)), function_name_strval, EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
} else if ((EX(fbc)->common.fn_flags & ZEND_ACC_PROTECTED)) {
|
||||
/* Ensure that if we're calling a protected function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_protected(EX(fbc)->common.scope, EG(scope))) {
|
||||
zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(EX(fbc)->common.fn_flags), ZEND_FN_SCOPE_NAME(EX(fbc)), function_name_strval, EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
zend_error(E_ERROR, "Call to a member function on a non-object");
|
||||
}
|
||||
if (!EX(fbc)) {
|
||||
zend_error(E_ERROR, "Call to undefined function: %s()", function_name_strval);
|
||||
zend_error(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
|
||||
}
|
||||
|
||||
if (EX(fbc)->common.is_static) {
|
||||
if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
|
||||
EX(object) = NULL;
|
||||
} else {
|
||||
if (!PZVAL_IS_REF(EX(object))) {
|
||||
@@ -2300,7 +2468,6 @@ int zend_init_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
int zend_init_static_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zval *function_name;
|
||||
zend_function *function;
|
||||
zval tmp;
|
||||
zend_class_entry *ce;
|
||||
zend_bool is_const;
|
||||
@@ -2330,8 +2497,25 @@ int zend_init_static_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
EX(calling_scope) = ce;
|
||||
|
||||
if (zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void **) &function)==FAILURE) {
|
||||
zend_error(E_ERROR, "Call to undefined function: %s()", function_name_strval);
|
||||
if (zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void **) &EX(fbc))==FAILURE) {
|
||||
zend_error(E_ERROR, "Call to undefined method %s::%s()", ce->name, function_name_strval);
|
||||
}
|
||||
EX(calling_scope) = EX(fbc)->common.scope;
|
||||
|
||||
if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PUBLIC) {
|
||||
/* No further checks necessary, most common case */
|
||||
} else if (EX(fbc)->op_array.fn_flags & ZEND_ACC_PRIVATE) {
|
||||
/* Ensure that if we're calling a private function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_private(execute_data, EG(scope), EX(fbc)->common.fn_flags, function_name_strval, function_name_strlen TSRMLS_CC)) {
|
||||
zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(EX(fbc)->common.fn_flags), ZEND_FN_SCOPE_NAME(EX(fbc)), function_name_strval, EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
} else if ((EX(fbc)->common.fn_flags & ZEND_ACC_PROTECTED)) {
|
||||
/* Ensure that if we're calling a protected function, we're allowed to do so.
|
||||
*/
|
||||
if (!zend_check_protected(EG(scope), EX(fbc)->common.scope)) {
|
||||
zend_error(E_ERROR, "Call to %s method %s::%s() from context '%s'", zend_visibility_string(EX(fbc)->common.fn_flags), ZEND_FN_SCOPE_NAME(EX(fbc)), function_name_strval, EG(scope) ? EG(scope)->name : "");
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_const) {
|
||||
@@ -2339,9 +2523,7 @@ int zend_init_static_method_call_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
FREE_OP(EX(Ts), &EX(opline)->op2, EG(free_op2));
|
||||
}
|
||||
|
||||
EX(fbc) = function;
|
||||
|
||||
if (function->common.is_static) {
|
||||
if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
|
||||
EX(object) = NULL;
|
||||
} else {
|
||||
if ((EX(object) = EG(This))) {
|
||||
@@ -2417,18 +2599,20 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
|
||||
int return_value_used = RETURN_VALUE_USED(EX(opline));
|
||||
|
||||
zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) EX(opline)->extended_value, NULL);
|
||||
current_scope = EG(scope);
|
||||
EG(scope) = EX(calling_scope);
|
||||
|
||||
current_this = EG(This);
|
||||
EG(This) = EX(object);
|
||||
|
||||
EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EX_T(EX(opline)->result.u.var).var.ptr;
|
||||
|
||||
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
|
||||
ALLOC_ZVAL(EX_T(EX(opline)->result.u.var).var.ptr);
|
||||
INIT_ZVAL(*(EX_T(EX(opline)->result.u.var).var.ptr));
|
||||
((zend_internal_function *) EX(function_state).function)->handler(EX(opline)->extended_value, EX_T(EX(opline)->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
|
||||
|
||||
if (!zend_execute_internal) {
|
||||
/* saves one function call if zend_execute_internal is not used */
|
||||
((zend_internal_function *) EX(function_state).function)->handler(EX(opline)->extended_value, EX_T(EX(opline)->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
|
||||
} else {
|
||||
zend_execute_internal(execute_data, return_value_used TSRMLS_CC);
|
||||
}
|
||||
|
||||
EG(current_execute_data) = execute_data;
|
||||
EX_T(EX(opline)->result.u.var).var.ptr->is_ref = 0;
|
||||
EX_T(EX(opline)->result.u.var).var.ptr->refcount = 1;
|
||||
@@ -2438,6 +2622,11 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
|
||||
} else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
|
||||
HashTable *calling_symbol_table;
|
||||
|
||||
current_this = EG(This);
|
||||
EG(This) = EX(object);
|
||||
current_scope = EG(scope);
|
||||
EG(scope) = EX(calling_scope);
|
||||
|
||||
EX_T(EX(opline)->result.u.var).var.ptr = NULL;
|
||||
if (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
|
||||
/*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
|
||||
@@ -2475,6 +2664,11 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zend_hash_clean(*EG(symtable_cache_ptr));
|
||||
}
|
||||
EG(active_symbol_table) = calling_symbol_table;
|
||||
if (EG(This)) {
|
||||
zval_ptr_dtor(&EG(This));
|
||||
}
|
||||
EG(This) = current_this;
|
||||
EG(scope) = current_scope;
|
||||
} else { /* ZEND_OVERLOADED_FUNCTION */
|
||||
ALLOC_ZVAL(EX_T(EX(opline)->result.u.var).var.ptr);
|
||||
INIT_ZVAL(*(EX_T(EX(opline)->result.u.var).var.ptr));
|
||||
@@ -2497,14 +2691,6 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
|
||||
EG(function_state_ptr) = &EX(function_state);
|
||||
zend_ptr_stack_clear_multiple(TSRMLS_C);
|
||||
|
||||
EG(scope) = current_scope;
|
||||
|
||||
if (EG(This)) {
|
||||
zval_ptr_dtor(&EG(This));
|
||||
}
|
||||
|
||||
EG(This) = current_this;
|
||||
|
||||
if (EG(exception)) {
|
||||
if (EX(opline)->op2.u.opline_num == -1) {
|
||||
RETURN_FROM_EXECUTE_LOOP(execute_data);
|
||||
@@ -2911,6 +3097,9 @@ int zend_switch_free_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
int zend_new_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
if (EX_T(EX(opline)->op1.u.var).EA.class_entry->ce_flags & ZEND_ACC_ABSTRACT) {
|
||||
zend_error(E_ERROR, "Cannot instantiate abstract class %s", EX_T(EX(opline)->op1.u.var).EA.class_entry->name);
|
||||
}
|
||||
EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EX_T(EX(opline)->result.u.var).var.ptr;
|
||||
ALLOC_ZVAL(EX_T(EX(opline)->result.u.var).var.ptr);
|
||||
object_init_ex(EX_T(EX(opline)->result.u.var).var.ptr, EX_T(EX(opline)->op1.u.var).EA.class_entry);
|
||||
@@ -3025,11 +3214,12 @@ inline int zend_init_add_array_helper(ZEND_OPCODE_HANDLER_ARGS)
|
||||
}
|
||||
}
|
||||
if (offset) {
|
||||
switch(offset->type) {
|
||||
switch (offset->type) {
|
||||
case IS_DOUBLE:
|
||||
zend_hash_index_update(array_ptr->value.ht, (long) offset->value.dval, &expr_ptr, sizeof(zval *), NULL);
|
||||
break;
|
||||
case IS_LONG:
|
||||
case IS_BOOL:
|
||||
zend_hash_index_update(array_ptr->value.ht, offset->value.lval, &expr_ptr, sizeof(zval *), NULL);
|
||||
break;
|
||||
case IS_STRING:
|
||||
@@ -3518,13 +3708,22 @@ int zend_isset_isempty_dim_obj_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if ((*container)->type == IS_OBJECT) {
|
||||
result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (EX(opline)->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
|
||||
} else if ((*container)->type == IS_OBJECT) {
|
||||
result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (EX(opline)->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
|
||||
} else if ((*container)->type == IS_STRING) { /* string offsets */
|
||||
switch (EX(opline)->extended_value) {
|
||||
case ZEND_ISSET:
|
||||
if (offset->value.lval <= Z_STRLEN_PP(container)) {
|
||||
result = 1;
|
||||
}
|
||||
break;
|
||||
case ZEND_ISEMPTY:
|
||||
if (offset->value.lval <= Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
|
||||
result = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* string offsets */
|
||||
}
|
||||
|
||||
EX_T(EX(opline)->result.u.var).tmp_var.type = IS_BOOL;
|
||||
@@ -3564,13 +3763,25 @@ int zend_begin_silence_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
EX_T(EX(opline)->result.u.var).tmp_var.value.lval = EG(error_reporting);
|
||||
EX_T(EX(opline)->result.u.var).tmp_var.type = IS_LONG; /* shouldn't be necessary */
|
||||
EG(error_reporting) = 0;
|
||||
zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_raise_abstract_error_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zend_error(E_ERROR, "Cannot call abstract method %s::%s()", EG(scope)->name, op_array->function_name);
|
||||
NEXT_OPCODE(); /* Never reached */
|
||||
}
|
||||
|
||||
int zend_end_silence_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
EG(error_reporting) = EX_T(EX(opline)->op1.u.var).tmp_var.value.lval;
|
||||
zval restored_error_reporting;
|
||||
|
||||
restored_error_reporting.type = IS_LONG;
|
||||
restored_error_reporting.value.lval = EX_T(EX(opline)->op1.u.var).tmp_var.value.lval;
|
||||
convert_to_string(&restored_error_reporting);
|
||||
zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
|
||||
zendi_zval_dtor(restored_error_reporting);
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
@@ -3638,10 +3849,10 @@ int zend_ticks_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
NEXT_OPCODE();
|
||||
}
|
||||
|
||||
int zend_is_class_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
int zend_instanceof_handler(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
zval *expr = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
|
||||
is_class_function(&EX_T(EX(opline)->result.u.var).tmp_var, expr,
|
||||
instanceof_function(&EX_T(EX(opline)->result.u.var).tmp_var, expr,
|
||||
EX_T(EX(opline)->op2.u.var).EA.class_entry TSRMLS_CC);
|
||||
FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
|
||||
NEXT_OPCODE();
|
||||
@@ -3822,11 +4033,13 @@ void zend_init_opcodes_handlers()
|
||||
zend_opcode_handlers[ZEND_POST_DEC_OBJ] = zend_post_dec_obj_handler;
|
||||
|
||||
zend_opcode_handlers[ZEND_ASSIGN_OBJ] = zend_assign_obj_handler;
|
||||
zend_opcode_handlers[ZEND_MAKE_VAR] = zend_make_var_handler;
|
||||
zend_opcode_handlers[ZEND_OP_DATA] = NULL;
|
||||
|
||||
zend_opcode_handlers[ZEND_IS_CLASS] = zend_is_class_handler;
|
||||
zend_opcode_handlers[ZEND_INSTANCEOF] = zend_instanceof_handler;
|
||||
|
||||
zend_opcode_handlers[ZEND_DECLARE_CLASS] = zend_declare_class_handler;
|
||||
zend_opcode_handlers[ZEND_DECLARE_INHERITED_CLASS] = zend_declare_inherited_class_handler;
|
||||
zend_opcode_handlers[ZEND_DECLARE_FUNCTION] = zend_declare_function_handler;
|
||||
|
||||
zend_opcode_handlers[ZEND_RAISE_ABSTRACT_ERROR] = zend_raise_abstract_error_handler;
|
||||
}
|
||||
+8
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -51,10 +51,12 @@ typedef union _temp_variable {
|
||||
|
||||
BEGIN_EXTERN_C()
|
||||
ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
|
||||
ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
|
||||
|
||||
void init_executor(TSRMLS_D);
|
||||
void shutdown_executor(TSRMLS_D);
|
||||
ZEND_API void execute(zend_op_array *op_array TSRMLS_DC);
|
||||
ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
|
||||
ZEND_API int zend_is_true(zval *op);
|
||||
static inline void safe_free_zval_ptr(zval *p)
|
||||
{
|
||||
@@ -162,6 +164,11 @@ void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, z
|
||||
#define IS_OVERLOADED_OBJECT 1
|
||||
#define IS_STRING_OFFSET 2
|
||||
|
||||
/* The following tries to resolve the classname of a zval of type object.
|
||||
* Since it is slow it should be only used in error messages.
|
||||
*/
|
||||
#define Z_OBJ_CLASS_NAME_P(zval) ((zval) && (zval)->type == IS_OBJECT && Z_OBJ_HT_P(zval)->get_class_entry != NULL && Z_OBJ_HT_P(zval)->get_class_entry(zval TSRMLS_CC) ? Z_OBJ_HT_P(zval)->get_class_entry(zval TSRMLS_CC)->name : "")
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
#endif /* ZEND_EXECUTE_H */
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
|
||||
ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
|
||||
ZEND_API void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC);
|
||||
|
||||
#ifdef ZEND_WIN32
|
||||
#include <process.h>
|
||||
@@ -128,6 +129,7 @@ void init_executor(TSRMLS_D)
|
||||
EG(symtable_cache_ptr) = EG(symtable_cache)-1;
|
||||
EG(symtable_cache_limit)=EG(symtable_cache)+SYMTABLE_CACHE_SIZE-1;
|
||||
EG(no_extensions)=0;
|
||||
EG(implicit_clone)=0;
|
||||
|
||||
EG(function_table) = CG(function_table);
|
||||
EG(class_table) = CG(class_table);
|
||||
@@ -162,7 +164,6 @@ void init_executor(TSRMLS_D)
|
||||
zend_ptr_stack_init(&EG(user_error_handlers));
|
||||
zend_ptr_stack_init(&EG(user_exception_handlers));
|
||||
|
||||
EG(orig_error_reporting) = EG(error_reporting);
|
||||
zend_objects_store_init(&EG(objects_store), 1024);
|
||||
|
||||
EG(full_tables_cleanup) = 0;
|
||||
@@ -251,7 +252,6 @@ void shutdown_executor(TSRMLS_D)
|
||||
zend_ptr_stack_clean(&EG(user_exception_handlers), ZVAL_DESTRUCTOR, 1);
|
||||
zend_ptr_stack_destroy(&EG(user_exception_handlers));
|
||||
|
||||
EG(error_reporting) = EG(orig_error_reporting);
|
||||
zend_objects_store_destroy(&EG(objects_store));
|
||||
} zend_end_try();
|
||||
}
|
||||
@@ -262,7 +262,7 @@ ZEND_API char *get_active_function_name(TSRMLS_D)
|
||||
if (!zend_is_executing(TSRMLS_C)) {
|
||||
return NULL;
|
||||
}
|
||||
switch(EG(function_state_ptr)->function->type) {
|
||||
switch (EG(function_state_ptr)->function->type) {
|
||||
case ZEND_USER_FUNCTION: {
|
||||
char *function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name;
|
||||
|
||||
@@ -520,7 +520,7 @@ int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *fun
|
||||
/* TBI!! new object handlers */
|
||||
if (Z_TYPE_PP(object_pp) == IS_OBJECT) {
|
||||
if (!IS_ZEND_STD_OBJECT(**object_pp)) {
|
||||
zend_error(E_WARNING, "Cannot use call_user_function on overloaded objects");
|
||||
zend_error(E_WARNING, "Cannot use call_user_function on objects without a class entry");
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
@@ -838,11 +838,12 @@ ZEND_API void zend_timeout(int dummy)
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
|
||||
zend_error(E_ERROR, "Maximum execution time of %d second%s exceeded",
|
||||
EG(timeout_seconds), EG(timeout_seconds) == 1 ? "" : "s");
|
||||
if (zend_on_timeout) {
|
||||
zend_on_timeout(EG(timeout_seconds) TSRMLS_CC);
|
||||
}
|
||||
|
||||
zend_error(E_ERROR, "Maximum execution time of %d second%s exceeded",
|
||||
EG(timeout_seconds), EG(timeout_seconds) == 1 ? "" : "s");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+5
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -119,10 +119,13 @@ struct _zend_compiler_globals {
|
||||
|
||||
int interactive;
|
||||
|
||||
zend_uint start_lineno;
|
||||
zend_bool in_clone_method;
|
||||
zend_bool increment_lineno;
|
||||
|
||||
zend_llist import_commands;
|
||||
|
||||
int access_type;
|
||||
};
|
||||
|
||||
|
||||
@@ -174,6 +177,7 @@ struct _zend_executor_globals {
|
||||
zend_bool in_execution;
|
||||
zend_bool bailout_set;
|
||||
zend_bool full_tables_cleanup;
|
||||
zend_bool implicit_clone;
|
||||
|
||||
/* for extended information support */
|
||||
zend_bool no_extensions;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -722,9 +722,9 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t de
|
||||
|
||||
HASH_PROTECT_RECURSION(ht);
|
||||
|
||||
va_start(args, num_args);
|
||||
p = ht->pListHead;
|
||||
while (p != NULL) {
|
||||
va_start(args, num_args);
|
||||
hash_key.arKey = p->arKey;
|
||||
hash_key.nKeyLength = p->nKeyLength;
|
||||
hash_key.h = p->h;
|
||||
@@ -733,8 +733,8 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t de
|
||||
} else {
|
||||
p = p->pListNext;
|
||||
}
|
||||
va_end(args);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
HASH_UNPROTECT_RECURSION(ht);
|
||||
}
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -39,6 +39,7 @@ typedef int (*compare_func_t)(const void *, const void * TSRMLS_DC);
|
||||
typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t TSRMLS_DC);
|
||||
typedef void (*dtor_func_t)(void *pDest);
|
||||
typedef void (*copy_ctor_func_t)(void *pElement);
|
||||
typedef void (*copy_ctor_param_func_t)(void *pElement, void *pParam);
|
||||
|
||||
struct _hashtable;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -80,7 +80,7 @@ ZEND_API void zend_indent()
|
||||
default:
|
||||
if (token.type==0) {
|
||||
/* keyword */
|
||||
switch(token_type) {
|
||||
switch (token_type) {
|
||||
case ',':
|
||||
ZEND_PUTS(", ");
|
||||
goto dflt_printout;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+10
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -75,6 +75,15 @@ ZEND_API int zend_ini_startup(TSRMLS_D)
|
||||
ZEND_API int zend_ini_shutdown(TSRMLS_D)
|
||||
{
|
||||
zend_hash_destroy(EG(ini_directives));
|
||||
free(EG(ini_directives));
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int zend_ini_global_shutdown(TSRMLS_D)
|
||||
{
|
||||
zend_hash_destroy(registered_zend_ini_directives);
|
||||
free(registered_zend_ini_directives);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -84,6 +84,7 @@ struct _zend_ini_entry {
|
||||
|
||||
ZEND_API int zend_ini_startup(TSRMLS_D);
|
||||
ZEND_API int zend_ini_shutdown(TSRMLS_D);
|
||||
ZEND_API int zend_ini_global_shutdown(TSRMLS_D);
|
||||
ZEND_API int zend_ini_deactivate(TSRMLS_D);
|
||||
|
||||
ZEND_API int zend_copy_ini_directives(TSRMLS_D);
|
||||
@@ -190,6 +191,7 @@ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type,
|
||||
int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg);
|
||||
#define ZEND_INI_PARSER_ENTRY 1
|
||||
#define ZEND_INI_PARSER_SECTION 2
|
||||
#define ZEND_INI_PARSER_POP_ENTRY 3
|
||||
|
||||
typedef struct _zend_ini_parser_param {
|
||||
zend_ini_parser_cb_t ini_parser_cb;
|
||||
|
||||
+10
-1
@@ -140,7 +140,7 @@ static void ini_error(char *str)
|
||||
fprintf(stderr, "PHP: %s", error_buf);
|
||||
#endif
|
||||
} else {
|
||||
zend_error(E_CORE_WARNING, error_buf);
|
||||
zend_error(E_WARNING, error_buf);
|
||||
}
|
||||
efree(error_buf);
|
||||
}
|
||||
@@ -178,6 +178,7 @@ int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_
|
||||
%pure_parser
|
||||
%token TC_STRING
|
||||
%token TC_ENCAPSULATED_STRING
|
||||
%token BRACK
|
||||
%token SECTION
|
||||
%token CFG_TRUE
|
||||
%token CFG_FALSE
|
||||
@@ -200,6 +201,14 @@ statement:
|
||||
free($1.value.str.val);
|
||||
free($3.value.str.val);
|
||||
}
|
||||
| TC_STRING BRACK '=' string_or_value {
|
||||
#if DEBUG_CFG_PARSER
|
||||
printf("'%s'[ ] = '%s'\n", $1.value.str.val, $4.value.str.val);
|
||||
#endif
|
||||
ZEND_INI_PARSER_CB(&$1, &$4, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG);
|
||||
free($1.value.str.val);
|
||||
free($4.value.str.val);
|
||||
}
|
||||
| TC_STRING { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
|
||||
| SECTION { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
|
||||
| '\n'
|
||||
|
||||
@@ -108,6 +108,9 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
|
||||
%%
|
||||
|
||||
<INITIAL>[ ]*[\[][ ]*[\]][ ]* {
|
||||
return BRACK;
|
||||
}
|
||||
|
||||
<INITIAL>[ ]*("true"|"on"|"yes")[ ]* {
|
||||
ini_lval->value.str.val = zend_strndup("1", 1);
|
||||
@@ -166,7 +169,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
}
|
||||
|
||||
|
||||
<INITIAL>[^=\n\r\t;|&~()!"]+ {
|
||||
<INITIAL>[^=\n\r\t;|&~()!"\[]+ {
|
||||
/* STRING */
|
||||
register int i;
|
||||
|
||||
|
||||
+56
-45
@@ -67,7 +67,7 @@
|
||||
%left '*' '/' '%'
|
||||
%right '!' '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
|
||||
%right '['
|
||||
%nonassoc T_NEW T_IS_CLASS
|
||||
%nonassoc T_NEW T_INSTANCEOF
|
||||
%token T_EXIT
|
||||
%token T_IF
|
||||
%left T_ELSEIF
|
||||
@@ -94,7 +94,7 @@
|
||||
%token T_ENDFOREACH
|
||||
%token T_DECLARE
|
||||
%token T_ENDDECLARE
|
||||
%token T_IS_CLASS
|
||||
%token T_INSTANCEOF
|
||||
%token T_AS
|
||||
%token T_SWITCH
|
||||
%token T_ENDSWITCH
|
||||
@@ -110,9 +110,7 @@
|
||||
%token T_THROW
|
||||
%token T_USE
|
||||
%token T_GLOBAL
|
||||
%token T_STATIC
|
||||
%token T_PRIVATE
|
||||
%token T_PROTECTED
|
||||
%right T_STATIC T_ABSTRACT T_PRIVATE T_PROTECTED T_PUBLIC
|
||||
%token T_VAR
|
||||
%token T_UNSET
|
||||
%token T_ISSET
|
||||
@@ -272,6 +270,12 @@ class_declaration_statement:
|
||||
;
|
||||
|
||||
|
||||
is_reference:
|
||||
/* empty */ { $$.op_type = ZEND_RETURN_VAL; }
|
||||
| '&' { $$.op_type = ZEND_RETURN_REF; }
|
||||
;
|
||||
|
||||
|
||||
unticked_function_declaration_statement:
|
||||
T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type, 0 TSRMLS_CC); }
|
||||
'(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
|
||||
@@ -436,44 +440,51 @@ class_statement_list:
|
||||
|
||||
|
||||
class_statement:
|
||||
class_variable_declaration ';'
|
||||
variable_modifiers { CG(access_type) = $1.u.constant.value.lval; } class_variable_declaration ';'
|
||||
| class_constant_declaration ';'
|
||||
| is_static T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, $1.u.constant.value.lval TSRMLS_CC); } '('
|
||||
| method_modifiers T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, $1.u.constant.value.lval TSRMLS_CC); } '('
|
||||
parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$2 TSRMLS_CC); }
|
||||
| T_ABSTRACT method_modifiers T_FUNCTION { $3.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$3, &$6, 1, $5.op_type, $2.u.constant.value.lval | ZEND_ACC_ABSTRACT TSRMLS_CC); } '('
|
||||
parameter_list ')' { zend_do_abstract_method(TSRMLS_C); zend_do_end_function_declaration(&$3 TSRMLS_CC); } ';'
|
||||
| T_CLASS T_STRING extends_from '{' { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
|
||||
;
|
||||
|
||||
is_static:
|
||||
T_STATIC { $$.u.constant.value.lval = 1; }
|
||||
| /* empty */ { $$.u.constant.value.lval = 0; }
|
||||
variable_modifiers:
|
||||
non_empty_access_modifiers { $$ = $1; }
|
||||
| T_VAR { $$.u.constant.value.lval = ZEND_ACC_PUBLIC; }
|
||||
;
|
||||
|
||||
is_reference:
|
||||
/* empty */ { $$.op_type = ZEND_RETURN_VAL; }
|
||||
| '&' { $$.op_type = ZEND_RETURN_REF; }
|
||||
|
||||
method_modifiers:
|
||||
/* empty */ { $$.u.constant.value.lval = ZEND_ACC_PUBLIC; }
|
||||
| non_empty_access_modifiers { $$ = $1; if (!($$.u.constant.value.lval & ZEND_ACC_PPP_MASK)) { $$.u.constant.value.lval |= ZEND_ACC_PUBLIC; } }
|
||||
;
|
||||
|
||||
non_empty_access_modifiers:
|
||||
access_modifier { $$ = $1; }
|
||||
| non_empty_access_modifiers access_modifier { $$.u.constant.value.lval = zend_do_verify_access_types(&$1, &$2); }
|
||||
;
|
||||
|
||||
access_modifier:
|
||||
T_PUBLIC { $$.u.constant.value.lval = ZEND_ACC_PUBLIC; }
|
||||
| T_PROTECTED { $$.u.constant.value.lval = ZEND_ACC_PROTECTED; }
|
||||
| T_PRIVATE { $$.u.constant.value.lval = ZEND_ACC_PRIVATE; }
|
||||
| T_STATIC { $$.u.constant.value.lval = ZEND_ACC_STATIC; }
|
||||
;
|
||||
|
||||
class_variable_declaration:
|
||||
class_variable_declaration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL, $1.op_type TSRMLS_CC); }
|
||||
| class_variable_declaration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5, $1.op_type TSRMLS_CC); }
|
||||
| class_declaration_type T_VARIABLE { $$ = $1; zend_do_declare_property(&$2, NULL, $1.op_type TSRMLS_CC); }
|
||||
| class_declaration_type T_VARIABLE '=' static_scalar { $$ = $1; zend_do_declare_property(&$2, &$4, $1.op_type TSRMLS_CC); }
|
||||
;
|
||||
|
||||
class_declaration_type:
|
||||
T_VAR { $$.op_type = T_VAR; }
|
||||
| T_STATIC { $$.op_type = T_STATIC; }
|
||||
| T_PRIVATE { $$.op_type = T_PRIVATE; }
|
||||
| T_PROTECTED { $$.op_type = T_PROTECTED; }
|
||||
class_variable_declaration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL TSRMLS_CC); }
|
||||
| class_variable_declaration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5 TSRMLS_CC); }
|
||||
| T_VARIABLE { zend_do_declare_property(&$1, NULL TSRMLS_CC); }
|
||||
| T_VARIABLE '=' static_scalar { zend_do_declare_property(&$1, &$3 TSRMLS_CC); }
|
||||
;
|
||||
|
||||
class_constant_declaration:
|
||||
| T_CONST ',' T_STRING '=' static_scalar { zend_do_declare_property(&$3, &$5, T_CONST TSRMLS_CC); }
|
||||
| T_CONST T_STRING '=' static_scalar { zend_do_declare_property(&$2, &$4, T_CONST TSRMLS_CC); }
|
||||
class_constant_declaration ',' T_STRING '=' static_scalar { zend_do_declare_class_constant(&$3, &$5 TSRMLS_CC); }
|
||||
| T_CONST T_STRING '=' static_scalar { zend_do_declare_class_constant(&$2, &$4 TSRMLS_CC); }
|
||||
;
|
||||
|
||||
echo_expr_list:
|
||||
| echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
|
||||
echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
|
||||
| expr { zend_do_echo(&$1 TSRMLS_CC); }
|
||||
;
|
||||
|
||||
@@ -490,21 +501,21 @@ non_empty_for_expr:
|
||||
|
||||
expr_without_variable:
|
||||
T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
|
||||
| variable '=' expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable '=' expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable '=' '&' variable { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
|
||||
| variable '=' '&' T_NEW new_class_entry { zend_check_writable_variable(&$$); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable '=' '&' T_NEW new_class_entry { zend_check_writable_variable(&$1); zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
|
||||
| T_NEW new_class_entry { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
|
||||
| variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MUL_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_DIV_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_CONCAT_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MOD_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_AND_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_OR_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_XOR_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_SL_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_SR_EQUAL expr { zend_check_writable_variable(&$$); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_PLUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MINUS_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MUL_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_DIV_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_CONCAT_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_MOD_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_AND_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_OR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_XOR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_SL_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| variable T_SR_EQUAL expr { zend_check_writable_variable(&$1); zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| rw_variable T_INC { zend_do_post_incdec(&$$, &$1, ZEND_POST_INC TSRMLS_CC); }
|
||||
| T_INC rw_variable { zend_do_pre_incdec(&$$, &$2, ZEND_PRE_INC TSRMLS_CC); }
|
||||
| rw_variable T_DEC { zend_do_post_incdec(&$$, &$1, ZEND_POST_DEC TSRMLS_CC); }
|
||||
@@ -537,7 +548,7 @@ expr_without_variable:
|
||||
| expr T_IS_SMALLER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 TSRMLS_CC); }
|
||||
| expr '>' expr { zend_do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 TSRMLS_CC); }
|
||||
| expr T_IS_GREATER_OR_EQUAL expr { zend_do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 TSRMLS_CC); }
|
||||
| expr T_IS_CLASS is_class_expr { zend_do_is_class(&$$, &$1, &$3, 0 TSRMLS_CC); }
|
||||
| expr T_INSTANCEOF instanceof_expr { zend_do_instanceof(&$$, &$1, &$3, 0 TSRMLS_CC); }
|
||||
| '(' expr ')' { $$ = $2; }
|
||||
| expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); }
|
||||
expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); }
|
||||
@@ -595,7 +606,7 @@ static_or_variable_string:
|
||||
| r_variable_without_static_member { $$ = $1; }
|
||||
;
|
||||
|
||||
is_class_expr:
|
||||
instanceof_expr:
|
||||
parse_class_entry T_STRING { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
|
||||
| T_STRING { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
|
||||
;
|
||||
@@ -675,12 +686,12 @@ r_variable:
|
||||
|
||||
w_variable:
|
||||
variable { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); $$ = $1; }
|
||||
{ zend_check_writable_variable(&$$); }
|
||||
{ zend_check_writable_variable(&$1); }
|
||||
;
|
||||
|
||||
rw_variable:
|
||||
variable { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); $$ = $1; }
|
||||
{ zend_check_writable_variable(&$$); }
|
||||
{ zend_check_writable_variable(&$1); }
|
||||
;
|
||||
|
||||
r_variable_without_static_member:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -127,7 +127,6 @@ void startup_scanner(TSRMLS_D)
|
||||
CG(heredoc_len)=0;
|
||||
SCNG(yy_start_stack_ptr) = 0;
|
||||
SCNG(yy_start_stack_depth) = 0;
|
||||
SCNG(yy_start_stack) = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -249,8 +248,9 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
|
||||
|
||||
zend_set_compiled_filename(file_path TSRMLS_CC);
|
||||
|
||||
if (CG(zend_lineno) < 0) { /* position is (n_lines * -1), position was changed by an external app */
|
||||
CG(zend_lineno) = CG(zend_lineno) * -1;
|
||||
if (CG(start_lineno)) {
|
||||
CG(zend_lineno) = CG(start_lineno);
|
||||
CG(start_lineno) = 0;
|
||||
} else {
|
||||
CG(zend_lineno) = 1;
|
||||
}
|
||||
@@ -474,6 +474,8 @@ DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)
|
||||
EXPONENT_DNUM (({LNUM}|{DNUM})[eE][+-]?{LNUM})
|
||||
HNUM "0x"[0-9a-fA-F]+
|
||||
LABEL [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
|
||||
ENCAPSED_STRING ([a-zA-Z0-9_\x7f-\xff \t #'.:;,()|^&+/*=%!~<>?@]|"-"[a-zA-Z0-9_\x7f-\xff \t #'.:;,()|^&+/*=%!~<?@])+
|
||||
ENCAPSED_STRING_WITH_NEWLINE ([a-zA-Z0-9_\x7f-\xff \t\n\r #'.:;,()|^&+/*=%!~<>?@]|"-"[a-zA-Z0-9_\x7f-\xff \t\n\r #'.:;,()|^&+/*=%!~<?@])+
|
||||
WHITESPACE [ \n\r\t]+
|
||||
TABS_AND_SPACES [ \t]*
|
||||
TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@]
|
||||
@@ -570,8 +572,8 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
return T_ENDDECLARE;
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>"is" {
|
||||
return T_IS_CLASS;
|
||||
<ST_IN_SCRIPTING>"instanceof" {
|
||||
return T_INSTANCEOF;
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>"as" {
|
||||
@@ -724,6 +726,10 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
return T_STATIC;
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>"abstract" {
|
||||
return T_ABSTRACT;
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>"private" {
|
||||
return T_PRIVATE;
|
||||
}
|
||||
@@ -733,10 +739,9 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>"public" {
|
||||
return T_VAR;
|
||||
return T_PUBLIC;
|
||||
}
|
||||
|
||||
|
||||
<ST_IN_SCRIPTING>"unset" {
|
||||
return T_UNSET;
|
||||
}
|
||||
@@ -1076,6 +1081,13 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
return T_VARIABLE;
|
||||
}
|
||||
|
||||
<ST_DOUBLE_QUOTES,ST_BACKQUOTE>{ENCAPSED_STRING_WITH_NEWLINE} {
|
||||
HANDLE_NEWLINES(yytext, yyleng);
|
||||
zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
|
||||
zendlval->value.str.len = yyleng;
|
||||
zendlval->type = IS_STRING;
|
||||
return T_STRING;
|
||||
}
|
||||
|
||||
<ST_IN_SCRIPTING>{LABEL} {
|
||||
zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
|
||||
@@ -1085,7 +1097,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
|
||||
}
|
||||
|
||||
|
||||
<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LABEL} {
|
||||
<ST_HEREDOC>{ENCAPSED_STRING} {
|
||||
zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
|
||||
zendlval->value.str.len = yyleng;
|
||||
zendlval->type = IS_STRING;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -28,7 +28,7 @@ typedef struct _zend_llist_element {
|
||||
} zend_llist_element;
|
||||
|
||||
typedef void (*llist_dtor_func_t)(void *);
|
||||
typedef int (*llist_compare_func_t)(const zend_llist_element *, const zend_llist_element * TSRMLS_DC);
|
||||
typedef int (*llist_compare_func_t)(const zend_llist_element **, const zend_llist_element ** TSRMLS_DC);
|
||||
typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args TSRMLS_DC);
|
||||
typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg TSRMLS_DC);
|
||||
typedef void (*llist_apply_func_t)(void * TSRMLS_DC);
|
||||
|
||||
+48
-7
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -57,7 +57,6 @@
|
||||
#define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block))
|
||||
#define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment))
|
||||
|
||||
|
||||
/* Memory calculations */
|
||||
#define ZEND_MM_BLOCK_AT(blk, offset) ((zend_mm_block *) (((char *) (blk))+(offset)))
|
||||
#define ZEND_MM_DATA_OF(p) ((void *) (((char *) (p))+ZEND_MM_ALIGNED_HEADER_SIZE))
|
||||
@@ -152,14 +151,15 @@ zend_bool zend_mm_add_memory_block(zend_mm_heap *heap, size_t block_size)
|
||||
block_size -= ZEND_MM_ALIGNED_SEGMENT_SIZE;
|
||||
mm_block = (zend_mm_free_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
|
||||
|
||||
mm_block->size = block_size - ZEND_MM_ALIGNED_FREE_HEADER_SIZE; /* keep one guard block in the end */
|
||||
mm_block->size = block_size - ZEND_MM_ALIGNED_HEADER_SIZE; /* keep one guard block in the end */
|
||||
mm_block->type = ZEND_MM_FREE_BLOCK;
|
||||
mm_block->prev_size = 0; /* Size is always at least ZEND_MM_ALIGNED_HEADER_SIZE big (>0) so 0 is OK */
|
||||
|
||||
/* setup guard block */
|
||||
guard_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size);
|
||||
guard_block->type = ZEND_MM_USED_BLOCK;
|
||||
guard_block->size = ZEND_MM_ALIGNED_FREE_HEADER_SIZE;
|
||||
guard_block->size = ZEND_MM_ALIGNED_HEADER_SIZE;
|
||||
guard_block->guard_block = 1;
|
||||
guard_block->prev_size = mm_block->size;
|
||||
ZEND_MM_DEBUG(("Setup guard block at 0x%0.8X\n", guard_block));
|
||||
|
||||
@@ -231,9 +231,9 @@ void *zend_mm_alloc(zend_mm_heap *heap, size_t size)
|
||||
|
||||
zend_mm_finished_searching_for_block:
|
||||
if (!best_fit) {
|
||||
if (true_size > (heap->block_size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_FREE_HEADER_SIZE)) {
|
||||
if (true_size > (heap->block_size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_HEADER_SIZE)) {
|
||||
/* Make sure we add a memory block which is big enough */
|
||||
zend_mm_add_memory_block(heap, true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_FREE_HEADER_SIZE);
|
||||
zend_mm_add_memory_block(heap, true_size + ZEND_MM_ALIGNED_SEGMENT_SIZE + ZEND_MM_ALIGNED_HEADER_SIZE);
|
||||
} else {
|
||||
zend_mm_add_memory_block(heap, heap->block_size);
|
||||
}
|
||||
@@ -242,6 +242,7 @@ zend_mm_finished_searching_for_block:
|
||||
|
||||
/* mark as used */
|
||||
best_fit->type = ZEND_MM_USED_BLOCK;
|
||||
((zend_mm_block *) best_fit)->guard_block = 0;
|
||||
|
||||
/* remove from free list */
|
||||
zend_mm_remove_from_free_list(heap, best_fit);
|
||||
@@ -257,7 +258,7 @@ void zend_mm_free(zend_mm_heap *heap, void *p)
|
||||
zend_mm_block *mm_block = ZEND_MM_HEADER_OF(p);
|
||||
zend_mm_block *prev_block, *next_block;
|
||||
|
||||
if (mm_block->type!=ZEND_MM_USED_BLOCK) {
|
||||
if (mm_block->type != ZEND_MM_USED_BLOCK) {
|
||||
/* error */
|
||||
return;
|
||||
}
|
||||
@@ -300,6 +301,46 @@ void *zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size)
|
||||
|
||||
next_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size);
|
||||
|
||||
if ((mm_block->prev_size == 0) && (next_block->type == ZEND_MM_USED_BLOCK) &&
|
||||
(next_block->guard_block)) {
|
||||
zend_mm_segment *segment = (zend_mm_segment *) ((char *)mm_block - ZEND_MM_ALIGNED_SEGMENT_SIZE);
|
||||
zend_mm_segment *segment_copy = segment;
|
||||
zend_mm_block *guard_block;
|
||||
size_t realloc_to_size;
|
||||
|
||||
/* segment size, size of block and size of guard block */
|
||||
realloc_to_size = ZEND_MM_ALIGNED_SEGMENT_SIZE+true_size+ZEND_MM_ALIGNED_HEADER_SIZE;
|
||||
segment = realloc(segment, realloc_to_size);
|
||||
|
||||
if (segment != segment_copy) {
|
||||
if (heap->segments_list == segment_copy) {
|
||||
heap->segments_list = segment;
|
||||
} else {
|
||||
zend_mm_segment *seg = heap->segments_list;
|
||||
|
||||
while (seg) {
|
||||
if (seg->next_segment == segment_copy) {
|
||||
seg->next_segment = segment;
|
||||
break;
|
||||
}
|
||||
seg = seg->next_segment;
|
||||
}
|
||||
}
|
||||
mm_block = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
|
||||
}
|
||||
|
||||
mm_block->size = true_size;
|
||||
|
||||
/* setup guard block */
|
||||
guard_block = ZEND_MM_BLOCK_AT(mm_block, mm_block->size);
|
||||
guard_block->type = ZEND_MM_USED_BLOCK;
|
||||
guard_block->size = ZEND_MM_ALIGNED_HEADER_SIZE;
|
||||
guard_block->guard_block = 1;
|
||||
guard_block->prev_size = mm_block->size;
|
||||
|
||||
return ZEND_MM_DATA_OF(mm_block);
|
||||
}
|
||||
|
||||
if (next_block->type != ZEND_MM_FREE_BLOCK || (mm_block->size + next_block->size < true_size)) {
|
||||
void *ptr;
|
||||
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -32,6 +32,7 @@ typedef struct _zend_mm_block {
|
||||
unsigned int size : 31;
|
||||
unsigned int type : 1;
|
||||
size_t prev_size;
|
||||
unsigned int guard_block : 1;
|
||||
} zend_mm_block;
|
||||
|
||||
typedef struct _zend_mm_free_block {
|
||||
|
||||
+5
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -41,7 +41,8 @@ ZEND_API extern unsigned char third_arg_force_ref[];
|
||||
#define USING_ZTS 0
|
||||
#endif
|
||||
|
||||
#define STANDARD_MODULE_HEADER sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS
|
||||
#define STANDARD_MODULE_HEADER sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS, NULL
|
||||
#define ZE2_STANDARD_MODULE_HEADER sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS, ini_entries
|
||||
|
||||
#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0
|
||||
|
||||
@@ -53,6 +54,7 @@ ZEND_API extern unsigned char third_arg_force_ref[];
|
||||
#define MODULE_PERSISTENT 1
|
||||
#define MODULE_TEMPORARY 2
|
||||
|
||||
struct _zend_ini_entry;
|
||||
typedef struct _zend_module_entry zend_module_entry;
|
||||
|
||||
struct _zend_module_entry {
|
||||
@@ -60,6 +62,7 @@ struct _zend_module_entry {
|
||||
unsigned int zend_api;
|
||||
unsigned char zend_debug;
|
||||
unsigned char zts;
|
||||
struct _zend_ini_entry *ini_entry;
|
||||
char *name;
|
||||
zend_function_entry *functions;
|
||||
int (*module_startup_func)(INIT_FUNC_ARGS);
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
#define DEBUG_OBJECT_HANDLERS 0
|
||||
|
||||
#define Z_OBJ_P(zval_p) zend_objects_get_address(zval_p)
|
||||
|
||||
/*
|
||||
__X accessors explanation:
|
||||
|
||||
@@ -207,7 +209,7 @@ static void zend_std_write_property(zval *object, zval *member, zval *value TSRM
|
||||
}
|
||||
|
||||
if (zend_hash_find(zobj->properties, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &variable_ptr) == SUCCESS) {
|
||||
if(*variable_ptr == value) {
|
||||
if (*variable_ptr == value) {
|
||||
/* if we already have this value there, we don't actually need to do anything */
|
||||
setter_done = 1;
|
||||
} else {
|
||||
@@ -397,8 +399,8 @@ static union _zend_function *zend_std_get_method(zval *object, char *method_name
|
||||
call_user_call->type = ZEND_INTERNAL_FUNCTION;
|
||||
call_user_call->handler = zend_std_call_user_call;
|
||||
call_user_call->arg_types = NULL;
|
||||
call_user_call->scope = NULL;
|
||||
call_user_call->is_static = 0;
|
||||
call_user_call->scope = zobj->ce;
|
||||
call_user_call->fn_flags = 0;
|
||||
call_user_call->function_name = estrndup(method_name, method_len);
|
||||
|
||||
free_alloca(lc_method_name);
|
||||
@@ -474,6 +476,24 @@ zend_class_entry *zend_std_object_get_class(zval *object TSRMLS_DC)
|
||||
return zobj->ce;
|
||||
}
|
||||
|
||||
int zend_std_object_get_class_name(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
|
||||
{
|
||||
zend_object *zobj;
|
||||
zobj = Z_OBJ_P(object);
|
||||
|
||||
if (parent) {
|
||||
if (!zobj->ce->parent) {
|
||||
return FAILURE;
|
||||
}
|
||||
*class_name = zobj->ce->parent->name;
|
||||
*class_name_len = zobj->ce->parent->name_length;
|
||||
} else {
|
||||
*class_name = zobj->ce->name;
|
||||
*class_name_len = zobj->ce->name_length;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
zend_object_handlers std_object_handlers = {
|
||||
zend_objects_store_add_ref, /* add_ref */
|
||||
zend_objects_store_del_ref, /* del_ref */
|
||||
@@ -493,7 +513,7 @@ zend_object_handlers std_object_handlers = {
|
||||
NULL, /* call_method */
|
||||
zend_std_get_constructor, /* get_constructor */
|
||||
zend_std_object_get_class, /* get_class_entry */
|
||||
NULL, /* get_class_name */
|
||||
zend_std_object_get_class_name, /* get_class_name */
|
||||
zend_std_compare_objects /* compare_objects */
|
||||
};
|
||||
|
||||
@@ -73,7 +73,7 @@ typedef struct _zend_object_handlers {
|
||||
|
||||
extern zend_object_handlers std_object_handlers;
|
||||
|
||||
#define IS_ZEND_STD_OBJECT(z) ((z).type == IS_OBJECT && Z_OBJ_HT(z) == &std_object_handlers)
|
||||
#define IS_ZEND_STD_OBJECT(z) ((z).type == IS_OBJECT && (Z_OBJ_HT((z))->get_class_entry != NULL))
|
||||
#define HAS_CLASS_ENTRY(z) (Z_OBJ_HT(z)->get_class_entry != NULL)
|
||||
|
||||
#endif
|
||||
+1
-1
@@ -38,7 +38,7 @@ static inline void zend_objects_call_destructor(zend_object *object, zend_object
|
||||
}
|
||||
|
||||
|
||||
static inline void zend_objects_destroy_object(zend_object *object, zend_object_handle handle TSRMLS_DC)
|
||||
ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handle handle TSRMLS_DC)
|
||||
{
|
||||
zend_objects_call_destructor(object, handle TSRMLS_CC);
|
||||
/* Nuke the object */
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "zend.h"
|
||||
|
||||
ZEND_API zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class_type);
|
||||
ZEND_API void zend_objects_destroy_object(zend_object *object, zend_object_handle handle TSRMLS_DC);
|
||||
ZEND_API zend_object *zend_objects_get_address(zval *object);
|
||||
ZEND_API zend_object_value zend_objects_clone_obj(zval *object TSRMLS_DC);
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ ZEND_API zend_object_value zend_objects_store_clone_obj(zval *zobject TSRMLS_DC)
|
||||
zend_error(E_ERROR, "Trying to clone uncloneable object");
|
||||
}
|
||||
|
||||
obj->clone(&obj->object, &new_object TSRMLS_CC);
|
||||
obj->clone(obj->object, &new_object TSRMLS_CC);
|
||||
|
||||
retval.handle = zend_objects_store_put(new_object, obj->dtor, obj->clone TSRMLS_CC);
|
||||
retval.handlers = Z_OBJ_HT_P(zobject);
|
||||
@@ -242,6 +242,11 @@ ZEND_API zval* zend_object_proxy_get(zval *property TSRMLS_DC)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ZEND_API zend_object_handlers *zend_get_std_object_handlers()
|
||||
{
|
||||
return &std_object_handlers;
|
||||
}
|
||||
|
||||
static zend_object_handlers zend_object_proxy_handlers = {
|
||||
ZEND_OBJECTS_STORE_HANDLERS,
|
||||
|
||||
|
||||
@@ -46,4 +46,6 @@ ZEND_API void *zend_object_store_get_object(zval *object TSRMLS_DC);
|
||||
#define ZEND_OBJECTS_STORE_HANDLERS zend_objects_store_add_ref, zend_objects_store_del_ref, zend_objects_store_delete_obj, zend_objects_store_clone_obj
|
||||
|
||||
ZEND_API zval **zend_object_create_proxy(zval *object, zval *member TSRMLS_DC);
|
||||
|
||||
ZEND_API zend_object_handlers *zend_get_std_object_handlers();
|
||||
#endif /* ZEND_OBJECTS_H */
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -339,7 +339,7 @@ int print_class(zend_class_entry *class_entry TSRMLS_DC)
|
||||
|
||||
ZEND_API unary_op_type get_unary_op(int opcode)
|
||||
{
|
||||
switch(opcode) {
|
||||
switch (opcode) {
|
||||
case ZEND_BW_NOT:
|
||||
return (unary_op_type) bitwise_not_function;
|
||||
break;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -504,7 +504,7 @@ ZEND_API void convert_to_array(zval *op)
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
|
||||
switch(op->type) {
|
||||
switch (op->type) {
|
||||
case IS_ARRAY:
|
||||
return;
|
||||
break;
|
||||
@@ -538,7 +538,7 @@ ZEND_API void convert_to_array(zval *op)
|
||||
|
||||
ZEND_API void convert_to_object(zval *op)
|
||||
{
|
||||
switch(op->type) {
|
||||
switch (op->type) {
|
||||
case IS_ARRAY:
|
||||
{
|
||||
/* OBJECTS_OPTIMIZE */
|
||||
@@ -1360,7 +1360,7 @@ ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2 TSR
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int is_class_function(zval *result, zval *op1, zend_class_entry *class TSRMLS_DC)
|
||||
ZEND_API int instanceof_function(zval *result, zval *op1, zend_class_entry *class TSRMLS_DC)
|
||||
{
|
||||
if (Z_TYPE_P(op1) == IS_OBJECT) {
|
||||
zend_class_entry *ce;
|
||||
@@ -1540,7 +1540,7 @@ ZEND_API int decrement_function(zval *op1)
|
||||
op1->type = IS_LONG;
|
||||
break;
|
||||
}
|
||||
switch(is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, &dval, 0)) {
|
||||
switch (is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, &dval, 0)) {
|
||||
case IS_LONG:
|
||||
STR_FREE(op1->value.str.val);
|
||||
if (lval == LONG_MIN) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -58,7 +58,7 @@ ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
|
||||
ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
|
||||
ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
|
||||
|
||||
ZEND_API int is_class_function(zval *result, zval *op1, zend_class_entry *ce TSRMLS_DC);
|
||||
ZEND_API int instanceof_function(zval *result, zval *op1, zend_class_entry *ce TSRMLS_DC);
|
||||
|
||||
static inline zend_bool is_numeric_string(char *str, int length, long *lval, double *dval, zend_bool allow_errors)
|
||||
{
|
||||
@@ -109,7 +109,7 @@ static inline zend_bool is_numeric_string(char *str, int length, long *lval, dou
|
||||
register char *ptr=str, *end=str+length;
|
||||
|
||||
while (ptr<end) {
|
||||
switch(*ptr++) {
|
||||
switch (*ptr++) {
|
||||
case 'e':
|
||||
case 'E':
|
||||
/* scientific notation, not handled by the BC library */
|
||||
@@ -238,9 +238,10 @@ ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC);
|
||||
#define Z_ARRVAL(zval) (zval).value.ht
|
||||
#define Z_OBJ_HANDLE(zval) (zval).value.obj.handle
|
||||
#define Z_OBJ_HT(zval) (zval).value.obj.handlers
|
||||
#define Z_OBJ(zval) zend_objects_get_address(&(zval))
|
||||
#define Z_OBJCE(zval) zend_get_class_entry(&(zval))
|
||||
#define Z_OBJPROP(zval) Z_OBJ(zval)->properties
|
||||
#define Z_OBJPROP(zval) Z_OBJ_HT((zval))->get_properties(&(zval) TSRMLS_CC)
|
||||
#define Z_OBJ_HANDLER(zval, hf) \
|
||||
Z_OBJ_HT((zval))->hf
|
||||
#define Z_RESVAL(zval) (zval).value.lval
|
||||
|
||||
#define Z_LVAL_P(zval_p) Z_LVAL(*zval_p)
|
||||
@@ -249,12 +250,12 @@ ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC);
|
||||
#define Z_STRVAL_P(zval_p) Z_STRVAL(*zval_p)
|
||||
#define Z_STRLEN_P(zval_p) Z_STRLEN(*zval_p)
|
||||
#define Z_ARRVAL_P(zval_p) Z_ARRVAL(*zval_p)
|
||||
#define Z_OBJ_P(zval_p) Z_OBJ(*zval_p)
|
||||
#define Z_OBJPROP_P(zval_p) Z_OBJPROP(*zval_p)
|
||||
#define Z_OBJCE_P(zval_p) Z_OBJCE(*zval_p)
|
||||
#define Z_RESVAL_P(zval_p) Z_RESVAL(*zval_p)
|
||||
#define Z_OBJ_HANDLE_P(zval_p) Z_OBJ_HANDLE(*zval_p)
|
||||
#define Z_OBJ_HT_P(zval_p) Z_OBJ_HT(*zval_p)
|
||||
#define Z_OBJ_HANDLER_P(zval_p, h) Z_OBJ_HANDLER(*zval_p, h)
|
||||
|
||||
#define Z_LVAL_PP(zval_pp) Z_LVAL(**zval_pp)
|
||||
#define Z_BVAL_PP(zval_pp) Z_BVAL(**zval_pp)
|
||||
@@ -262,12 +263,12 @@ ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC);
|
||||
#define Z_STRVAL_PP(zval_pp) Z_STRVAL(**zval_pp)
|
||||
#define Z_STRLEN_PP(zval_pp) Z_STRLEN(**zval_pp)
|
||||
#define Z_ARRVAL_PP(zval_pp) Z_ARRVAL(**zval_pp)
|
||||
#define Z_OBJ_PP(zval_pp) Z_OBJ(**zval_pp)
|
||||
#define Z_OBJPROP_PP(zval_pp) Z_OBJPROP(**zval_pp)
|
||||
#define Z_OBJCE_PP(zval_pp) Z_OBJCE(**zval_pp)
|
||||
#define Z_RESVAL_PP(zval_pp) Z_RESVAL(**zval_pp)
|
||||
#define Z_OBJ_HANDLE_PP(zval_p) Z_OBJ_HANDLE(**zval_p)
|
||||
#define Z_OBJ_HT_PP(zval_p) Z_OBJ_HT(**zval_p)
|
||||
#define Z_OBJ_HANDLER_PP(zval_p, h) Z_OBJ_HANDLER(**zval_p, h)
|
||||
|
||||
#define Z_TYPE(zval) (zval).type
|
||||
#define Z_TYPE_P(zval_p) Z_TYPE(*zval_p)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -69,7 +69,7 @@ ZEND_API int zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, hash_func_t pHash
|
||||
ZEND_API void zend_ts_hash_destroy(TsHashTable *ht)
|
||||
{
|
||||
tsrm_mutex_free(ht->mx_reader);
|
||||
tsrm_mutex_free(ht->mx_reader);
|
||||
tsrm_mutex_free(ht->mx_writer);
|
||||
zend_hash_destroy(TS_HASH(ht));
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -37,7 +37,7 @@ ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
|
||||
if (zvalue->type==IS_LONG) {
|
||||
return;
|
||||
}
|
||||
switch(zvalue->type & ~IS_CONSTANT_INDEX) {
|
||||
switch (zvalue->type & ~IS_CONSTANT_INDEX) {
|
||||
case IS_STRING:
|
||||
case IS_CONSTANT:
|
||||
CHECK_ZVAL_STRING_REL(zvalue);
|
||||
@@ -126,11 +126,12 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
|
||||
case IS_OBJECT:
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
#if 0
|
||||
zvalue->value.obj = zvalue->value.obj.handlers->clone_obj(zvalue->value.obj.handle);
|
||||
#else
|
||||
Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC);
|
||||
#endif
|
||||
|
||||
if (EG(implicit_clone)) {
|
||||
zvalue->value.obj = zvalue->value.obj.handlers->clone_obj(zvalue TSRMLS_CC);
|
||||
} else {
|
||||
Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2003 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+66
-23
@@ -31,9 +31,9 @@ AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[
|
||||
mkdir include >/dev/null 2>&1
|
||||
> Makefile.objects
|
||||
> Makefile.fragments
|
||||
dnl We need to play tricks here to avoid matching the egrep line itself
|
||||
dnl We need to play tricks here to avoid matching the grep line itself
|
||||
pattern=define
|
||||
egrep $pattern'.*include/php' $srcdir/configure|sed 's/.*>//'|xargs touch 2>/dev/null
|
||||
grep -E $pattern'.*include/php' $srcdir/configure|sed 's/.*>//'|xargs touch 2>/dev/null
|
||||
])
|
||||
|
||||
dnl PHP_GEN_GLOBAL_MAKEFILE
|
||||
@@ -137,13 +137,6 @@ EOF
|
||||
done
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Disable building CLI
|
||||
dnl
|
||||
AC_DEFUN([PHP_DISABLE_CLI],[
|
||||
disable_cli=1
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Separator into the configure --help display.
|
||||
dnl
|
||||
@@ -211,13 +204,13 @@ AC_DEFUN([PHP_SETUP_OPENSSL],[
|
||||
AC_MSG_CHECKING([for OpenSSL version])
|
||||
AC_EGREP_CPP(yes,[
|
||||
#include <openssl/opensslv.h>
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x0090500fL
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x0090600fL
|
||||
yes
|
||||
#endif
|
||||
],[
|
||||
AC_MSG_RESULT([>= 0.9.5])
|
||||
AC_MSG_RESULT([>= 0.9.6])
|
||||
],[
|
||||
AC_MSG_ERROR([OpenSSL version 0.9.5 or greater required.])
|
||||
AC_MSG_ERROR([OpenSSL version 0.9.6 or greater required.])
|
||||
])
|
||||
CPPFLAGS=$old_CPPFLAGS
|
||||
|
||||
@@ -784,7 +777,7 @@ dnl
|
||||
dnl PHP_BUILD_THREAD_SAFE
|
||||
dnl
|
||||
AC_DEFUN([PHP_BUILD_THREAD_SAFE],[
|
||||
enable_experimental_zts=yes
|
||||
enable_maintainer_zts=yes
|
||||
if test "$pthreads_working" != "yes"; then
|
||||
AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.])
|
||||
fi
|
||||
@@ -1121,7 +1114,7 @@ AC_DEFUN([PHP_CHECK_CC_OPTION],[
|
||||
changequote([,])
|
||||
AC_MSG_CHECKING([if compiler supports -$1 really])
|
||||
ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
|
||||
if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then
|
||||
if eval $ac_php_compile 2>&1 | grep -E "$opt" > /dev/null 2>&1 ; then
|
||||
eval php_cc_$var=no
|
||||
AC_MSG_RESULT([no])
|
||||
else
|
||||
@@ -1462,6 +1455,56 @@ int main(void) {
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([PHP_BROKEN_GLIBC_FOPEN_APPEND],[
|
||||
AC_MSG_CHECKING([for broken libc stdio])
|
||||
AC_CACHE_VAL(have_broken_glibc_fopen_append,[
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE *fp;
|
||||
long position;
|
||||
char *filename = "/tmp/phpglibccheck";
|
||||
|
||||
fp = fopen(filename, "w");
|
||||
if (fp == NULL) {
|
||||
perror("fopen");
|
||||
exit(2);
|
||||
}
|
||||
fputs("foobar", fp);
|
||||
fclose(fp);
|
||||
|
||||
fp = fopen(filename, "a+");
|
||||
position = ftell(fp);
|
||||
fclose(fp);
|
||||
unlink(filename);
|
||||
if (position == 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
],
|
||||
[have_broken_glibc_fopen_append=no],
|
||||
[have_broken_glibc_fopen_append=yes ],
|
||||
AC_TRY_COMPILE([
|
||||
#include <features.h>
|
||||
],[
|
||||
#if !__GLIBC_PREREQ(2,2)
|
||||
choke me
|
||||
#endif
|
||||
],
|
||||
[have_broken_glibc_fopen_append=yes],
|
||||
[have_broken_glibc_fopen_append=no ])
|
||||
)])
|
||||
|
||||
if test "$have_broken_glibc_fopen_append" = "yes"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_BROKEN_GLIBC_FOPEN_APPEND,1, [Define if your glibc borks on fopen with mode a+])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
AC_DEFUN([PHP_FOPENCOOKIE],[
|
||||
AC_CHECK_FUNC(fopencookie, [ have_glibc_fopencookie=yes ])
|
||||
|
||||
@@ -1487,16 +1530,16 @@ AC_DEFUN([PHP_FOPENCOOKIE],[
|
||||
#include <stdio.h>
|
||||
|
||||
struct cookiedata {
|
||||
fpos_t pos;
|
||||
__off64_t pos;
|
||||
};
|
||||
|
||||
size_t reader(void *cookie, char *buffer, size_t size)
|
||||
__ssize_t reader(void *cookie, char *buffer, size_t size)
|
||||
{ return size; }
|
||||
size_t writer(void *cookie, const char *buffer, size_t size)
|
||||
__ssize_t writer(void *cookie, const char *buffer, size_t size)
|
||||
{ return size; }
|
||||
int closer(void *cookie)
|
||||
{ return 0; }
|
||||
int seeker(void *cookie, fpos_t *position, int whence)
|
||||
int seeker(void *cookie, __off64_t *position, int whence)
|
||||
{ ((struct cookiedata*)cookie)->pos = *position; return 0; }
|
||||
|
||||
cookie_io_functions_t funcs = {reader, writer, seeker, closer};
|
||||
@@ -1505,13 +1548,13 @@ main() {
|
||||
struct cookiedata g = { 0 };
|
||||
FILE *fp = fopencookie(&g, "r", funcs);
|
||||
|
||||
if (fp && fseek(fp, 69, SEEK_SET) == 0 && g.pos == 69)
|
||||
if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192)
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
],
|
||||
[ cookie_io_functions_use_fpos_t=yes ],
|
||||
[ cookie_io_functions_use_off64_t=yes ],
|
||||
[ ] )
|
||||
|
||||
else
|
||||
@@ -1532,8 +1575,8 @@ main() {
|
||||
if test "$have_fopen_cookie" = "yes" ; then
|
||||
AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ])
|
||||
AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ])
|
||||
if test "$cookie_io_functions_use_fpos_t" = "yes" ; then
|
||||
AC_DEFINE(COOKIE_SEEKER_USES_FPOS_T, 1, [ ])
|
||||
if test "$cookie_io_functions_use_off64_t" = "yes" ; then
|
||||
AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1778,7 +1821,7 @@ $debug ||
|
||||
_sed=sed
|
||||
|
||||
# Check for GNU sed and select it if it is found.
|
||||
if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then
|
||||
if "${_sed}" --version 2>&1 < /dev/null | grep -E '(GNU)' > /dev/null; then
|
||||
ac_cv_path_sed=${_sed}
|
||||
else
|
||||
cat /dev/null > "$tmp/sed.in"
|
||||
|
||||
+4
-4
@@ -16,7 +16,7 @@
|
||||
# | Sascha Schumann <sascha@schumann.cx> |
|
||||
# +----------------------------------------------------------------------+
|
||||
#
|
||||
# $Id: buildcheck.sh,v 1.21 2002-10-30 11:42:22 sas Exp $
|
||||
# $Id: buildcheck.sh,v 1.22 2003-01-13 10:27:50 sas Exp $
|
||||
#
|
||||
|
||||
echo "buildconf: checking installation..."
|
||||
@@ -72,8 +72,8 @@ fi
|
||||
|
||||
# libtool 1.4 or newer
|
||||
# Prefer glibtool over libtool for Mac OS X compatibility
|
||||
libtool=`which glibtool 2> /dev/null`
|
||||
if test ! -f "$libtool"; then libtool=`which libtool`; fi
|
||||
libtool=`./build/shtool path glibtool 2> /dev/null`
|
||||
if test ! -f "$libtool"; then libtool=`./build/shtool path libtool`; fi
|
||||
lt_pversion=`$libtool --version 2>/dev/null|sed -n -e 's/^[^0-9]*//' -e 1's/[- ].*//p'`
|
||||
if test "$lt_pversion" = ""; then
|
||||
echo "buildconf: libtool not found."
|
||||
@@ -94,7 +94,7 @@ echo " to build PHP from CVS."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
am_prefix=`which automake | sed -e 's#/[^/]*/[^/]*$##'`
|
||||
am_prefix=`./build/shtool path automake | sed -e 's#/[^/]*/[^/]*$##'`
|
||||
lt_prefix=`echo $libtool | sed -e 's#/[^/]*/[^/]*$##'`
|
||||
if test "$am_prefix" != "$lt_prefix"; then
|
||||
echo "WARNING: automake and libtool are installed in different"
|
||||
|
||||
Vendored
+69
-31
@@ -3,7 +3,7 @@
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2002-05-29'
|
||||
timestamp='2002-10-21'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -88,30 +88,40 @@ if test $# != 0; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap 'exit 1' 1 2 15
|
||||
|
||||
dummy=dummy-$$
|
||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
||||
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||
# compiler to aid in system detection is discouraged as it requires
|
||||
# temporary files to be created and, as you can see below, it is a
|
||||
# headache to deal with in a portable fashion.
|
||||
|
||||
# CC_FOR_BUILD -- compiler used by this script.
|
||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||
# use `HOST_CC' if defined, but it is deprecated.
|
||||
|
||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||
,,) echo "int dummy(){}" > $dummy.c ;
|
||||
# This shell variable is my proudest work .. or something. --bje
|
||||
|
||||
set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
|
||||
(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
|
||||
|| (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
|
||||
dummy=$tmpdir/dummy ;
|
||||
files="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||
trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
|
||||
case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||
,,) echo "int x;" > $dummy.c ;
|
||||
for c in cc gcc c89 c99 ; do
|
||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
||||
if test $? = 0 ; then
|
||||
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||
CC_FOR_BUILD="$c"; break ;
|
||||
fi ;
|
||||
done ;
|
||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
||||
rm -f $files ;
|
||||
if test x"$CC_FOR_BUILD" = x ; then
|
||||
CC_FOR_BUILD=no_compiler_found ;
|
||||
fi
|
||||
;;
|
||||
,,*) CC_FOR_BUILD=$CC ;;
|
||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||
esac'
|
||||
esac ;
|
||||
unset files'
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||
@@ -221,6 +231,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
# A Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
eval $set_cc_for_build
|
||||
cat <<EOF >$dummy.s
|
||||
.data
|
||||
\$Lformat:
|
||||
@@ -246,10 +257,9 @@ main:
|
||||
jsr \$26,exit
|
||||
.end main
|
||||
EOF
|
||||
eval $set_cc_for_build
|
||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||
$CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
case `./$dummy` in
|
||||
case `$dummy` in
|
||||
0-0)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
@@ -271,9 +281,12 @@ EOF
|
||||
2-1307)
|
||||
UNAME_MACHINE="alphaev68"
|
||||
;;
|
||||
3-1307)
|
||||
UNAME_MACHINE="alphaev7"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
rm -f $dummy.s $dummy
|
||||
rm -f $dummy.s $dummy && rmdir $tmpdir
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
exit 0 ;;
|
||||
Alpha\ *:Windows_NT*:*)
|
||||
@@ -314,6 +327,10 @@ EOF
|
||||
NILE*:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
DRS?6000:UNIX_SV:4.2*:7*)
|
||||
case `/usr/bin/uname -p` in
|
||||
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||
esac ;;
|
||||
sun4H:SunOS:5.*:*)
|
||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
@@ -420,15 +437,18 @@ EOF
|
||||
exit (-1);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Motorola:PowerMAX_OS:*:*)
|
||||
echo powerpc-motorola-powermax
|
||||
exit 0 ;;
|
||||
Motorola:*:4.3:PL8-*)
|
||||
echo powerpc-harris-powermax
|
||||
exit 0 ;;
|
||||
Night_Hawk:*:*:PowerMAX_OS)
|
||||
echo powerpc-harris-powermax
|
||||
exit 0 ;;
|
||||
@@ -504,8 +524,8 @@ EOF
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
@@ -603,9 +623,9 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
|
||||
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
||||
rm -f $dummy.c $dummy
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
fi ;;
|
||||
esac
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
@@ -641,8 +661,8 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
@@ -725,7 +745,19 @@ EOF
|
||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
# Determine whether the default compiler uses glibc.
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#include <features.h>
|
||||
#if __GLIBC__ >= 2
|
||||
LIBC=gnu
|
||||
#else
|
||||
LIBC=
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-cygwin
|
||||
@@ -786,7 +818,7 @@ EOF
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||
rm -f $dummy.c
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
|
||||
;;
|
||||
ppc:Linux:*:*)
|
||||
@@ -849,7 +881,7 @@ EOF
|
||||
;;
|
||||
a.out-i386-linux)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||
exit 0 ;;
|
||||
exit 0 ;;
|
||||
coff-i386)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||
exit 0 ;;
|
||||
@@ -882,7 +914,7 @@ EOF
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
rm -f $dummy.c
|
||||
rm -f $dummy.c && rmdir $tmpdir
|
||||
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||
;;
|
||||
@@ -960,6 +992,9 @@ EOF
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
mc68k:UNIX:SYSTEM5:3.51m)
|
||||
echo m68k-convergent-sysv
|
||||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
|
||||
@@ -1053,6 +1088,9 @@ EOF
|
||||
SX-5:SUPER-UX:*:*)
|
||||
echo sx5-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SX-6:SUPER-UX:*:*)
|
||||
echo sx6-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Power*:Rhapsody:*:*)
|
||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -1073,7 +1111,7 @@ EOF
|
||||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit 0 ;;
|
||||
NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:NonStop-UX:*:*)
|
||||
@@ -1245,8 +1283,8 @@ main ()
|
||||
}
|
||||
EOF
|
||||
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
|
||||
rm -f $dummy.c $dummy && rmdir $tmpdir
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
|
||||
Vendored
+69
-42
@@ -3,7 +3,7 @@
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2002-05-28'
|
||||
timestamp='2002-09-05'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
@@ -118,7 +118,7 @@ esac
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
|
||||
nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
@@ -229,24 +229,34 @@ case $basic_machine in
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||
| c4x | clipper \
|
||||
| clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 \
|
||||
| fr30 | frv \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| mips | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el | mips64vr4300 \
|
||||
| mips64vr4300el | mips64vr5000 | mips64vr5000el \
|
||||
| mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
|
||||
| mipsisa32 | mipsisa64 \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| ns16k | ns32k \
|
||||
| openrisc | or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| sh | sh[34] | sh[34]eb | shbe | shle | sh64 \
|
||||
| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| tahoe | thumb | tic80 | tron \
|
||||
@@ -284,31 +294,42 @@ case $basic_machine in
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
|
||||
| clipper-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fr30-* | fx80-* \
|
||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* \
|
||||
| m32r-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
|
||||
| mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
|
||||
| mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39 | mipstx39el \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* | sh64-* \
|
||||
| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
@@ -728,13 +749,13 @@ case $basic_machine in
|
||||
pbb)
|
||||
basic_machine=m68k-tti
|
||||
;;
|
||||
pc532 | pc532-*)
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6 | 6x86 | athlon)
|
||||
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentiumii | pentium2)
|
||||
@@ -755,22 +776,22 @@ case $basic_machine in
|
||||
power) basic_machine=power-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
;;
|
||||
;;
|
||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||
basic_machine=powerpcle-unknown
|
||||
;;
|
||||
;;
|
||||
ppcle-* | powerpclittle-*)
|
||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppc64) basic_machine=powerpc64-unknown
|
||||
;;
|
||||
;;
|
||||
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
||||
basic_machine=powerpc64le-unknown
|
||||
;;
|
||||
;;
|
||||
ppc64le-* | powerpc64little-*)
|
||||
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
@@ -801,6 +822,12 @@ case $basic_machine in
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
sb1)
|
||||
basic_machine=mipsisa64sb1-unknown
|
||||
;;
|
||||
sb1el)
|
||||
basic_machine=mipsisa64sb1el-unknown
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
@@ -866,7 +893,7 @@ case $basic_machine in
|
||||
sun386 | sun386i | roadrunner)
|
||||
basic_machine=i386-sun
|
||||
;;
|
||||
sv1)
|
||||
sv1)
|
||||
basic_machine=sv1-cray
|
||||
os=-unicos
|
||||
;;
|
||||
@@ -886,6 +913,10 @@ case $basic_machine in
|
||||
basic_machine=t90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
tic4x | c4x*)
|
||||
basic_machine=tic4x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic54x | c54x*)
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
@@ -924,8 +955,8 @@ case $basic_machine in
|
||||
os=-vms
|
||||
;;
|
||||
vpp*|vx|vx-*)
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
basic_machine=f301-fujitsu
|
||||
;;
|
||||
vxworks960)
|
||||
basic_machine=i960-wrs
|
||||
os=-vxworks
|
||||
@@ -950,7 +981,7 @@ case $basic_machine in
|
||||
basic_machine=i386-pc
|
||||
os=-windows32-msvcrt
|
||||
;;
|
||||
xps | xps100)
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
ymp)
|
||||
@@ -996,7 +1027,7 @@ case $basic_machine in
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh3 | sh4 | sh3eb | sh4eb)
|
||||
sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sh64)
|
||||
@@ -1005,7 +1036,7 @@ case $basic_machine in
|
||||
sparc | sparcv9 | sparcv9b)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
cydra)
|
||||
basic_machine=cydra-cydrome
|
||||
;;
|
||||
orion)
|
||||
@@ -1020,10 +1051,6 @@ case $basic_machine in
|
||||
pmac | pmac-mpw)
|
||||
basic_machine=powerpc-apple
|
||||
;;
|
||||
c4x*)
|
||||
basic_machine=c4x-none
|
||||
os=-coff
|
||||
;;
|
||||
*-unknown)
|
||||
# Make sure to match an already-canonicalized machine name.
|
||||
;;
|
||||
@@ -1155,7 +1182,7 @@ case $os in
|
||||
os=-rtmk-nova
|
||||
;;
|
||||
-ns2 )
|
||||
os=-nextstep2
|
||||
os=-nextstep2
|
||||
;;
|
||||
-nsk*)
|
||||
os=-nsk
|
||||
@@ -1194,8 +1221,8 @@ case $os in
|
||||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
@@ -1232,7 +1259,7 @@ case $basic_machine in
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
;;
|
||||
pdp11-*)
|
||||
pdp11-*)
|
||||
os=-none
|
||||
;;
|
||||
*-dec | vax-*)
|
||||
@@ -1325,19 +1352,19 @@ case $basic_machine in
|
||||
*-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
*-gould)
|
||||
*-gould)
|
||||
os=-sysv
|
||||
;;
|
||||
*-highlevel)
|
||||
*-highlevel)
|
||||
os=-bsd
|
||||
;;
|
||||
*-encore)
|
||||
os=-bsd
|
||||
;;
|
||||
*-sgi)
|
||||
*-sgi)
|
||||
os=-irix
|
||||
;;
|
||||
*-siemens)
|
||||
*-siemens)
|
||||
os=-sysv4
|
||||
;;
|
||||
*-masscomp)
|
||||
|
||||
+41
-18
@@ -41,8 +41,8 @@ done
|
||||
AC_CANONICAL_HOST
|
||||
AC_CONFIG_HEADER(main/php_config.h)
|
||||
|
||||
MAJOR_VERSION=4
|
||||
MINOR_VERSION=3
|
||||
MAJOR_VERSION=5
|
||||
MINOR_VERSION=0
|
||||
RELEASE_VERSION=0
|
||||
EXTRA_VERSION="-dev"
|
||||
VERSION="$MAJOR_VERSION.$MINOR_VERSION.$RELEASE_VERSION$EXTRA_VERSION"
|
||||
@@ -159,7 +159,7 @@ if test "$ac_cv_c_const" = "yes" ; then
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([flex version])
|
||||
set `$LEX -V | grep 'version' | cut -d ' ' -f 3 | sed -e 's/\./ /g' | sed -e 's/[^0-9 ]//g'`
|
||||
set `echo "" | $LEX -V -v --version 2>/dev/null | grep 'version' | cut -d ' ' -f 3 | sed -e 's/\./ /g' | sed -e 's/[^0-9 ]//g'`
|
||||
if test "${1}" != "2" -o "${2}" != "5" -o "${3}" -lt "4"; then
|
||||
AC_MSG_WARN(You will need flex 2.5.4 or later if you want to regenerate Zend/PHP lexical parsers.)
|
||||
fi
|
||||
@@ -237,11 +237,16 @@ dnl Show which main SAPI was selected
|
||||
AC_MSG_CHECKING([for chosen SAPI module])
|
||||
AC_MSG_RESULT([$PHP_SAPI])
|
||||
|
||||
if test "$enable_experimental_zts" = "yes"; then
|
||||
if test "$enable_maintainer_zts" = "yes"; then
|
||||
PTHREADS_ASSIGN_VARS
|
||||
PTHREADS_FLAGS
|
||||
fi
|
||||
|
||||
if test "$PHP_ENABLE_FASTCGI" = "yes"; then
|
||||
PHP_CONFIGURE_PART(Running FastCGI checks)
|
||||
sinclude(sapi/cgi/libfcgi/acinclude.m4)
|
||||
sinclude(sapi/cgi/libfcgi/libfcgi.m4)
|
||||
fi
|
||||
|
||||
divert(3)
|
||||
|
||||
@@ -376,7 +381,8 @@ sys/ipc.h \
|
||||
#endif
|
||||
])
|
||||
|
||||
|
||||
PHP_FOPENCOOKIE
|
||||
PHP_BROKEN_GLIBC_FOPEN_APPEND
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
dnl -------------------------------------------------------------------------
|
||||
@@ -439,6 +445,7 @@ dnl -------------------------------------------------------------------------
|
||||
|
||||
AC_FUNC_VPRINTF
|
||||
AC_CHECK_FUNCS(
|
||||
alphasort \
|
||||
asctime_r \
|
||||
chroot \
|
||||
ctime_r \
|
||||
@@ -446,6 +453,7 @@ cuserid \
|
||||
crypt \
|
||||
flock \
|
||||
ftok \
|
||||
funopen \
|
||||
gai_strerror \
|
||||
gcvt \
|
||||
getlogin \
|
||||
@@ -473,6 +481,7 @@ random \
|
||||
rand_r \
|
||||
regcomp \
|
||||
res_search \
|
||||
scandir \
|
||||
setitimer \
|
||||
setlocale \
|
||||
localeconv \
|
||||
@@ -607,7 +616,7 @@ PHP_ARG_WITH(pear, [whether to install PEAR, and where],
|
||||
[ --with-pear=DIR Install PEAR in DIR (default PREFIX/lib/php)
|
||||
--without-pear Do not install PEAR], DEFAULT, no)
|
||||
|
||||
if test "$PHP_PEAR" != "no" && test "$disable_cli" != "1"; then
|
||||
if test "$PHP_PEAR" != "no" && test "$PHP_SAPI_CLI" != "no"; then
|
||||
install_pear="install-pear install-build install-headers install-programs"
|
||||
PEAR_INSTALLDIR=$PHP_PEAR
|
||||
fi
|
||||
@@ -721,7 +730,7 @@ dnl
|
||||
dnl OpenSSL configure
|
||||
dnl
|
||||
PHP_ARG_WITH(openssl,for OpenSSL support,
|
||||
[ --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.5) ])
|
||||
[ --with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6) ])
|
||||
|
||||
if test "$PHP_OPENSSL" != "no"; then
|
||||
ext_openssl_shared=$ext_shared
|
||||
@@ -829,7 +838,7 @@ TSRM_LIB='TSRM/libtsrm.la'
|
||||
TSRM_DIR=TSRM
|
||||
CPPFLAGS="$CPPFLAGS -I\$(top_builddir)/TSRM"
|
||||
|
||||
if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then
|
||||
if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
|
||||
AC_DEFINE(ZTS,1,[ ])
|
||||
PHP_THREAD_SAFETY=yes
|
||||
else
|
||||
@@ -881,7 +890,7 @@ datadir=`eval echo $datadir`
|
||||
|
||||
dnl Build extension directory path
|
||||
|
||||
ZEND_MODULE_API_NO=`egrep '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|sed 's/#define ZEND_MODULE_API_NO //'`
|
||||
ZEND_MODULE_API_NO=`grep -E '#define ZEND_MODULE_API_NO ' $srcdir/Zend/zend_modules.h|sed 's/#define ZEND_MODULE_API_NO //'`
|
||||
|
||||
if test -z "$EXTENSION_DIR"; then
|
||||
extbasedir=$ZEND_MODULE_API_NO
|
||||
@@ -891,7 +900,7 @@ if test -z "$EXTENSION_DIR"; then
|
||||
else
|
||||
part1=no-debug
|
||||
fi
|
||||
if test "$enable_experimental_zts" = "yes"; then
|
||||
if test "$enable_maintainer_zts" = "yes"; then
|
||||
part2=zts
|
||||
else
|
||||
part2=non-zts
|
||||
@@ -899,7 +908,7 @@ if test -z "$EXTENSION_DIR"; then
|
||||
extbasedir=$part1-$part2-$extbasedir
|
||||
EXTENSION_DIR=$libdir/extensions/$extbasedir
|
||||
else
|
||||
if test "$enable_experimental_zts" = "yes"; then
|
||||
if test "$enable_maintainer_zts" = "yes"; then
|
||||
extbasedir=$extbasedir-zts
|
||||
fi
|
||||
|
||||
@@ -957,8 +966,8 @@ AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME",[uname -a output])
|
||||
PHP_OS=`uname | xargs`
|
||||
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])
|
||||
|
||||
if test "$disable_cli" != "1"; then
|
||||
PHP_CLI_TARGET=sapi/cli/php
|
||||
if test "$PHP_SAPI_CLI" != "no"; then
|
||||
PHP_CLI_TARGET="\$(SAPI_CLI_PATH)"
|
||||
PHP_INSTALL_CLI_TARGET="install-cli"
|
||||
PHP_ADD_SOURCES(sapi/cli, php_cli.c getopt.c,, cli)
|
||||
fi
|
||||
@@ -1002,7 +1011,7 @@ PHP_SUBST(CXX_PHP_COMPILE)
|
||||
PHP_SUBST_OLD(DEBUG_CFLAGS)
|
||||
PHP_SUBST(DEFS)
|
||||
PHP_SUBST_OLD(EXTENSION_DIR)
|
||||
PHP_SUBST(EXTRA_LDFLAGS)
|
||||
PHP_SUBST_OLD(EXTRA_LDFLAGS)
|
||||
PHP_SUBST_OLD(EXTRA_LIBS)
|
||||
PHP_SUBST_OLD(ZEND_EXTRA_LIBS)
|
||||
PHP_SUBST_OLD(INCLUDES)
|
||||
@@ -1075,14 +1084,18 @@ INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag"
|
||||
CXXFLAGS="$CXXFLAGS $standard_libtool_flag"
|
||||
|
||||
all_targets='$(OVERALL_TARGET) $(PHP_MODULES) $(PHP_CLI_TARGET)'
|
||||
install_targets="install-sapi install-modules $PHP_INSTALL_CLI_TARGET $install_pear"
|
||||
install_targets="install-sapi install-modules $install_pear"
|
||||
if test "$PHP_SAPI" != "cgi"; then
|
||||
install_targets="$PHP_INSTALL_CLI_TARGET $install_targets"
|
||||
fi
|
||||
|
||||
PHP_SUBST(all_targets)
|
||||
PHP_SUBST(install_targets)
|
||||
|
||||
PHP_ADD_SOURCES(TSRM, TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c)
|
||||
|
||||
PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \
|
||||
safe_mode.c fopen_wrappers.c alloca.c \
|
||||
safe_mode.c fopen_wrappers.c alloca.c php_scandir.c \
|
||||
php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
|
||||
strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c \
|
||||
streams.c network.c php_open_temporary_file.c php_logos.c \
|
||||
@@ -1235,6 +1248,17 @@ cat <<X
|
||||
X
|
||||
fi
|
||||
|
||||
if test "$PHP_DB" != "no"; then
|
||||
cat <<X
|
||||
+--------------------------------------------------------------------+
|
||||
| *** WARNING *** |
|
||||
| |
|
||||
| You chose to compile PHP with DB extension. This extension is |
|
||||
| deprecated and does not support databse locking correctly. Please |
|
||||
| use DBA extension which is a fully operational superset. |
|
||||
X
|
||||
fi
|
||||
|
||||
if test "$MYSQL_MODULE_TYPE" = "builtin" && test "$PHP_SAPI" != "cgi" && test "$PHP_SAPI" != "cli" && test "$php_multiple_shlib_versions_ok" != "yes"; then
|
||||
cat <<X
|
||||
+--------------------------------------------------------------------+
|
||||
@@ -1275,7 +1299,7 @@ X
|
||||
fi
|
||||
fi
|
||||
|
||||
cat<<X
|
||||
cat <<X
|
||||
+--------------------------------------------------------------------+
|
||||
| License: |
|
||||
| This software is subject to the PHP License, available in this |
|
||||
@@ -1295,7 +1319,6 @@ cat<<X
|
||||
| avoid using it if possible. |
|
||||
+--------------------------------------------------------------------+
|
||||
|
||||
|
||||
Thank you for using PHP.
|
||||
|
||||
X
|
||||
|
||||
Loaded 100 of 1120 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user