From bce41fac9458dd3dec844fc80c8144060e6a9f30 Mon Sep 17 00:00:00 2001 From: Igor Zinkovsky Date: Sun, 28 Aug 2011 02:23:17 -0700 Subject: [PATCH] Use new uv_fs_ apis This will cause master to be unstable for a while as we replace existing eio calls with uv_fs calls. --- deps/pthread-win32/COPYING.LIB | 504 ---------------------------- deps/pthread-win32/libpthreadGC2.a | Bin 64148 -> 0 bytes deps/pthread-win32/libpthreadGC2d.a | Bin 109370 -> 0 bytes node.gyp | 9 - src/node.cc | 77 ----- src/node.h | 1 - src/node_child_process.h | 2 - src/node_crypto.cc | 17 +- src/node_file.cc | 359 +++++++------------- wscript | 8 - 10 files changed, 128 insertions(+), 849 deletions(-) delete mode 100644 deps/pthread-win32/COPYING.LIB delete mode 100644 deps/pthread-win32/libpthreadGC2.a delete mode 100644 deps/pthread-win32/libpthreadGC2d.a diff --git a/deps/pthread-win32/COPYING.LIB b/deps/pthread-win32/COPYING.LIB deleted file mode 100644 index b1e3f5a2638..00000000000 --- a/deps/pthread-win32/COPYING.LIB +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/deps/pthread-win32/libpthreadGC2.a b/deps/pthread-win32/libpthreadGC2.a deleted file mode 100644 index e73ed6f7b85781cb4fde516367b7dca0a18777ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64148 zcmeFa3wTsT5;i=L5F$h-Ngww1>dQHE`jEn^q8XRA>(|5mmwrKd|Na+UbYcJgJ$m3j{5k*a(PO}X^DmMT zQ`>nwo+mt>6Yl)~|NsAW@c*<86jT~>E;zs7@^ZshRaQ|n(^s5XF{`q$%9k~_XhvcA zbYDjL`5rq{u5Ws2HS%Q^mKXWT3XRf=a+TyLuL}-TiL;8T3rflgrx#TFj2POS!crHJ zgeWL1y53(}<#T3cdX=xtS6Hp-rPT$6hEb)m88e4fS638eR{07IoyR7Q@KqaC74uY9 zFq&0bR#sZ=E2>ts={}>tH@C=FNezRnRkKTreANX-6~&qvvQ$=8fLdKq#pPz8u3{FV zptM{X;vf}AD|Jx8q}XQ^7R{(OY&ji?P|=YSQ4(c}W)>C~bEDnmj+CTIRhQnt4T)1K zP7;+Ws;G=t!cCr5SXEW(tD=r*p#x`1j4GUosH?Ji28^zl`a1V!Wzm!cwAw`L6dDI=-R+3K#jSs(j@|Y+oWjYH2~IaaQh|qs&d(nd|dc z`?4!4<5B(9GZcB2-|)>XD4OBJ;3)U`id$$}lHC@_v^W}y(qmKDj1UrW>Bf95w5DZ%;zdx?w?f<9jvaTIi=<33)|43 zB8?nbJHBd@5; zDuonZrBzRw;aZPqxOO>Jjnh_QCk{%52}{?jVHqn!)x4+#F1e#*;WSIxAAn(PiXGbMzdR_2>PRyN5F!nyKjnu|=M zyKtUMv%jq%Z>@#|q9A(^QHK;uAJO1(_ZF)-W<1%p8$;*ZaTqwNQ1v^9%@KxFOES$< z4j;~zJgc&xdLEWJJWWP>yP%39wE|^BlmOYBabGkq2XzzT26e+L45LD`wmmEb8Z>HM z+*RbEEJROS)cdj7Y37;0{WsR9mpL(>lml#*T@2NcSE(;9ckYJx6>}0+Qf}!>qYFyt ziC2`gxZ)+HYEhNFp0uYj*Mc(2)hI00qa;e5fpwS1V|RVu3VS=|NV_n+H-r6`3kP11 zK9ILzrnVc`stq<`Jf5f5c|3a=CAR8|DBEBx|8%+6RJRmLaXneeTTQm(jPl%2#B} z_NkPg0fMpl>hsMnto&qae2SHo8W@^P+5K(3E81;YpW@kTe&@3{>Wv{*Cz7dVyZ?;z`j?yW=UtJLjD+LNM9G_7>-*uF z>k77PD5v%4^#XsC^@UA$?TtDdV#=EtdDY`nF1*A4Z;CZ%AaLDmm zcphr4GaJAbEF!Oz)FE36iHlEGm?{=Zq~7(|nn*R*FX8&@{aww2-W7Q%sHEBGYNmys33Ige3I_7pZz`^LLvQdM4NAH{v5v zDJ8Hc1?`z+jccO?VJ;hdDeAN*HZUObjI@fJb^g%v5EuvUX5? zXOg-HXlke}RfaUxs=C!wU)UqP!pv8910^()8xwhs(<6K3ktnF^v3& zwyaO~P=9Y;+?pWr1@?5IthSLFr>57hq28xa=QQx#EgMkIPDEPdb2WatVf-lDbBsXh zM5DcGf%MDKw5C*MhLp_RO$adrXY_8+;r}H9uP1xn{dJXcE3Uv1W_6=0U)|`JJ6AOuZL*TQE4up+nd`$7Arbt| ze(o?<#~8>KE&v(%m_UpoFGR<*LqAVC^m8meP<6|hM{t3Y95T9m;728Os%+-5xxil9 zo?I^Q25ztRfiM38AE?!Pvcn0UtejwOowN~#&4@9Fh{jj1$|@u0UckLP5I#jCJJr&=hq1?(_c5!W%PR`Q@l zRN6Ri(4yPu^FnKMnuSU^m()Eb%^ICJXjqDIx|x-{C5&7i^KL36Mf`6;S9eq4$Obbf zMdzWmtMN9@8lSwb3GU8nb>LewYnz$B!y1H^WBP z&=ApIxotFObMsEIQqcvS?5?y!I;sSHp>*i%%Z}Wa$D_<~mPdL`;wKpky6@U^zBcHp z*;;4P3#$Hj@|)`e2V0$7AK0CO;cuQGJfpVQoo%s8e2c?)aoF&Ui=X!bm3eM?O}Q|GlyXO zPBa_LeJTLJyxfLtn{tOs!K=>0B3$_bqB{>#r6t<6b-|*BYDd%Y8H=*G&8CNA+SG!c3Ywk5avMnH_+Z}l)eP{aq z$op&)yw2n}*`d2*ZcO*MjnR>?-IkBh7QLQzwkOw02pnuS1_TZs_6Ap?F@b~s_6Dzj zzG$>I2fpg;%$;o>RNV->r><%lwaDu143rnQqgGUE5+iq|XLc}1w!c$vP@mHW_ck%5T1?xR!i^n{p)Ck1a&H?SVIpbu2{Do7q|?jzXD(4i)OB;^;8X| zb-$6%Wv{d{{;S3smtcsUri_91H6qWirZy-N%`w!z$cHg&aIK=9yiSe0ByF|lJ+cTG zf*$;6LswTD9MfOP{~PDO*m<(GW1f^C#9k*z4CS16(JLG-#hah?y!+qt%Se>@_t@gw za}eLI>4AR1%8mL3{Z%`;Rn0!^(=@#M`Q?82cHT9kKIe4#3ZKJYqcNA&iTuUs>!ULs z^89~2-jQJI2(e^fL5dv*^grep7y;P#fgfAX{w72_uMz`5Pui~BRYhY-DrcP-`0=|N z_XK|Q-t?83&7rZ&){a^>BlXwB>S=b|dTjD#q&e%*bDy;!#qy^)CxBdzz2>)wy>jf> zOYQSnnTc=^uGni5Vz1V-yTeU(#fGuC4lA>dndICb@JDbgm_6!FjwrE3b+dkV)C>crWxE-@!1hT76HDBg~B3dRLCC)GZ7 zC<*zTJJvK$P|e}55brPwjp6_>vXXTWSuUZ&D=JcuIN>9dL%+&eO*YLasB-lHtrX7Y zjy4lAjC44G%R`yTGHI5@_hsK#oG0r+=SG*_cPZ`Y1 z2yZYQectp4{vmbKW(-VWr;&@8w3m3O(;>;J*b6qZ8fl5!<^;-W47KEIXK09yqO1h9 z{v{_P0eE{?%#C0;8iJ4NWoGTB5-&mz*8M>Uj5(mkpsN$T!LRVe+!jeen+8qB_YbHw z8Q7Wh?`>fwX8tZw7!I?n{9WE4nTk2cyecs?Om-eKQ_Nws*^^+7PBX`*gocsYJ<)wb z^De47z1b3JM&l^bZrD&j3VH{k1HxVL&pMjY!o7h?>Y$+sQgfCqK`5$#T!@11H|?Yx zz1fZ3K8SLPH8(l@D9i`#v#Wg$OjZ*|NnKO*Uh+89?RTSPH{W(M{%sY?;P_Q763hg5 zJ^T&5(1nzNPu4O%S*^8W6U}iwQ_LHCCiCf}J~Ze?-P4FY*-Sb^Q@nFbOl{ZpOyt!q z*}~Oy-r0bhyq3jk;!3pMwZ=Z?wPpN;avm>~4?(+Xq3qCYANX6Vd*G*^=j2;_R9n;R zr!xTz36FP0N0?tvtC~D=4IUVP^H7?!v*2_Cd5m3w`N>$?EJl{qq!g74dk2o0C)Y~C z+SMB*Bu@`8e)ZOk)uE{(1+@=E9pPv>rYS9=E%#26z)r z%*Jqo3D*1>oq}fGLVeRs4xr%3Xt5l5GiIIqXOLUC0x?rwIEq?bLem12c8UJ$b@C<9 zmU8X3d|}#EqOlyiPL`>Hd^k@Ie9#G%(~-A|cY4a+d4H=T{NFhgDoj_0N@wvBWDSip z983ldwl>ZV9854Srj4L;xbr!Bh~|O`Qa1mGYGXyQN=VO;n)ScJGg}Th2t^KxbZ4G+>5pf{;BOx%5II5xRKnVy7cW<0>+yEP-H{h zpf~(q(10@r*$1Gu?u_olyQY5LGgfArnwauvTEZ@F=g7TL9y{TaMw=XpzskE8BsZoo zSsL}_edu1)EhAL7oVl8MWDSisyIXovxAYlpoX+A?tR2mw`ec{vhf*oT=h7Ej!VNHY zr6(MxWu_fy!0-)avRkcXZ`rhphQyR)J`D*!gD)mI@pm{FA+^gJ#+a3agf1cBQEjch}*JDdiWrr_fp4bcg z7~?ZLk@giI7=x1vE)~sKhk7h5o$SeA66898t1emF*%Q7IwnAe^f(a6mJsoty>w6A? zjkB%pn7~fQ*_Tlg7@S~?*QcJRuwA5Yhdqooy0QB8p0%AsetERNQ6f3*THqbky5Cmw zvrr6VtBl+r<+JJ z=I)rIcpH<>gYz&J%>Fc?u*!H1AnvvcFD@0GR-2J8>s}$wkx!JW?YkT*6nTYRdVTFk zzD+X#jwsT|dP97(XwPyKWryhH+f=oGqus_eXM$>e^8HiJUdcJuE%V87cbVa<9zfF^ z_nflsAQOG^XV_y_kl+J=7EhGUjQTb}ogG3v30vjZY#bek4-Pc{>|MMF-D?%#Ow?Pm zo}hip%3JdTTEd>g!Yweb{}2UV?^By;mF*240;DS%bfJe;ySOdoXorzzU71EXmQo5I zKu<|IaISpDKUy>Z;& zDcfd`I(N!8I(}}A<7Y%|>Y50ACCPXT1RF|6sNUeG_}3naYOjOG;^MYpT3+F(dL7?2 zBORRNKNLP$e84OCXvQSi-)x{}8?RZTC}?A5d)Mz#zqgiRR@^v<>D!u~kjd68#XseTe4@H_AVm@}!9VIvU~hP`=jt;Bb+If*G&9_A}R2%w&%_{Fvt z|6sfSVJjA!j5oLt>2b{lXBbG5wnQ*blc_~E;SNRCW^YX%Dh}L)>9XDGo{&5|6j_@` zQH*?n%`e6|Vj;Sn%?dEL+ShN z5SixC3(4_f1$kWHQmjC_kyP=*`jDI@(ZQliYT9dR526LveC%gQA|mDrD}SS$B?aFi zJE}JahX+7^Dk`>5xQ=+_vx$#<47Wth#=Kt^vByeNL(6I%v5UIG4}vBU`Q3y_Z{Zq+ zAULhRF`?gzuKx~D7jI^5Bg568D!(u5MmmS4#v#)6F0KXOXjkTcxrJ{P}=qW%}63qGRLT&xBtzPrYo zz4oM&PWFW_F@P_;5>Al}`ehV$mdLicOKXDXL)@l{Z=sS+SjB6Z`e--Up4_0nUr5%Y zIKigKF4Hmcao*M}x#?OOXE)xpGE?cQ!jyGj-yG>nch*=RGmoSXZ%tR^)b(#8oeZWa zpha7ASrOsS(Onqhjs8FIV!8wiJ$@pAYe6;tVzaf|cgKT*fU8}s(McoC)JfBYLgKfW1Xf7vJ#`FPClw$G1; zK$Uu!$htjz4t0@U6kmgH?7wBW9gnXv1ls^%pxuZMz4uLHiu}=!B-=thKVC)fI$T%r z2A>72U6@SEnK|%@q$HZb(D&ALDU{)6e8Y@ik4;A2v&^w`y+HK5RBVGG&cJ0vif$8d z)?{@Y{19!$c!LrAJNTj77=O>X)2vMU>Z0r;W~W(siG#1kL-dH3_i|uCvbCR0xzFB*`R8D&@ul|edJpGlLL1XWVB@z| z-jRegIw(QIAJSMbho?lohQ7>OsM&UdYrNOz*Rb1AeC=)LqI>`XF8Ed~0$*JVgce>|cgnVdx8(Vt7i zB}AcNm=sB)Sovt<@YmSU(aLB$3U4BN=+=`J$`XY;il4G+p*Bi*No_`cHE#Pf9j0k> zL#Pdf?)1lOj&hRf4emiMYr$^570r50-%?k5y_}`KZGOjRskozhqY=(PN)s3hyKFUO^*2< zdnY&-b=Y?fw*2@4>zRCS!cKA?8z`wzH#t+|lG^$GX&x=YS{+*0j37F2Fv&OqOSN`VxIN&bk0=(UG_vgQMijY9}VbTIl5ObwoLI+W^OW{!Z2@$a%8W zoh)hVS5Pjl1avVE1~&HLXC8?B0?5vLD(g^NGd+K($GEkCY{xnctnzC1FT9eDAyayq z;~Sfz9n|kjZwEm`{=C%V3wP~GA9NyhDnl`mYpu*^4 zs-*5^T1%-jOS&(Gfb=r7Y-u*`N1yQ9LTng+QU+q1EnRO*RA7rAonQbj(kqf39GfliBt81?vF7&7EwYhnYLBwQ@NOk{H|m?y@C+)2v~MCBhT*k%b}o_hA^dIC zPs$EB3UFN8imX9@DP78%$S~Lr%4_E*lAD@CYjIe(f11@E`;WH;+zriz zDvRWRB9uU;!Tu37k&QaW`b45X1Hone(M@LCsM#E03@8s=N5xaXR&4ow{{Hhn@SOrA zISb@H@;+n_*bl{VY#ZKq#eHB366HSd%W#X-TRl(+(vjhboo7PS<>w8yd+0;S#b>b0qGk zU>~5ei+Le^UqZc2-Ea@-%`r;y(zlxzo7JGnj_}oxB}y$2YUCm3 z98JNHH`oVVL2-dM$j@281z_7|B(Lr}(Y7|?0>f)w;J7G;dyFIb@c3U?r%<{#cmRd0 zE9k(i=4ZfoqlB^@q%{05IgUK~Kab|K-HCE8YSgRGWW|g>#W0RE`WGS3uNou9Omkvt z_#mQV*b&biQEk+zouTkYlFpZt9A;&vhSySD%^e!~^2i-8UHN*n)BgCWboM8XxsT$i zR77uyHT$ve;oMSg;ZNB-<-Sk}^)Q`y8JFP^0jo8@MOc>OP7;CuJf_Y%1aZJxWK=^$ zE$?`1Pz^8pMu)Rpysnn1Ap~x5JDWu#bNDN&`)^!fBXd%2nocIKp?4oR<^~LcqaLJt zgA*a8S)GbUy$~9Yb!tFHZByz&Y?6M19#liF#pyY_0A3Me%}-_-{w*?NFEP#xD2iDf zZMJ(3)QVXa&GD=3KUOh0zfdtoj#-^%o`y}}N3dFFpBDaHBQo`)s$&f@*!KwEC(x*MOqCg-o$6a|as7{U2%BG8!+xE`-`aMUNI}%!;<`e-&s9;yPV{ zM&8i^4eNLs!gOtb_k0|YMy@;3u>JX-c=LVBxB}1S?vJd;+=1|-ieiKo@kQN{Cj|*G z9*-ZtMB|E?*jM1V0(%h>iwr|O|B3C2_(4W@o7v-Ph}%I1)?zx$=NS##?=0$Dj6{l8T8wYLZ5r%C8SIzd==TxCv2u2j;z(Oj5z3;S!7m9Dm=Puq zelXM;FMR&oa&Mj4HhN)?{V&oY|17D)6+H;5Fa3%Ag*a?eb9N}Jk*cNwYwUD+ z`wV56@B#eqd+1BK%9ur8ze0bhI7Te)&pNJ=@6o-aZgK%Ijn}*#5Re)R7R_gojntUf z2=(>fj>aKK^nYb<1)Qb`xO<)oS6xGA^f)KOO`JRLCzzSidt3C%CG7#(&s;~AlAPc< z;62{9_#Iv%b+>ahki+NbMkykJOP%ydIINvS17bkWrh_|dc`hPO|Fpk(YqF5Oj@BCC z!9dQ^6T>}0fmq>6;(=1DP%4~8U-mYo(QbCgnV%liI4;nf>aC%h3aEM)J{&O|_Al_Z zi~WW}g}F+FC$vx@#xr)RP$xx{zrmm*Rbr(3cR`*EXi0XLuE1?nJ4g$k1mU13TOt*S z%Jp`XlzU;&(DW8Lpd=)-gQA|IYN4(b7}8XyanjInXX90A3C*~@3l*&RJ5(@%^^(?G z-;bpd_ajBd{B$HowmVgm$IT0O6V-jl>kDUkb`7~PTYLLOd!JG45Ir-(8=xFRD*GtU za^>K7gr1P2bCRao1CYx3EEhj>gQyrwpegVpXyM6xv$!LkwdNt_Sn|YmTzt{!{A2W5 zYJ0=(K5vjFrvHKOqWgH%tR0z5N$2d3nx`L=EV;4p3uOB(j9Q*m=O@)^mkKg@_!)dO1aY%oVH3}% z;VeK_GZ7}xVld6GGPqfAiYJ&JgtQ#I4XOZs^R$p z_iMOLSpll|l{uDAoO*5++wfQpz3Xzqr3{)G-L3M_@ZTEpWK? zoCT|~P2W6d!-CY7b1722i)o9AAKD$X;igY&Gdlzhwx2z%HuK-~Sz=DvT}uzj@g0_0 z^2ao9ze*2{K~HpNCwkfqmonTe=tFG=@#eQ7@4a}2g2Z)fD2J;d4EgJ<-Dq-igkn8l z3h*QM0ke#emt%@uhs>&dv2${kno#1-$&b7tBh~+vYZe*em_^=w3**-5Y3;dn23j@V zNyoGixd(FEv->=IzVM%dvp)C4un;VHDtUmqsS@A#Svn`PY?&X%qivX4*ZhkLIMbt3 zE8k@59`1yk(Y53+)x%ZCOn-$Y=w ze{RRg9K~J4rr%_pI)_JSju#Z;Zk;+#w61n(z?9QNQsY?ofrrTte~@|B=>7 z)Go00OoYL$rml!y2l@ws%@Wfo9;R6$pk@hKd7%b+eK3URZO&J- z#ML;{=cP)Wnh#!d%m;sz$>8s*|4@n#rSG^{%|GwHDi>$b9>|lG*5XNHX(xb2rh*P8BqexK4lwT(N(#dkzjX z+wXtTC-%6z9i9w5@p`=*iyj_L-zn^%p2jvm+~u@SsH45X^N?g$6h0l8@4P}1@jtot zizL-ELcC99zxy?67rUEQy-s$qyJq{`-ne;-3w(IrUhi#oI2qMvRwLin#vQ?gNI1R$ zMb(dNihdz<<*5TSZHJ9=NzaUS?MUdpXc0U=lV_DF5u@IiU0 zfi;`&L%#~;kz`NQE=(hzJXh6xw>6Rmcecf^_@x~m$dNq8>`b|;s5+Q}w}uwUq#K$9 z0-I878UBi0a$4EJP)6!5OATKFjM;5a(!yM8BE66CYTA6`0FzqwGh$47i#W;|qs;O0 z9t3OrE>qr_f)mdntbrdkumtdM3=>zusUy%837Z5s1gw z5&(OQokgvpC@q7>n2{yJ_hIC~4hS^bk;Y69lALmN)!N*ULVj@iPEw`+CiGwQ*pBY4 z(m=h62dYu725Do{YD_@32Qms=-p4UOSFT5-z5-(}%CY4d*KsAL2Dv5fw+4piLLsd4 z$P;zZG1b^K6`9!ALaRJA9oIV{xM;J(N#EctnaHG~MJwL*FeJZNgx9vF8 zKSK0+x#*QFHI7@Xf6dl!XWO#`M7_x$v3hTeYT`(`-Q9F8)hG^-bQ|CKO+rP-uG`+o z{U3C@yD1Tw#9y7w{>tAGFXzy1A8zUtveKvvi+p|rCBGK6U3wP~9)7?e$M~zA&tv~a z3ZLu!L+~Ihyhj%L5eAw_TXdJnT)^Y6p~grpf<)@VZ$U2DgjSvwrB zk4TQZZqF$6yo55=9Zl^~NEEume<^}jn$`}%R;;$NFW4!=YzrrICv8*FX~0kGpxe8m zSL7O+!k}3B4VX{!8|=BLLCr;Y2DZ^`6|R8%=+m*Oh?R%c4uij;mn9>=Ietfzi4YV{ z6Fz7B4x^9FLCA`+TzEhjK{7E^4n<-gRgHaNaEG_%3FK||iX)}HjWuTwXL;ic zWV#icArrr*k)0~PZ&X{@Fzp;^MS`l^f?G`0oJ;kQRGr`8t)XxpT5C=gZ+$y;a%a>R zz65fJ2u(@!{TzJPei!Ss6ugYc-fE+`fDFXy-}L>n(B}qtJ)+U0!&XKg=pJ)4?ToW_ zB{cdHUroHtzY%X2zw_m!xhs;bktt?oPfW{TfJvA*lE%%=_N|r> zzgrv>51wyLLxWRE`FK+eT}4W6Cg9peP z=@mxz)D9l3?{N_iyQYI+@cXd)$n+}>4H?#2t(Q4I|+ zlE{{l7gj`@{{k_>ttQ$&#v7gj^%*KF>6yylZD8+7Nt{eU!sb`#A8RORco~zQ4+9A6 z?a}p#c}m`s+q7BduGeNQwu!PeEjZuEsrDD)hBD!rfHex&3v+^4Kv*q@Y2 z@oi|NtReCBJctrlh-Y?c=8#CPQbX7AAmZ^HXB|mF6?_`Bbaj_-KYT&FOj>G&#?aft zyOQG>5kW5z&|p|-pf4t6IOb6fF2$| zWaF;#r@x}#?DqLrsOn@s{{?)Z3p5lP4|EZ`d0Wd`e&?*^NmYw$%-9c&d4qJOd}KZA z_ju`MO*E%8Vii7`*4Ff}1dSsuZ%t`Li<J{WsqXBAzS@;)7oH=nXytL_JX1MLosl zt)aL}b)M3RaosP{1?|A}Il3;)6%LI*N&9s$0f^!l`B)Rm0dn|Ei~vj?m_B6RMLk>R z4d#L9Qqy{V-IaB)df3 z8hT#XUFsT)ewsv~ws?=4tv~@~xBNV~dM+?m0mrneVTJt%Xx)2ru1L~KUn~L z-L=*f;f@`Mry<)~c>}O8#G3-~s7>qH*YaoL$vY4H zJ@AhN67&FkespMK9fW)dbGE^kPqk#X7>qsHO0`M}2u}EAB1UEU&hQoJL&%AqBH69X zA!^p(7dqkSEP>B1cnj#hdNX9(5AsuYg)#^5bOT|23t`YqI_+pG{~5RRcZT<&HQL}I+u82>p0(NiX>!3XT@u8o*$>;r z;$hT4Gs!F%Xw4ab3!?Nx0%ZJsBEtB#hmAFgI!-Nec{37h{98k#q@PBy=#q;^ zO`eR9rj?i~R7+mM?G=zCzi%;D`cs-3{(LO*k6i1Je*nop0GoAf(H69v2_m~ls{09y><(KEg=on*f)5#=0EWjJ2b8~C-04#t8$fK(G0gwq2s3OH9Kj-3z z+Gs0^V^Drrtj@|9f+w`-RJlG--#YRd5bjgRt9dAvbv{{!7g(vmME;`Dwzbp$M*ffN zaCRrMn{>3mS**@IN+?SQMASoCp_-glPO`(b7m>S)tyUNAHmdXUh1t$3hQ2 z*4f*1+;c8{WDG$6h(2IYDJY_sEpZicGIb#8fGsd7)T+ z9L9iFo!@w1&ONV4xVM;6sJwWp?$KTHvSD8I=E4rD^?9kQFg`lFpk`%K&*9uDPcpLrEz zit(9~96ob0i52ykmph~!Pg25&F9Z#I{|V==`L>G3H`l?}WP*Z|)-|vPAlM5WJ4dIK%xg>^4>f)}ngj7{5crFBbS5dUC64HJ01t zUglyt9JIk3r09`Wf7pb6lvd)jK^z=K#4)fEZw>7=Tf;GS8kH}J8F+ZyX&nD7qM0v} z;Ia;!ksrq_ZLG{LW?QEOlMsx^9s)mQJHigaURcdy)lm4yV=PJDtPzSnwfk4N0w*W@ z-U+`+4E931JK?XnZ$=v@vvT;AJ+MpmoqRljwHNPNi``iH+YqwssJ)ua_99ddiZz_Q z-PvT9nW#=U(c2d5aIjRf13+F1bsyIi8ZHJtTpM@?k&$DI6Mw+Q*9&%BD`LEcVk8r# zhqLiTdZ{}aO(Dd#5>tr>$Zpr7W$4`$-`Nxi{8()Tob)f{dQ zu2J>&MVghh%DbX7eoQrgl{YvE9jtUviz^LwlSpUm_K(oN_^m|y9%CqLmjUr=$8R;q z@75Is>3%dDgL=gnI<+mho8#-5jJ3%|iuddnkY!ur>uIl#T8fqaMqvcUK)+-MLnRCT z!;@&r`+B2dtgyGw^4IfL41VN}sX2Ig6iN^`yCTNf*o{e}9d2;c+XSP)HbgJl^Mu1# z{;*k*D#OpS?L%8Qn1#B+^fD)oHIJ!(Lh1zB$l{~j1r1Q>e%zo^a`Ck>iCxhydj3R7 z59LEU;elKq2I0Q|a6ar^K|CTaQ+II*n-j7}p4EGy7^5k+U%;$x4Qx7dDVWn;89mSa z8*QaA{24yw&5U@>QgqSk05KEpRRy10{qnqq|Ehq)!;rFN{Byol%rGiAU7e2Rr0}&+SERe%bqO;5e zyJ|5VV52!}^TA8V$?bywQN&{IU;eEExBWZFqif~NpQ}Qtt>r<=7~ZSM3B*e ze_sjPq4v&Ji?R61W6y^XDz}cZ3{&SC_ zYV5Ege7x>4sE3!X15uA{)33oC*rtyhK4PzqF8(|1+Bg{|IETZ=cN%BG@a!KAJ<`tY&PULT7!7oq6&}TQF1D4)Hr%KL#pbd% zSPGiGTK*oPpS`hlM(jfHUl{PJyAFlLNIwIO+Y~+$xQ)yimh}>Ha$}t4 z{4mUUEt_)_vMF0u@64M(eUL;BnPQI&Y@g!86+T0vGjiT7cDirfj`Pr}m{IQc<; zH2ne9V=u^CLyxRt<{6aWz3UZpiuyqmR>riyN!bn<3-;BYD{azAAf@l8b0l!vw}kTr z_kq_Sz8~cccBS!?*UcK+#T?UR(5ZCd=MDagD$DC)jqPTR>4pKXenJDsC3XW81usY3 zg-t~KRFdp(n+Kv-0x-T=W!69!&8kkN+!PzvULjY&b~Rm$z+29=@#`UUZ$bT}2pwmp z+HAs`kr4A-flH-KK@9dANXoTJm&t>0BmIs{p2M|^6sdjGaT*_Ta^N{q(b?ox^ zt>)p!VMX?PZo)qUN001xHC;qS^68xhF3qsTqRbh>nbJ}uXZU4sP>TB!mTFgcIgB7o zZ{w1*{^3u7<(&ShI#`0)iEJR8#InE$%uW=^g+D_s#9?%k6KjhwoqjumZ>Rw;tffP3 zbpy#hDTn&nL1WDwPx z^glr(5wvq{nz!aG(k6Ea{Votj_*~jx4%z#i1<(~je2A1!h=y^abUH4-kT2D}S%xn< zHXesNF18Ou%ciheC$U-=qL=LlXn$ZOeS2M1`V)gC|h0a91=ew54^TQm*k6dgov&6o=DK+4({ z4aKfO36a5GLphJ5TP&~mfsLDna^}B4!et+;P)Q^RW>t}p()Z(UlcHt+Sl{F5XI}W0gcL zwy$-4yiX>G^I#8lm!Xm2?)ZxLC$W!#_W$%S#^9MK&haO`$Mgsz+Fobc7gsiVYci0x zxdUICi@bnmJ-%LtvNBB68W$7FMq9C$Av4~C^Dl4 z={6hJ@vF!tv+2^i@NLt*4I6(j-Tp9Ly02@DQa7tMHmyMXC|-Y~G0@DHz=k53RM=)q z8*XX4;zPIKY>n0h!OmpEawAJ#O>W=HN+BDDC-Xh@A8gqE?ISsdux(f*(m|uF<6*|m zpm7p@D}XAXeuX9Lpix`$5cr9EwIzT2ptj_1P~z8FGM)4P2TN|lRccFS+o1(YjP3AU zbM-?B_ACP1*-W-0_pRV7>8g5t)9H{MjSuG_&1K^`R$Kh8lQA9RVw}tN)wnn<{0-R; zy))3Z{m;G?+y4o?9Jap)U+wudV!GlLKE29NG-qN=nQ(0H&Q>L;zVJ>PaJAq@>=+g|)1I|Oq!FwKs5Lg)b zKj&SI`EO1mxiTX zPYio_S@n)@Z*UqC&HSadMLuqSK5ykOwOZ30Bz8Ccaq6Qi$p#DMjRZ=<+I*=nLySxA znl`R5sK2PgAg6WAa$1Sgui^24QfnupJhskNyjdm{!mo3c{0*94r9{c5r;C>w{h-$q z=+%QpdyDVpBYqPit0!n>9ZT$~Bh(s(~;+nO4zv zgA%~-3L4OR?I?asWa?h_ldm?nwI=Z$Q~F77zIjd?KBTH!D0bzGm`nY);nz0E?PZYL zYdsWW^(Jrdc9h64X;bRXb%3@N%;Y(36*ha!1>0(|vz5OilvOXYH}<(VMole%Lb2Wc z3rvlFh6Dy@W^Jy;V6;u`hC8W?SCQ3ydLNn~53kWYs;zB`ZPvD#t8H0PZ4QN4OQ|>+ zG&Y{d))~Xt;0MXdlC4Sh?v2~Tn*Lo&l{bcGK;?2VbPRQeBUsGAavt{N4c3D@SWR;# zX4@Ty{l59h?D(v#Wz?`hD24Wtx?(4S`r&-^0E>i2sW63~iLY`)m3QIDNE*o@kAFP; zCM?HU!z9!|+eZ?x--vZ7Z1EM6(XrW%j=`Z6$NRRW+q3*q{IUx2Hn)?zsW|aj-juXj z*WmC7OA*V`)n(ez5BvyAJ^@vQDWtXSBohLLFM)JUAGrYb3I|Cq85IZl9Yj$MGUnM{ z8gsiIrSZeDer6($QOGfDwrSp)FUcah)}@7952F=Fv<4aK5HOWHEpr9dXznaQ9(sQlT!aHF_WD9%Y+{3%@#hF1FygYu}o(xcY znE{U4m%RwKwl6yXXzyk}#rL0XLIvu$@cQ{Qk;wF0%Jy%udukF%IB~4 z6;L&2^f^CXzFB_5H@Cp>RT~8m(KuSxqKfk3g0fQNJPJR~bWH53<`A1>tGc?fv^;+9 z4$$>d{Ga3*gMZiI|1=N1S^f#872)4{{GaBb9|?Yq5v53pzX7dh8vVYZ(5Mq7-^m)$ zp7aLJcO8)An+>#)X*2=8&WL_Wi%#~_JllcjEhTB5b})v`jIPyau}1F#3FjYx=od6l z0yCnZz8YN(B=rU~`UB8_hZW>Jnk~)fjr0jekspB!A z*SWTRK%&34$v8@3S~not6i)Lj0@}prejw5KexNs*w(vNm$<}yN^=77B4kX%LuW5TV z?RxCmK8Jisp4mWKxx`{ky90m)7J;!CI0KLWeRso5IwgX9te*itl`I>;<;(Y%GlD2inV35=^fuy$4KvH(1MpJaY zX+XlIN~Z>N>TN*6~{UsW`3-k`tz6RRH=#WnJoaFJm%e0e$q-++Dlqdv}60>xw0VE|J0-`7S z(>#CDsT(xfsnH>zmB^RmISgd?Irim+))h!vbUBcW+5#Za)l)#Cq2!Yl8l+JGNP6LE zAkp8e8XeZ??5?Wp`9ObXnJa;$#G^pcAA5mzaB9&hs>H`Y(%vtC=s~VD&v!uYGonfU z14hRIH89Ep5`NbLN!cPGDO&*~Wp4nIvH>6|`!}Eunaf5X(Z-uVA2DsarnNfN5nl$BI!&ZDO(RDJ^i81_l?eXQ4dw(F(9$4 zr9dL-OPcm7kkt03rft)-&onKpX`N43oU1f4fn+XwOVj>xhHB9&AgOngro9Oy^>#Q@ z&1L<7q`g-GNqg_pv{!(n9rZxMZ@Z>_1SI^r_f#6XRHMZ}8$4vEbi4CoMjrvm=xzp* zdOQ3^p&X#+kT1zI5lCvA544nNrbcx--|v7#f~SBsavg7L^a+rZO+HJZJAl@5z9m31 zPk##ZI@7YxR%i;4l&#X}CLpnwAdtwnLepLZ5?S5@lCraUsoHJXP0ZG|LAnBRJb5-hZ zfF!jFNK!2z;qrz?$$eCb%Ya0_ahhfUi7a(MTUmm?Y1(=qk#9GUNOk3Tipx|Wq0Ipj zE;jp`Xh41(1|IuD{3g ziRc+fW|vEVB=t^>nt+~0z9i4TG-{i!XsH^Vq0xCj&vA+KfkZ+1 zsnO>eMS$J~mo(2lAemhb1Ig@i-1%yDIT1)^m$QI`-vt_FX>^4~Q#G0iBvMrZiPmNV ziPma?L~9S~e18BEtvwASTKf}_Xl*5sXl=Eo)dPvvUe~m@fJAHCHSHsy6|A*SHSH@P zk#CQteGeq9{8^*q3p}1>Ts9SGH*2jskmNfH=rgAE(X=6&HdE95KoTF+YT6STy$mGQ zz6I#-%&$SG?$N0~>C|=ulmsULNjo|NeJ=6=Nqf)Kv~z((Fa0%bAdu*9sHSBBiJr%3 zS}xE^a8B|}(zGc+qJs*JZq(>bjqcazS&dc!iOg$UFeiEX?GB)0LH&i5sd*v2rn>0ZBdsNK)?tlF@h{kmzp-kl6DIjb7B~bs#D629Rj? zFp%h_O@=}z0!iC0*64DLCIU$vB|uVkmPWVhe2-}KhDOFP)s6=>`VvT5)N{CM?*t%` zpcF{z2x!{xG-?78y_}w@@|_DLWeb2LHK5U3KpQ+Xcefg$YC981>KF$k=yMcuB z$2#>Oko51rfy5%(jaI$YRihpn^#hU;1AxRLCIX2zrfBqAAZgnJ8vRkDwL0JH8hsA* zG+LD8`Bvv^b-CiwPa_LxGq?OTjoOV-?d=OBsdF^#Q=lzeqT5)7`e^ibpqIGb1|ZQv zMAP;HNh^DgQ~CM=3GFIPyH3+0n)W@=R<8H>@v3YmASr8T+B{9WPtzXMwAX=FvwUv= z3BS)Y?Mt0+#1*RLH)ym8NbF^=rd@WWqTK@|dRe2<_ZoG~Rx)=1l6w1T+5n)pxNQ@F zMB}$>^mibs_kgBlNcdf;X%m2i-y@o~MAKf?wAVDvldohR1@t;g|1Hq_jM_|8 zQRz$|(ZK^iGDCPLsS$9NM*V=^<+2w6y~k)cknkH1^a0Z*0yQvN4kY8~MW7u_`w-|k zpd`;HK+?)@HSGr=Y2}HNRlbvegk}Ose}sX)WPT&BQf<2mXeo1E2_(JM1hj@}Ujs>P zKLCkTbyur=4{5X#NJ^{*l6n)aQTaLoNop4$NnH#i+Pzn&KA=-yyjGR{TB8FR-7rO! zO}|d%8?4bhjkWNRah zkva)^2IvXa=}SOg0i}7~2Wnz8y;xb(vp~{YhcvB?PwBoVP?$@M*0c#g|72Q;rd0rm z)y)ACs|x^$)!hyB0hf3PsDaTBK+?a5fyC-AFHy8yAmMj4knk%35`KOl;kOV-_}vEd zG&m=DR%-MrkZ{=mBwXGB5-vM|gi9lka5-_h;xZmc%1!{1vQvSi>`WjjYXC{v8lb0H zf_pW33P`vt2NEu;frQHjAmOqVNVr6Rgv%j~PMV=;J%NPZxj@42Vj$r+97y<$1rmP6 zKoQpX-9W;536S*QGn%#nNI0(s63!ceg!4N>JGGrYr9m_#sUfF zTp;0G2qc`#fQ0j0AmRKzkZ|4&B)0LRrX~DV@oNtx{7wQAerEv*zkWc%Z!*w7S*j|a z=eUpN0Ewr$P19v7?9}TYE7F4^cL55U?+8?h0dV}-53iLLkE9a^HcpOODyBtVr zTLUDLz6K=i-3BC*ehTyfbBO?nr2hhvve`E%+b97NS~ZaHn-3)X76S>t-vJ4~KL828 z*MX$$@$;3WbAUwpq#G6L2PAei2T0m+Gmw<61(JGy2PE|_1(JGK0!h8=fTZ3nKvK5X z0@aQyfP^*)Nca^13BQ>@!fzgs@Vf;__&o(AW#0u7Nk=YJ(%%8J2AWLr+zlk7C+#Lx zqPIqwKwDVjy_0Z61@q|p~ZPq5720ZF}wfkgL7 zL8bc>fkgMG1Bvd>0TSI00FtuPG@1z{T&jSi2Nwbf7ZXUh+yf+BRsac?H-SWx+km8P zUuoJNAZc4djmnn{B(woQ(#m;2jjXjl=zLG>d;@P)`LZ;67D%-50?^Z}m-Rr>jyHg$ z9UlToJDPx`9X|j`I}QUq&1L&6R_H>@0g!MR z3?y8}0121LK*FUMNVo)mgv(N()!g!Dfwlsrd0x}BO+eD}13=QEGiz0eUO|_ zN$&<)&8_@BkhJozn)Z^;*97!7TSU)$6qnvW!lejE`rHB%eswzaU7&ZlYy*(Ayb(xb z-U}o$9|97YA8D)Rk9v(#z+ov%nyOLXlF~9CzR};|W{+ojt4g^b+qX!F_P>etXDd$+ z5503R-d}GJd*Xl2!x={4UxcYlNnlC={-vM)r947GAmhmfjF!3|l({a-pFmmVqSS*j z8A3%%QM>21aZ>hzvOLL2K?6NIT$D7(G8!6+@;L{T%`VENpj0M1^Av(I*F~XQue)6o z6O?hsIZHhTN}Y>B_hL7@C?A4y&_($Hl%DOJe7vopF&E_=P;PWlvOrnpqR=hdS6!59 zQ1-Ye^aI&_+B@s|BPiFpC~trgbW#2Z%5oQ_75b{dML7kOR2X1X&jUdj=%VCRMtGfh4uFEH_|`fg{!WC& z(bz$QZR_m|%0ZB#?HUeB;|Wg6)u8k_(Mj=xa;=MUFDOA5Wd$h9U6ie$>~K-O0_A5H zr42?v&yLQz&IDzgi!vOP$u7ziP*%Gr3qaZEqC5)9E*IrRP`af#>)H;=I2YwRPz)C( z731#_7v(%qwz?=|KuPT69h9Y~Iw`wA>DI$Z*$2wcE=n?d*s9Z=dFajRJo?9kK~Nf9lt)3?b*?kd3Q+p@b5dRhWp{rk2a}>G82>^Tok%Xzh|H`&mEv#JIG0S43vyZ zoRnulp|_Ng-w+8mfkH2Mic&rSWwlKqkAodbP(}=K@}apRd8m`p9v^}`4E)EY$xRaD0_08 zlvKLP6DA&$%a=s9hZskr&4k&#poRk@$45@TdZUCicm6LKCD8+`8@_SH{=Q=4*f${+M zx}rM#3zfnSQIzsJC_5H8DIbH5PgYn_zAM7hUF$p!_} zmm?~e1qz(8P3emV$0T?MmR zmZHr6c5x<3C&b0_$E6B22ft=BeA+-R~|~K zjG^2VL%Ao0vLuGGB8IXthVoGi<(n8vYeeqyr(`}UhC=HGcbmV zQ2r1@Ss6pw97EY1L)q)16ckkZjNi_xbhpCO(b=v7-&}fJ*ZyPMD61%+9#g7=s}yBF zErxQQi!vJD><533{9JKH`uQqTu5UV?YlDKo1r9DoGuXwQ6>0k*~U-sG?XiLzc>_3Q(&ns<@n}g@jeAW10?y_f5}0}_s-&1JO=J|V^xS{6c{-b}!jYF19;4Z4k$9?& zrpD8)E7h3iw6|yy*d8efJZF~Ty#(c~!Iq+;U`#4#P?~5T?^`G?^SKI_`)3tI$G9tL zPHB1c%?eNjhH$)edY3{8T#&yC-oq)EyzwB8(K-@hlw5V;# zag8PjP^*%Ef-13LsdjEGWzrU1i4;i6jxI$XrRSdd0tNa;eS@OkH@nLpi76dP+}Zit znc3ycGFS_0At5`=coT|lnb_1JTU8pE@miJ@*l?P=d7*lu-s2fQHpDN}C6=|QmiRTE z2#tU=Lfl$}<9+Jur}Kc5Wsn&V<^&+$JeRVTrw5m%#!OdR<~aVRo|GtXlBGd-6I4;B z&}L+n@l&o+9JjINs0gwG^`@IUNJrK~b&)Rq2js(ijv6deO?}K*wGt|m<*LjuR%cP7 zCHe%(Zl!@igS+dCCC?hF=u5L3P%~?QHw?I$c=t^aG?_(XhU&E~NR(C8*8p?L3RVsG z+^2j5IeW5-GSj}C=BC+nxq4({GTYGHfS3NO6hhFTWVSL=JSQ0uTW!Z+E4{m?L;aU8W=-8eXejdHy*d<#y_M*k(R9O6NiZx7d5RR z9e0iQp}vRd4DY-pXLv1*p?8m_Z^t1`x2AMPqo*K+E_)hS_E zHT9S<)~M#3Fgr0bTg+p|Y*h0qP`MUCTu#OcI>jMj;`@FWKZG$>_0y;@qwlAX{Jvlj zKWc%s)cd_KwAjZFQKAcnsl>I}JL(>a-)DMtrb#!aHRsexnvLS*ZWf(S?y+A>7Eq$E z^;B_TitVG00&S~zdrL2`-URtCx~FkWBlVFV#@N;yfeGq&vL8mlL(~G_;Qu`VJJ~!2=b)RiOB@- zGRl|p$PAbg{3r>l-q8{(SrS&=K#z(tEN$4mvFVu!yqp305TTAvlihUB)2sWu+vyx0 ze%tAI9{%An-wHkSyzYJ%-@JZ)Hr(P{50O8xd2jBvw|28UbGyv!3(e(>b8xBMlPTgrG(@EcooIPp6z@TcH+hQ4?Bd}?{)7WdpPzLJsn_&%0P+`X1_ zyt?%9`&LeH&+D)4fBvQ1kL|9q`~6;ftM?kVsXsHmGyuOsGKnRTJ8+9-CJ{I%ax2{N zK2w~I96;+A_#DWD`pW|Et+z`20cdi$Q9cXsi$R-^xm-X$YWz+-8OszHkpvO~+fxY{ zey>$}2%1O0pUXaAL%=4$4)9rl&rA6P@-EOyLA`{m0``c|&P!?g@(n1z)9;S`rVfWn z>&CWDC6L!ncOcIoleQ>SQUYyeuz4VJv}uE)HlkDM1NKU3&Y@Qfd(x_;akAO^Fl{1V zLS7#uoP&1&+Eq=Oz>*8dO)$n0aF&p9gSKhiLYGI-(7qnvog%q>I>j0nhBf z)*X!^%Ksd1^(a5qaU}Xp_)t#4d&pb(`fKY06OYuYfR-<14}Uo%I6LIB3uzH3rWj3u zma)Pfu#_wQJddq9b z@WACg@HrERgEc@oUa5y%G*q*U{|khZevA>&?>V@04Ane(y8Y)i*9Trtq`oR`0rHVj F{|EK6zwH13 diff --git a/deps/pthread-win32/libpthreadGC2d.a b/deps/pthread-win32/libpthreadGC2d.a deleted file mode 100644 index bdaee8a4c660dacbac56d1153a4e353e96fcf906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109370 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 diff --git a/node.gyp b/node.gyp index ffa3787da16..b1112adb08c 100644 --- a/node.gyp +++ b/node.gyp @@ -72,12 +72,9 @@ 'src/req_wrap.h', 'src/stream_wrap.h', 'src/v8_typed_array.h', - 'deps/uv/src/eio/ecb.h', - 'deps/uv/include/eio.h', 'deps/http_parser/http_parser.h', 'deps/v8/include/v8.h', 'deps/v8/include/v8-debug.h', - 'deps/uv/src/eio/xthread.h', '<(SHARED_INTERMEDIATE_DIR)/node_natives.h', ], @@ -104,19 +101,13 @@ }], [ 'OS=="win"', { - 'dependencies': [ - 'deps/uv/deps/pthread-win32/pthread-win32.gyp:pthread-win32', - ], 'sources': [ 'src/platform_win32.cc', 'src/node_stdio_win32.cc', - # file operations depend on eio to link. uv contains eio in unix builds, but not win32. So we need to compile it here instead. - 'deps/uv/src/eio/eio.c', # headers to make for a more pleasant IDE experience 'src/platform_win32.h', ], 'defines': [ - 'PTW32_STATIC_LIB', 'FD_SETSIZE=1024', # we need to use node's preferred "win32" rather than gyp's preferred "win" 'PLATFORM="win32"', diff --git a/src/node.cc b/src/node.cc index 83094fa9972..6dcdfca0656 100644 --- a/src/node.cc +++ b/src/node.cc @@ -141,10 +141,6 @@ static uv_idle_t tick_spinner; static bool need_tick_cb; static Persistent tick_callback_sym; -static uv_async_t eio_want_poll_notifier; -static uv_async_t eio_done_poll_notifier; -static uv_idle_t eio_poller; - static bool use_uv = true; @@ -306,62 +302,6 @@ static void CheckTick(uv_check_t* handle, int status) { Tick(); } - -static void DoPoll(uv_idle_t* watcher, int status) { - assert(watcher == &eio_poller); - - //printf("eio_poller\n"); - - if (eio_poll() != -1 && uv_is_active((uv_handle_t*) &eio_poller)) { - //printf("eio_poller stop\n"); - uv_idle_stop(&eio_poller); - uv_unref(); - } -} - - -// Called from the main thread. -static void WantPollNotifier(uv_async_t* watcher, int status) { - assert(watcher == &eio_want_poll_notifier); - - //printf("want poll notifier\n"); - - if (eio_poll() == -1 && !uv_is_active((uv_handle_t*) &eio_poller)) { - //printf("eio_poller start\n"); - uv_idle_start(&eio_poller, node::DoPoll); - uv_ref(); - } -} - - -static void DonePollNotifier(uv_async_t* watcher, int revents) { - assert(watcher == &eio_done_poll_notifier); - - //printf("done poll notifier\n"); - - if (eio_poll() != -1 && uv_is_active((uv_handle_t*) &eio_poller)) { - //printf("eio_poller stop\n"); - uv_idle_stop(&eio_poller); - uv_unref(); - } -} - - -// EIOWantPoll() is called from the EIO thread pool each time an EIO -// request (that is, one of the node.fs.* functions) has completed. -static void EIOWantPoll(void) { - // Signal the main thread that eio_poll need to be processed. - uv_async_send(&eio_want_poll_notifier); -} - - -static void EIODonePoll(void) { - // Signal the main thread that we should stop calling eio_poll(). - // from the idle watcher. - uv_async_send(&eio_done_poll_notifier); -} - - static inline const char *errno_string(int errorno) { #define ERRNO_CASE(e) case e: return #e; switch (errorno) { @@ -2517,23 +2457,6 @@ char** Init(int argc, char *argv[]) { uv_timer_init(&node::gc_timer); uv_unref(); - // Setup the EIO thread pool. It requires 3, yes 3, watchers. - { - uv_idle_init(&node::eio_poller); - uv_idle_start(&eio_poller, node::DoPoll); - - uv_async_init(&node::eio_want_poll_notifier, node::WantPollNotifier); - uv_unref(); - - uv_async_init(&node::eio_done_poll_notifier, node::DonePollNotifier); - uv_unref(); - - eio_init(node::EIOWantPoll, node::EIODonePoll); - // Don't handle more than 10 reqs on each eio_poll(). This is to avoid - // race conditions. See test/simple/test-eio-race.js - eio_set_max_poll_reqs(10); - } - V8::SetFatalErrorHandler(node::OnFatalError); diff --git a/src/node.h b/src/node.h index 851f0f6107f..b147bbfc120 100644 --- a/src/node.h +++ b/src/node.h @@ -39,7 +39,6 @@ #endif #include -#include #include #include /* struct stat */ #include diff --git a/src/node_child_process.h b/src/node_child_process.h index 9c82a4b335c..0da7c51e112 100644 --- a/src/node_child_process.h +++ b/src/node_child_process.h @@ -119,8 +119,6 @@ class ChildProcess : ObjectWrap { #endif // __POSIX__ #ifdef __MINGW32__ - static int do_spawn(eio_req *req); - static int after_spawn(eio_req *req); static void watch(ChildProcess *child); static void CALLBACK watch_wait_callback(void *data, BOOLEAN didTimeout); static void notify_spawn_failure(ChildProcess *child); diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 7d3c1386e6b..a88d124d796 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -3770,7 +3770,7 @@ struct pbkdf2_req { }; void -EIO_PBKDF2(eio_req* req) { +EIO_PBKDF2(uv_work_t* req) { pbkdf2_req* request = (pbkdf2_req*)req->data; request->err = PKCS5_PBKDF2_HMAC_SHA1( request->pass, @@ -3784,13 +3784,13 @@ EIO_PBKDF2(eio_req* req) { memset(request->salt, 0, request->saltlen); } -int -EIO_PBKDF2After(eio_req* req) { +void +EIO_PBKDF2After(uv_work_t* req) { HandleScope scope; - uv_unref(); - pbkdf2_req* request = (pbkdf2_req*)req->data; + delete req; + Handle argv[2]; if (request->err) { argv[0] = Undefined(); @@ -3814,8 +3814,6 @@ EIO_PBKDF2After(eio_req* req) { request->callback.Dispose(); delete request; - - return 0; } Handle @@ -3869,8 +3867,9 @@ PBKDF2(const Arguments& args) { request->keylen = keylen; request->callback = Persistent::New(callback); - eio_custom(EIO_PBKDF2, EIO_PRI_DEFAULT, EIO_PBKDF2After, request); - uv_ref(); + uv_work_t* req = new uv_work_t(); + uv_queue_work(req, EIO_PBKDF2, EIO_PBKDF2After); + req->data = request; return Undefined(); } diff --git a/src/node_file.cc b/src/node_file.cc index b14871ac9ca..bb17272301b 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -26,44 +26,19 @@ # include #endif +#include #include #include -#if !defined(_MSC_VER) -#include -#include -#endif -#include -#include -#if !defined(_MSC_VER) -#include -#else -#include -#define chdir _chdir -#define rmdir _rmdir -#define mkdir _mkdir -#include -#define ftruncate _chsize -#endif #include #include #include #include #if defined(__MINGW32__) || defined(_MSC_VER) +# include # include #endif -/* used for readlink, AIX doesn't provide it */ -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -/* HACK to use pread/pwrite from eio because MINGW32 doesn't have it */ -/* TODO fixme */ -#if defined(__MINGW32__) || defined(_MSC_VER) -# define pread eio__pread -# define pwrite eio__pwrite -#endif namespace node { @@ -77,14 +52,6 @@ static Persistent encoding_symbol; static Persistent errno_symbol; static Persistent buf_symbol; -// Buffer for readlink() and other misc callers; keep this scoped at -// file-level rather than method-level to avoid excess stack usage. -// Not used on windows atm -#ifdef __POSIX__ - static char getbuf[PATH_MAX + 1]; -#endif - - static inline bool SetCloseOnExec(int fd) { #ifdef __POSIX__ return (fcntl(fd, F_SETFD, FD_CLOEXEC) != -1); @@ -101,12 +68,11 @@ static inline int IsInt64(double x) { #endif -static int After(eio_req *req) { +static void After(uv_fs_t *req) { HandleScope scope; Persistent *callback = cb_unwrap(req->data); - uv_unref(); // there is always at least one argument. "error" int argc = 1; @@ -119,11 +85,12 @@ static int After(eio_req *req) { // for a success, which is possible. if (req->result == -1) { // If the request doesn't have a path parameter set. - if (!req->ptr1) { + + // XXX if (!req->arg0) { argv[0] = ErrnoException(req->errorno); - } else { - argv[0] = ErrnoException(req->errorno, NULL, "", static_cast(req->ptr1)); - } + // XXX } else { + // XXX argv[0] = ErrnoException(req->errorno, NULL, "", static_cast(req->arg0)); + // XXX} } else { // error value is empty or null for non-error. argv[0] = Local::New(Null()); @@ -131,63 +98,63 @@ static int After(eio_req *req) { // All have at least two args now. argc = 2; - switch (req->type) { + switch (req->fs_type) { // These all have no data to pass. - case EIO_CLOSE: - case EIO_RENAME: - case EIO_UNLINK: - case EIO_RMDIR: - case EIO_MKDIR: - case EIO_FTRUNCATE: - case EIO_FSYNC: - case EIO_FDATASYNC: - case EIO_LINK: - case EIO_SYMLINK: - case EIO_CHMOD: - case EIO_FCHMOD: - case EIO_CHOWN: - case EIO_FCHOWN: + case UV_FS_CLOSE: + case UV_FS_RENAME: + case UV_FS_UNLINK: + case UV_FS_RMDIR: + case UV_FS_MKDIR: + case UV_FS_FTRUNCATE: + case UV_FS_FSYNC: + case UV_FS_FDATASYNC: + case UV_FS_LINK: + case UV_FS_SYMLINK: + case UV_FS_CHMOD: + case UV_FS_FCHMOD: + case UV_FS_CHOWN: + case UV_FS_FCHOWN: // These, however, don't. argc = 1; break; - case EIO_UTIME: - case EIO_FUTIME: + case UV_FS_UTIME: + case UV_FS_FUTIME: argc = 0; break; - case EIO_OPEN: + case UV_FS_OPEN: SetCloseOnExec(req->result); /* pass thru */ - case EIO_SENDFILE: + case UV_FS_SENDFILE: argv[1] = Integer::New(req->result); break; - case EIO_WRITE: + case UV_FS_WRITE: argv[1] = Integer::New(req->result); break; - case EIO_STAT: - case EIO_LSTAT: - case EIO_FSTAT: + case UV_FS_STAT: + case UV_FS_LSTAT: + case UV_FS_FSTAT: { - NODE_STAT_STRUCT *s = reinterpret_cast(req->ptr2); + NODE_STAT_STRUCT *s = reinterpret_cast(req->ptr); argv[1] = BuildStatsObject(s); } break; - case EIO_READLINK: - argv[1] = String::New(static_cast(req->ptr2), req->result); + case UV_FS_READLINK: + argv[1] = String::New(static_cast(req->ptr), req->result); break; - case EIO_READ: + case UV_FS_READ: // Buffer interface argv[1] = Integer::New(req->result); break; - case EIO_READDIR: + case UV_FS_READDIR: { - char *namebuf = static_cast(req->ptr2); + char *namebuf = static_cast(req->ptr); int nnames = req->result; Local names = Array::New(nnames); @@ -221,16 +188,37 @@ static int After(eio_req *req) { // Dispose of the persistent handle cb_destroy(callback); - return 0; + uv_fs_req_cleanup(req); + delete req; } +struct fs_req_wrap { + fs_req_wrap() {} + ~fs_req_wrap() { uv_fs_req_cleanup(&req); } + // Ensure that copy ctor and assignment operator are not used. + fs_req_wrap(const fs_req_wrap& req); + fs_req_wrap& operator=(const fs_req_wrap& req); + uv_fs_t req; +}; + #define ASYNC_CALL(func, callback, ...) \ - eio_req *req = eio_##func(__VA_ARGS__, EIO_PRI_DEFAULT, After, \ - cb_persist(callback)); \ - assert(req); \ - uv_ref(); \ + uv_fs_t* req = new uv_fs_t(); \ + int r = uv_fs_##func(req, __VA_ARGS__, After); \ + assert(r == 0); \ + req->data = cb_persist(callback); \ return Undefined(); +#define SYNC_CALL(func, path, ...) \ + fs_req_wrap req_wrap; \ + uv_fs_##func(&req_wrap.req, __VA_ARGS__, NULL); \ + if (req_wrap.req.result == -1) { \ + return ThrowException( \ + ErrnoException(req_wrap.req.errorno, #func, "", path)); \ + } + +#define SYNC_REQ req_wrap.req + + static Handle Close(const Arguments& args) { HandleScope scope; @@ -243,8 +231,7 @@ static Handle Close(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(close, args[1], fd) } else { - int ret = close(fd); - if (ret != 0) return ThrowException(ErrnoException(errno)); + SYNC_CALL(close, 0, fd) return Undefined(); } } @@ -344,10 +331,8 @@ static Handle Stat(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(stat, args[1], *path) } else { - NODE_STAT_STRUCT s; - int ret = NODE_STAT(*path, &s); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); - return scope.Close(BuildStatsObject(&s)); + SYNC_CALL(stat, 0, *path) + return scope.Close(BuildStatsObject((NODE_STAT_STRUCT*)SYNC_REQ.ptr)); } } @@ -364,10 +349,8 @@ static Handle LStat(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(lstat, args[1], *path) } else { - NODE_STAT_STRUCT s; - int ret = lstat(*path, &s); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); - return scope.Close(BuildStatsObject(&s)); + SYNC_CALL(lstat, *path, *path) + return scope.Close(BuildStatsObject((NODE_STAT_STRUCT*)SYNC_REQ.ptr)); } } #endif // __POSIX__ @@ -384,10 +367,8 @@ static Handle FStat(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(fstat, args[1], fd) } else { - NODE_STAT_STRUCT s; - int ret = NODE_FSTAT(fd, &s); - if (ret != 0) return ThrowException(ErrnoException(errno)); - return scope.Close(BuildStatsObject(&s)); + SYNC_CALL(fstat, 0, fd) + return scope.Close(BuildStatsObject((NODE_STAT_STRUCT*)SYNC_REQ.ptr)); } } @@ -405,8 +386,7 @@ static Handle Symlink(const Arguments& args) { if (args[2]->IsFunction()) { ASYNC_CALL(symlink, args[2], *dest, *path) } else { - int ret = symlink(*dest, *path); - if (ret != 0) return ThrowException(ErrnoException(errno)); + SYNC_CALL(symlink, *path, *dest, *path) return Undefined(); } } @@ -426,8 +406,7 @@ static Handle Link(const Arguments& args) { if (args[2]->IsFunction()) { ASYNC_CALL(link, args[2], *orig_path, *new_path) } else { - int ret = link(*orig_path, *new_path); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *orig_path)); + SYNC_CALL(link, *orig_path, *orig_path, *new_path) return Undefined(); } } @@ -446,10 +425,8 @@ static Handle ReadLink(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(readlink, args[1], *path) } else { - ssize_t bz = readlink(*path, getbuf, ARRAY_SIZE(getbuf) - 1); - if (bz == -1) return ThrowException(ErrnoException(errno, NULL, "", *path)); - getbuf[ARRAY_SIZE(getbuf) - 1] = '\0'; - return scope.Close(String::New(getbuf, bz)); + SYNC_CALL(readlink, *path, *path) + return scope.Close(String::New((char*)SYNC_REQ.ptr, SYNC_REQ.result)); } } #endif // __POSIX__ @@ -467,8 +444,7 @@ static Handle Rename(const Arguments& args) { if (args[2]->IsFunction()) { ASYNC_CALL(rename, args[2], *old_path, *new_path) } else { - int ret = rename(*old_path, *new_path); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *old_path)); + SYNC_CALL(rename, *old_path, *old_path, *new_path) return Undefined(); } } @@ -502,8 +478,7 @@ static Handle Truncate(const Arguments& args) { if (args[2]->IsFunction()) { ASYNC_CALL(ftruncate, args[2], fd, len) } else { - int ret = ftruncate(fd, len); - if (ret != 0) return ThrowException(ErrnoException(errno)); + SYNC_CALL(ftruncate, 0, fd, len) return Undefined(); } } @@ -520,14 +495,7 @@ static Handle Fdatasync(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(fdatasync, args[1], fd) } else { -#if HAVE_FDATASYNC - int ret = fdatasync(fd); -#elif defined(__MINGW32__) || defined(_MSC_VER) - int ret = FlushFileBuffers((HANDLE)_get_osfhandle(fd)) ? 0 : -1; -#else - int ret = fsync(fd); -#endif - if (ret != 0) return ThrowException(ErrnoException(errno)); + SYNC_CALL(fdatasync, 0, fd) return Undefined(); } } @@ -544,12 +512,7 @@ static Handle Fsync(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(fsync, args[1], fd) } else { -#if defined(__MINGW32__) || defined(_MSC_VER) - int ret = FlushFileBuffers((HANDLE)_get_osfhandle(fd)) ? 0 : -1; -#else - int ret = fsync(fd); -#endif - if (ret != 0) return ThrowException(ErrnoException(errno)); + SYNC_CALL(fsync, 0, fd) return Undefined(); } } @@ -566,8 +529,7 @@ static Handle Unlink(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(unlink, args[1], *path) } else { - int ret = unlink(*path); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); + SYNC_CALL(unlink, *path, *path) return Undefined(); } } @@ -584,8 +546,7 @@ static Handle RMDir(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(rmdir, args[1], *path) } else { - int ret = rmdir(*path); - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); + SYNC_CALL(rmdir, *path, *path) return Undefined(); } } @@ -598,17 +559,12 @@ static Handle MKDir(const Arguments& args) { } String::Utf8Value path(args[0]->ToString()); - eio_mode_t mode = static_cast(args[1]->Int32Value()); + int mode = static_cast(args[1]->Int32Value()); if (args[2]->IsFunction()) { ASYNC_CALL(mkdir, args[2], *path, mode) } else { -#if defined(__MINGW32__) || defined(_MSC_VER) - int ret = mkdir(*path); -#else - int ret = mkdir(*path, mode); -#endif - if (ret != 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); + SYNC_CALL(mkdir, *path, *path, mode) return Undefined(); } } @@ -632,10 +588,8 @@ static Handle SendFile(const Arguments& args) { if (args[4]->IsFunction()) { ASYNC_CALL(sendfile, args[4], out_fd, in_fd, in_offset, length) } else { - ssize_t sent = eio_sendfile_sync (out_fd, in_fd, in_offset, length); - // XXX is this the right errno to use? - if (sent < 0) return ThrowException(ErrnoException(errno)); - return scope.Close(Integer::New(sent)); + SYNC_CALL(sendfile, 0, out_fd, in_fd, in_offset, length) + return scope.Close(Integer::New(SYNC_REQ.result)); } } @@ -651,50 +605,25 @@ static Handle ReadDir(const Arguments& args) { if (args[1]->IsFunction()) { ASYNC_CALL(readdir, args[1], *path, 0 /*flags*/) } else { -#if defined(__POSIX__) - DIR *dir = opendir(*path); - if (!dir) return ThrowException(ErrnoException(errno, NULL, "", *path)); - struct dirent *ent; -#else - WIN32_FIND_DATAA ent = {0}; - size_t len = strlen(*path); - const char* fmt = !len ? "./*" - : ((*path)[len - 1] == '/' || (*path)[len - 1] == '\\') ? "%s*" - : "%s\\*"; - char* path2 = new char[len + 4]; - sprintf(path2, fmt, *path); - HANDLE dir = FindFirstFileA(path2, &ent); - delete [] path2; - if(dir == INVALID_HANDLE_VALUE) return ThrowException(ErrnoException(GetLastError(), "FindFirstFileA", "", path2)); -#endif - - Local files = Array::New(); - char *name; - int i = 0; - -#if defined(__POSIX__) - while ((ent = readdir(dir))) { - name = ent->d_name; + SYNC_CALL(readdir, *path, *path, 0 /*flags*/) + + char *namebuf = static_cast(SYNC_REQ.ptr); + int nnames = req_wrap.req.result; + Local names = Array::New(nnames); + + for (int i = 0; i < nnames; i++) { + Local name = String::New(namebuf); + names->Set(Integer::New(i), name); +#ifndef NDEBUG + namebuf += strlen(namebuf); + assert(*namebuf == '\0'); + namebuf += 1; #else - do { - name = ent.cFileName; + namebuf += strlen(namebuf) + 1; #endif - if (name[0] != '.' || (name[1] && (name[1] != '.' || name[2]))) { - files->Set(Integer::New(i), String::New(name)); - i++; - } } -#if !defined(__POSIX__) - while(FindNextFileA(dir, &ent)); -#endif - -#if defined(__POSIX__) - closedir(dir); -#else - FindClose(dir); -#endif - return scope.Close(files); + return scope.Close(names); } } @@ -710,13 +639,13 @@ static Handle Open(const Arguments& args) { String::Utf8Value path(args[0]->ToString()); int flags = args[1]->Int32Value(); - eio_mode_t mode = static_cast(args[2]->Int32Value()); + int mode = static_cast(args[2]->Int32Value()); if (args[3]->IsFunction()) { ASYNC_CALL(open, args[3], *path, flags, mode) } else { - int fd = open(*path, flags, mode); - if (fd < 0) return ThrowException(ErrnoException(errno, NULL, "", *path)); + SYNC_CALL(open, *path, *path, flags, mode) + int fd = SYNC_REQ.result; SetCloseOnExec(fd); return scope.Close(Integer::New(fd)); } @@ -782,12 +711,10 @@ static Handle Write(const Arguments& args) { Local cb = args[5]; if (cb->IsFunction()) { - ASYNC_CALL(write, cb, fd, buf, len, pos) } else { - ssize_t written = pos < 0 ? write(fd, buf, len) : pwrite(fd, buf, len, pos); - if (written < 0) return ThrowException(ErrnoException(errno, "write")); - return scope.Close(Integer::New(written)); + SYNC_CALL(write, 0, fd, buf, len, pos) + return scope.Close(Integer::New(SYNC_REQ.result)); } } @@ -847,15 +774,10 @@ static Handle Read(const Arguments& args) { cb = args[5]; if (cb->IsFunction()) { - ASYNC_CALL(read, cb, fd, buf, len, pos); } else { - // SYNC - ssize_t ret; - - ret = pos < 0 ? read(fd, buf, len) : pread(fd, buf, len, pos); - if (ret < 0) return ThrowException(ErrnoException(errno)); - Local bytesRead = Integer::New(ret); + SYNC_CALL(read, 0, fd, buf, len, pos) + Local bytesRead = Integer::New(SYNC_REQ.result); return scope.Close(bytesRead); } } @@ -871,13 +793,12 @@ static Handle Chmod(const Arguments& args) { return THROW_BAD_ARGS; } String::Utf8Value path(args[0]->ToString()); - eio_mode_t mode = static_cast(args[1]->Int32Value()); + int mode = static_cast(args[1]->Int32Value()); if(args[2]->IsFunction()) { ASYNC_CALL(chmod, args[2], *path, mode); } else { - int ret = chmod(*path, mode); - if (ret != 0) return ThrowException(ErrnoException(errno, "chmod", "", *path)); + SYNC_CALL(chmod, *path, *path, mode); return Undefined(); } } @@ -899,8 +820,7 @@ static Handle FChmod(const Arguments& args) { if(args[2]->IsFunction()) { ASYNC_CALL(fchmod, args[2], fd, mode); } else { - int ret = fchmod(fd, mode); - if (ret != 0) return ThrowException(ErrnoException(errno, "fchmod", "", 0)); + SYNC_CALL(fchmod, 0, fd, mode); return Undefined(); } } @@ -929,8 +849,7 @@ static Handle Chown(const Arguments& args) { if (args[3]->IsFunction()) { ASYNC_CALL(chown, args[3], *path, uid, gid); } else { - int ret = chown(*path, uid, gid); - if (ret != 0) return ThrowException(ErrnoException(errno, "chown", "", *path)); + SYNC_CALL(chown, *path, *path, uid, gid); return Undefined(); } } @@ -959,26 +878,12 @@ static Handle FChown(const Arguments& args) { if (args[3]->IsFunction()) { ASYNC_CALL(fchown, args[3], fd, uid, gid); } else { - int ret = fchown(fd, uid, gid); - if (ret != 0) return ThrowException(ErrnoException(errno, "fchown", "", 0)); + SYNC_CALL(fchown, 0, fd, uid, gid); return Undefined(); } } #endif // __POSIX__ - -// Utimes() and Futimes() helper function, converts 123.456 timestamps to timevals -static inline void ToTimevals(eio_tstamp atime, - eio_tstamp mtime, - timeval times[2]) { - times[0].tv_sec = atime; - times[0].tv_usec = 10e5 * (atime - (long) atime); - times[1].tv_sec = mtime; - times[1].tv_usec = 10e5 * (mtime - (long) mtime); -} - - -#ifdef __POSIX__ static Handle UTimes(const Arguments& args) { HandleScope scope; @@ -991,24 +896,16 @@ static Handle UTimes(const Arguments& args) { } const String::Utf8Value path(args[0]->ToString()); - const eio_tstamp atime = static_cast(args[1]->NumberValue()); - const eio_tstamp mtime = static_cast(args[2]->NumberValue()); + const double atime = static_cast(args[1]->NumberValue()); + const double mtime = static_cast(args[2]->NumberValue()); if (args[3]->IsFunction()) { ASYNC_CALL(utime, args[3], *path, atime, mtime); } else { - timeval times[2]; - - ToTimevals(atime, mtime, times); - if (utimes(*path, times) == -1) { - return ThrowException(ErrnoException(errno, "utimes", "", *path)); - } + SYNC_CALL(utime, *path, *path, atime, mtime); + return Undefined(); } - - return Undefined(); } -#endif // __POSIX__ - static Handle FUTimes(const Arguments& args) { HandleScope scope; @@ -1022,26 +919,15 @@ static Handle FUTimes(const Arguments& args) { } const int fd = args[0]->Int32Value(); - const eio_tstamp atime = static_cast(args[1]->NumberValue()); - const eio_tstamp mtime = static_cast(args[2]->NumberValue()); + const double atime = static_cast(args[1]->NumberValue()); + const double mtime = static_cast(args[2]->NumberValue()); if (args[3]->IsFunction()) { ASYNC_CALL(futime, args[3], fd, atime, mtime); } else { -#ifndef futimes - // Some systems do not have futimes - return ThrowException(ErrnoException(ENOSYS, "futimes", "", 0)); -#else - timeval times[2]; - - ToTimevals(atime, mtime, times); - if (futimes(fd, times) == -1) { - return ThrowException(ErrnoException(errno, "futimes", "", 0)); - } -#endif // futimes + SYNC_CALL(futime, 0, fd, atime, mtime); + return Undefined(); } - - return Undefined(); } @@ -1081,8 +967,8 @@ void File::Initialize(Handle target) { NODE_SET_METHOD(target, "fchown", FChown); //NODE_SET_METHOD(target, "lchown", LChown); - NODE_SET_METHOD(target, "utimes", UTimes); #endif // __POSIX__ + NODE_SET_METHOD(target, "utimes", UTimes); NODE_SET_METHOD(target, "futimes", FUTimes); errno_symbol = NODE_PSYMBOL("errno"); @@ -1102,11 +988,6 @@ void InitFs(Handle target) { #ifdef __POSIX__ StatWatcher::Initialize(target); #endif - -#ifndef __POSIX__ - // Open files in binary mode by default - _fmode = _O_BINARY; -#endif } } // end namespace node diff --git a/wscript b/wscript index 44a2071645f..c9b171479f6 100644 --- a/wscript +++ b/wscript @@ -501,12 +501,6 @@ def configure(conf): debug_env = conf.env.copy() conf.set_env_name('Debug', debug_env) - if (sys.platform.startswith("win32")): - # Static pthread - conf.env.append_value('LINKFLAGS', '../deps/pthread-win32/libpthreadGC2.a') - debug_env.append_value('LINKFLAGS', '../deps/pthread-win32/libpthreadGC2d.a') - conf.env.append_value('CPPFLAGS', "-DPTW32_STATIC_LIB") - # Configure debug variant conf.setenv('Debug') debug_env.set_variant('Debug') @@ -641,7 +635,6 @@ def build_uv(bld): uv.env.env = dict(os.environ) uv.env.env['CC'] = sh_escape(bld.env['CC'][0]) uv.env.env['CXX'] = sh_escape(bld.env['CXX'][0]) - uv.env.env['CPPFLAGS'] = "-DPTW32_STATIC_LIB" t = join(bld.srcnode.abspath(bld.env_of_name("Release")), uv.target) bld.env_of_name('Release').append_value("LINKFLAGS_UV", t) @@ -650,7 +643,6 @@ def build_uv(bld): uv_debug = uv.clone("Debug") uv_debug.rule = uv_cmd(bld, 'Debug') uv_debug.env.env = dict(os.environ) - uv_debug.env.env['CPPFLAGS'] = "-DPTW32_STATIC_LIB" t = join(bld.srcnode.abspath(bld.env_of_name("Debug")), uv_debug.target) bld.env_of_name('Debug').append_value("LINKFLAGS_UV", t)