passenger 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (538) hide show
  1. data/DEVELOPERS.TXT +9 -6
  2. data/NEWS +50 -0
  3. data/Rakefile +2 -1
  4. data/bin/passenger-install-apache2-module +4 -4
  5. data/bin/passenger-install-nginx-module +1 -1
  6. data/bin/passenger-make-enterprisey +1 -1
  7. data/build/agents.rb +26 -19
  8. data/build/apache2.rb +49 -46
  9. data/build/basics.rb +37 -13
  10. data/build/common_library.rb +134 -64
  11. data/build/config.rb +18 -11
  12. data/build/cplusplus_support.rb +4 -0
  13. data/build/cxx_tests.rb +26 -12
  14. data/build/documentation.rb +18 -11
  15. data/build/integration_tests.rb +18 -11
  16. data/build/misc.rb +18 -11
  17. data/build/nginx.rb +27 -19
  18. data/build/oxt_tests.rb +18 -11
  19. data/build/packaging.rb +45 -37
  20. data/build/rpm.rb +98 -0
  21. data/build/ruby_extension.rb +19 -13
  22. data/build/ruby_tests.rb +19 -12
  23. data/build/test_basics.rb +23 -11
  24. data/debian/README.Debian +15 -0
  25. data/debian/changelog +185 -0
  26. data/debian/control +47 -19
  27. data/debian/copyright +20 -0
  28. data/debian/libapache2-mod-passenger.install +1 -0
  29. data/debian/libapache2-mod-passenger.postinst +36 -0
  30. data/debian/libapache2-mod-passenger.prerm +15 -0
  31. data/debian/passenger-common.install +4 -0
  32. data/debian/passenger.conf +4 -0
  33. data/debian/passenger.load +1 -0
  34. data/debian/rules +37 -0
  35. data/debian/watch +3 -0
  36. data/{misc → dev}/copy_boost_headers.rb +3 -0
  37. data/{misc → dev}/find_owner_pipe_leaks.rb +0 -0
  38. data/{misc → dev}/render_error_pages.rb +0 -0
  39. data/doc/Users guide Apache.html +39 -1
  40. data/doc/Users guide Apache.txt +40 -0
  41. data/doc/Users guide Nginx.html +1 -1
  42. data/doc/Users guide Standalone.html +1 -1
  43. data/doc/cxxapi/Constants_8h_source.html +1 -1
  44. data/doc/cxxapi/DirectoryMapper_8h_source.html +6 -22
  45. data/doc/cxxapi/EventedClient_8h_source.html +572 -468
  46. data/doc/cxxapi/Exceptions_8h_source.html +142 -129
  47. data/doc/cxxapi/FileDescriptor_8h_source.html +263 -199
  48. data/doc/cxxapi/MessageChannel_8h_source.html +686 -770
  49. data/doc/cxxapi/MessageServer_8h_source.html +1 -1
  50. data/doc/cxxapi/PoolOptions_8h_source.html +79 -78
  51. data/doc/cxxapi/ResourceLocator_8h_source.html +105 -55
  52. data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
  53. data/doc/cxxapi/ServerInstanceDir_8h_source.html +114 -110
  54. data/doc/cxxapi/Session_8h_source.html +1 -1
  55. data/doc/cxxapi/SpawnManager_8h_source.html +208 -208
  56. data/doc/cxxapi/StaticString_8h_source.html +258 -183
  57. data/doc/cxxapi/Utils_8h_source.html +71 -54
  58. data/doc/cxxapi/annotated.html +3 -0
  59. data/doc/cxxapi/classAgentWatcher.html +2 -2
  60. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -1
  61. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -27
  62. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +5 -0
  63. data/doc/cxxapi/classPassenger_1_1EventedClient.html +102 -7
  64. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +2 -1
  65. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +34 -8
  66. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
  67. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
  68. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -3
  69. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -120
  70. data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
  71. data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
  72. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -0
  73. data/doc/cxxapi/classPassenger_1_1SpawnException.html +22 -0
  74. data/doc/cxxapi/classes.html +14 -14
  75. data/doc/cxxapi/files.html +2 -0
  76. data/doc/cxxapi/functions_0x63.html +6 -3
  77. data/doc/cxxapi/functions_0x64.html +9 -2
  78. data/doc/cxxapi/functions_0x67.html +6 -9
  79. data/doc/cxxapi/functions_0x69.html +3 -0
  80. data/doc/cxxapi/functions_0x77.html +8 -8
  81. data/doc/cxxapi/functions_eval.html +6 -0
  82. data/doc/cxxapi/functions_func.html +18 -17
  83. data/doc/cxxapi/functions_vars.html +8 -0
  84. data/doc/cxxapi/graph_legend.png +0 -0
  85. data/doc/cxxapi/group__Core.png +0 -0
  86. data/doc/cxxapi/group__Hooks.png +0 -0
  87. data/doc/cxxapi/hierarchy.html +3 -0
  88. data/doc/cxxapi/inherit__graph__14.map +1 -1
  89. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  90. data/doc/cxxapi/inherit__graph__14.png +0 -0
  91. data/doc/cxxapi/inherit__graph__15.map +1 -3
  92. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  93. data/doc/cxxapi/inherit__graph__15.png +0 -0
  94. data/doc/cxxapi/inherit__graph__16.map +3 -1
  95. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  96. data/doc/cxxapi/inherit__graph__16.png +0 -0
  97. data/doc/cxxapi/inherit__graph__17.map +1 -1
  98. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  99. data/doc/cxxapi/inherit__graph__17.png +0 -0
  100. data/doc/cxxapi/inherit__graph__18.map +1 -2
  101. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  102. data/doc/cxxapi/inherit__graph__18.png +0 -0
  103. data/doc/cxxapi/inherit__graph__19.map +2 -1
  104. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  105. data/doc/cxxapi/inherit__graph__19.png +0 -0
  106. data/doc/cxxapi/inherit__graph__20.map +1 -1
  107. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  108. data/doc/cxxapi/inherit__graph__20.png +0 -0
  109. data/doc/cxxapi/inherit__graph__21.map +1 -1
  110. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  111. data/doc/cxxapi/inherit__graph__21.png +0 -0
  112. data/doc/cxxapi/inherit__graph__22.map +1 -1
  113. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  114. data/doc/cxxapi/inherit__graph__22.png +0 -0
  115. data/doc/cxxapi/inherit__graph__23.map +1 -1
  116. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  117. data/doc/cxxapi/inherit__graph__23.png +0 -0
  118. data/doc/cxxapi/inherit__graph__24.map +1 -1
  119. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  120. data/doc/cxxapi/inherit__graph__24.png +0 -0
  121. data/doc/cxxapi/inherit__graph__25.map +1 -1
  122. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  123. data/doc/cxxapi/inherit__graph__25.png +0 -0
  124. data/doc/cxxapi/inherit__graph__26.map +1 -1
  125. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  126. data/doc/cxxapi/inherit__graph__26.png +0 -0
  127. data/doc/cxxapi/inherit__graph__27.map +1 -1
  128. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  129. data/doc/cxxapi/inherit__graph__27.png +0 -0
  130. data/doc/cxxapi/inherit__graph__28.map +1 -2
  131. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  132. data/doc/cxxapi/inherit__graph__28.png +0 -0
  133. data/doc/cxxapi/inherit__graph__29.map +1 -1
  134. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  135. data/doc/cxxapi/inherit__graph__29.png +0 -0
  136. data/doc/cxxapi/inherit__graph__30.map +1 -1
  137. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  138. data/doc/cxxapi/inherit__graph__30.png +0 -0
  139. data/doc/cxxapi/inherit__graph__31.map +2 -1
  140. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  141. data/doc/cxxapi/inherit__graph__31.png +0 -0
  142. data/doc/cxxapi/inherit__graph__32.map +1 -3
  143. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  144. data/doc/cxxapi/inherit__graph__32.png +0 -0
  145. data/doc/cxxapi/inherit__graph__33.map +1 -1
  146. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  147. data/doc/cxxapi/inherit__graph__33.png +0 -0
  148. data/doc/cxxapi/inherit__graph__34.map +1 -1
  149. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  150. data/doc/cxxapi/inherit__graph__34.png +0 -0
  151. data/doc/cxxapi/inherit__graph__35.map +3 -1
  152. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  153. data/doc/cxxapi/inherit__graph__35.png +0 -0
  154. data/doc/cxxapi/inherit__graph__36.map +1 -1
  155. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  156. data/doc/cxxapi/inherit__graph__36.png +0 -0
  157. data/doc/cxxapi/inherit__graph__37.map +1 -1
  158. data/doc/cxxapi/inherit__graph__37.md5 +1 -1
  159. data/doc/cxxapi/inherit__graph__37.png +0 -0
  160. data/doc/cxxapi/inherit__graph__38.map +3 -1
  161. data/doc/cxxapi/inherit__graph__38.md5 +1 -1
  162. data/doc/cxxapi/inherit__graph__38.png +0 -0
  163. data/doc/cxxapi/inherit__graph__39.map +3 -1
  164. data/doc/cxxapi/inherit__graph__39.md5 +1 -1
  165. data/doc/cxxapi/inherit__graph__39.png +0 -0
  166. data/doc/cxxapi/inherits.html +33 -24
  167. data/doc/cxxapi/namespacePassenger.html +52 -0
  168. data/doc/cxxapi/namespacemembers.html +6 -0
  169. data/doc/cxxapi/namespacemembers_func.html +6 -0
  170. data/doc/cxxapi/tree.html +8 -0
  171. data/ext/apache2/Configuration.cpp +30 -8
  172. data/ext/apache2/Configuration.hpp +15 -14
  173. data/ext/apache2/DirectoryMapper.h +0 -16
  174. data/ext/apache2/Hooks.cpp +30 -29
  175. data/ext/boost/algorithm/string/detail/case_conv.hpp +6 -6
  176. data/ext/boost/algorithm/string/detail/find_format.hpp +14 -4
  177. data/ext/boost/algorithm/string/detail/find_format_all.hpp +13 -3
  178. data/ext/boost/algorithm/string/detail/find_format_store.hpp +11 -0
  179. data/ext/boost/algorithm/string/erase.hpp +2 -2
  180. data/ext/boost/bind/placeholders.hpp +2 -2
  181. data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
  182. data/ext/boost/concept/detail/general.hpp +15 -6
  183. data/ext/boost/concept/detail/has_constraints.hpp +5 -3
  184. data/ext/boost/concept/usage.hpp +5 -4
  185. data/ext/boost/concept_check.hpp +10 -1
  186. data/ext/boost/config/abi/borland_prefix.hpp +1 -1
  187. data/ext/boost/config/auto_link.hpp +68 -21
  188. data/ext/boost/config/compiler/borland.hpp +11 -3
  189. data/ext/boost/config/compiler/clang.hpp +62 -0
  190. data/ext/boost/config/compiler/codegear.hpp +21 -7
  191. data/ext/boost/config/compiler/common_edg.hpp +4 -2
  192. data/ext/boost/config/compiler/digitalmars.hpp +1 -1
  193. data/ext/boost/config/compiler/gcc.hpp +46 -7
  194. data/ext/boost/config/compiler/gcc_xml.hpp +25 -0
  195. data/ext/boost/config/compiler/intel.hpp +23 -0
  196. data/ext/boost/config/compiler/kai.hpp +1 -1
  197. data/ext/boost/config/compiler/metrowerks.hpp +1 -1
  198. data/ext/boost/config/compiler/nvcc.hpp +86 -0
  199. data/ext/boost/config/compiler/pgi.hpp +18 -3
  200. data/ext/boost/config/compiler/sunpro_cc.hpp +19 -5
  201. data/ext/boost/config/compiler/vacpp.hpp +8 -0
  202. data/ext/boost/config/compiler/visualc.hpp +27 -11
  203. data/ext/boost/config/platform/cygwin.hpp +0 -3
  204. data/ext/boost/config/platform/symbian.hpp +94 -0
  205. data/ext/boost/config/platform/win32.hpp +8 -1
  206. data/ext/boost/config/select_compiler_config.hpp +10 -0
  207. data/ext/boost/config/select_platform_config.hpp +4 -0
  208. data/ext/boost/config/stdlib/dinkumware.hpp +11 -1
  209. data/ext/boost/config/stdlib/libcomo.hpp +1 -0
  210. data/ext/boost/config/stdlib/libstdcpp3.hpp +1 -0
  211. data/ext/boost/config/stdlib/modena.hpp +1 -0
  212. data/ext/boost/config/stdlib/msl.hpp +1 -0
  213. data/ext/boost/config/stdlib/roguewave.hpp +1 -0
  214. data/ext/boost/config/stdlib/sgi.hpp +1 -0
  215. data/ext/boost/config/stdlib/stlport.hpp +1 -0
  216. data/ext/boost/config/stdlib/vacpp.hpp +1 -0
  217. data/ext/boost/config/suffix.hpp +40 -2
  218. data/ext/boost/cstdint.hpp +36 -7
  219. data/ext/boost/date_time/gregorian/conversion.hpp +4 -2
  220. data/ext/boost/date_time/microsec_time_clock.hpp +7 -7
  221. data/ext/boost/date_time/posix_time/conversion.hpp +4 -2
  222. data/ext/boost/date_time/time_facet.hpp +43 -4
  223. data/ext/boost/detail/endian.hpp +5 -2
  224. data/ext/boost/detail/lcast_precision.hpp +2 -2
  225. data/ext/boost/detail/sp_typeinfo.hpp +1 -1
  226. data/ext/boost/detail/workaround.hpp +5 -0
  227. data/ext/boost/exception/detail/error_info_impl.hpp +3 -3
  228. data/ext/boost/exception/detail/exception_ptr.hpp +76 -135
  229. data/ext/boost/exception/detail/is_output_streamable.hpp +15 -2
  230. data/ext/boost/exception/detail/type_info.hpp +9 -5
  231. data/ext/boost/exception/diagnostic_information.hpp +5 -3
  232. data/ext/boost/exception/exception.hpp +60 -46
  233. data/ext/boost/exception/info.hpp +47 -14
  234. data/ext/boost/function/function_base.hpp +4 -4
  235. data/ext/boost/integer.hpp +4 -0
  236. data/ext/boost/integer_fwd.hpp +9 -3
  237. data/ext/boost/iterator/iterator_concepts.hpp +284 -0
  238. data/ext/boost/iterator/transform_iterator.hpp +0 -1
  239. data/ext/boost/make_shared.hpp +17 -0
  240. data/ext/boost/mpl/aux_/config/has_xxx.hpp +4 -3
  241. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +2 -6
  242. data/ext/boost/mpl/aux_/template_arity.hpp +4 -4
  243. data/ext/boost/mpl/eval_if.hpp +3 -3
  244. data/ext/boost/mpl/has_xxx.hpp +369 -3
  245. data/ext/boost/optional/optional.hpp +3 -1
  246. data/ext/boost/optional/optional_fwd.hpp +1 -1
  247. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  248. data/ext/boost/range/algorithm/equal.hpp +188 -0
  249. data/ext/boost/range/as_literal.hpp +15 -15
  250. data/ext/boost/range/concepts.hpp +331 -0
  251. data/ext/boost/range/const_iterator.hpp +7 -4
  252. data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
  253. data/ext/boost/range/detail/implementation_help.hpp +7 -7
  254. data/ext/boost/range/detail/misc_concept.hpp +33 -0
  255. data/ext/boost/range/iterator.hpp +32 -32
  256. data/ext/boost/range/iterator_range.hpp +8 -651
  257. data/ext/boost/range/iterator_range_core.hpp +542 -0
  258. data/ext/boost/range/iterator_range_io.hpp +93 -0
  259. data/ext/boost/range/mutable_iterator.hpp +7 -4
  260. data/ext/boost/range/size.hpp +1 -1
  261. data/ext/boost/range/size_type.hpp +2 -1
  262. data/ext/boost/shared_array.hpp +19 -0
  263. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +2 -2
  264. data/ext/boost/smart_ptr/detail/yield_k.hpp +1 -1
  265. data/ext/boost/smart_ptr/make_shared.hpp +508 -0
  266. data/ext/boost/smart_ptr/shared_array.hpp +147 -0
  267. data/ext/boost/src/pthread/thread.cpp +16 -21
  268. data/ext/boost/src/pthread/timeconv.inl +7 -4
  269. data/ext/boost/thread/barrier.hpp +2 -1
  270. data/ext/boost/thread/detail/config.hpp +7 -1
  271. data/ext/boost/thread/detail/platform.hpp +1 -1
  272. data/ext/boost/thread/detail/thread.hpp +62 -18
  273. data/ext/boost/thread/detail/thread_group.hpp +5 -2
  274. data/ext/boost/thread/detail/tss_hooks.hpp +8 -25
  275. data/ext/boost/thread/future.hpp +45 -34
  276. data/ext/boost/thread/locks.hpp +184 -55
  277. data/ext/boost/thread/pthread/condition_variable.hpp +7 -7
  278. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +4 -2
  279. data/ext/boost/thread/pthread/mutex.hpp +29 -17
  280. data/ext/boost/thread/pthread/once.hpp +5 -0
  281. data/ext/boost/thread/pthread/recursive_mutex.hpp +97 -18
  282. data/ext/boost/thread/pthread/shared_mutex.hpp +1 -1
  283. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +1 -1
  284. data/ext/boost/thread/tss.hpp +2 -0
  285. data/ext/boost/throw_exception.hpp +21 -5
  286. data/ext/boost/token_functions.hpp +111 -91
  287. data/ext/boost/type_traits/add_reference.hpp +19 -1
  288. data/ext/boost/type_traits/function_traits.hpp +2 -2
  289. data/ext/boost/type_traits/is_const.hpp +24 -5
  290. data/ext/boost/type_traits/is_convertible.hpp +1 -1
  291. data/ext/boost/type_traits/is_function.hpp +3 -0
  292. data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
  293. data/ext/boost/type_traits/is_reference.hpp +8 -81
  294. data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
  295. data/ext/boost/type_traits/is_same.hpp +2 -2
  296. data/ext/boost/type_traits/is_volatile.hpp +26 -7
  297. data/ext/boost/type_traits/remove_const.hpp +12 -0
  298. data/ext/boost/type_traits/remove_cv.hpp +23 -1
  299. data/ext/boost/type_traits/remove_reference.hpp +21 -1
  300. data/ext/boost/type_traits/type_with_alignment.hpp +10 -10
  301. data/ext/boost/units/detail/utility.hpp +104 -0
  302. data/ext/boost/utility/compare_pointees.hpp +1 -1
  303. data/ext/common/AgentsStarter.hpp +151 -161
  304. data/ext/common/ApplicationPool/Pool.h +16 -4
  305. data/ext/common/Constants.h +1 -1
  306. data/ext/common/EventedClient.h +130 -26
  307. data/ext/common/Exceptions.h +15 -2
  308. data/ext/common/FileDescriptor.h +76 -12
  309. data/ext/common/IniFile.h +488 -0
  310. data/ext/common/LoggingAgent/LoggingServer.h +2 -2
  311. data/ext/common/LoggingAgent/RemoteSender.h +15 -6
  312. data/ext/common/MessageChannel.h +17 -101
  313. data/ext/common/PoolOptions.h +1 -0
  314. data/ext/common/ResourceLocator.h +78 -28
  315. data/ext/common/SafeLibev.h +149 -0
  316. data/ext/common/ServerInstanceDir.h +11 -7
  317. data/ext/common/Session.h +1 -1
  318. data/ext/common/SpawnManager.h +14 -14
  319. data/ext/common/StaticString.h +75 -0
  320. data/ext/common/Utils.cpp +304 -12
  321. data/ext/common/Utils.h +17 -0
  322. data/ext/common/Utils/BufferedIO.h +196 -0
  323. data/ext/common/Utils/IOUtils.cpp +159 -0
  324. data/ext/common/Utils/IOUtils.h +118 -1
  325. data/ext/common/Utils/ProcessMetricsCollector.h +184 -56
  326. data/ext/common/Utils/StrIntUtils.cpp +45 -11
  327. data/ext/common/Utils/StrIntUtils.h +8 -5
  328. data/ext/common/Utils/Timer.h +22 -0
  329. data/ext/common/Utils/utf8.h +35 -0
  330. data/ext/common/Utils/utf8/checked.h +324 -0
  331. data/ext/common/Utils/utf8/core.h +359 -0
  332. data/ext/common/Utils/utf8/unchecked.h +229 -0
  333. data/ext/common/Watchdog.cpp +52 -85
  334. data/ext/libev/config.h +122 -0
  335. data/ext/nginx/Configuration.c +7 -1
  336. data/ext/nginx/HelperAgent.cpp +16 -18
  337. data/ext/nginx/config +6 -4
  338. data/ext/oxt/system_calls.cpp +10 -0
  339. data/ext/oxt/system_calls.hpp +2 -0
  340. data/lib/phusion_passenger.rb +6 -11
  341. data/lib/phusion_passenger/dependencies.rb +2 -0
  342. data/lib/phusion_passenger/packaging.rb +5 -5
  343. data/lib/phusion_passenger/platform_info.rb +88 -0
  344. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -17
  345. data/lib/phusion_passenger/platform_info/compiler.rb +14 -32
  346. data/lib/phusion_passenger/platform_info/curl.rb +6 -1
  347. data/lib/phusion_passenger/platform_info/operating_system.rb +107 -0
  348. data/lib/phusion_passenger/public_api.rb +2 -2
  349. data/lib/phusion_passenger/rails3_extensions/init.rb +5 -2
  350. data/lib/phusion_passenger/standalone/command.rb +6 -2
  351. data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
  352. data/lib/phusion_passenger/standalone/runtime_installer.rb +17 -5
  353. data/lib/phusion_passenger/standalone/start_command.rb +12 -12
  354. data/lib/phusion_passenger/standalone/stop_command.rb +3 -3
  355. data/lib/phusion_passenger/standalone/utils.rb +6 -2
  356. data/lib/phusion_passenger/templates/standalone/config.erb +37 -5
  357. data/lib/phusion_passenger/utils.rb +4 -7
  358. data/resources/mime.types +73 -0
  359. data/{misc → resources}/union_station_gateway.crt +0 -0
  360. data/test/cxx/BufferedIOTest.cpp +364 -0
  361. data/test/cxx/EventedClientTest.cpp +150 -13
  362. data/test/cxx/IOUtilsTest.cpp +399 -1
  363. data/test/cxx/MessageChannelTest.cpp +5 -120
  364. data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
  365. data/test/cxx/StaticStringTest.cpp +134 -0
  366. data/test/cxx/UtilsTest.cpp +16 -46
  367. data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +2 -2
  368. data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +1 -1
  369. data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +1 -1
  370. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
  371. data/test/support/allocate_memory.c +14 -0
  372. data/test/support/test_helper.rb +3 -0
  373. metadata +57 -174
  374. data/bin/passenger-stress-test +0 -345
  375. data/debian/postinst +0 -24
  376. data/doc/rdoc/classes/ConditionVariable.html +0 -215
  377. data/doc/rdoc/classes/Exception.html +0 -120
  378. data/doc/rdoc/classes/GC.html +0 -113
  379. data/doc/rdoc/classes/IO.html +0 -221
  380. data/doc/rdoc/classes/PhusionPassenger.html +0 -397
  381. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -180
  382. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -647
  383. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -654
  384. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +0 -92
  385. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  386. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  387. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  388. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  389. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -619
  390. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -142
  391. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +0 -368
  392. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +0 -231
  393. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +0 -588
  394. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +0 -92
  395. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +0 -92
  396. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +0 -147
  397. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +0 -279
  398. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +0 -92
  399. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +0 -92
  400. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +0 -123
  401. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +0 -92
  402. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +0 -341
  403. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +0 -294
  404. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +0 -199
  405. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -155
  406. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +0 -367
  407. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +0 -95
  408. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +0 -351
  409. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +0 -98
  410. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +0 -200
  411. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +0 -410
  412. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +0 -98
  413. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +0 -156
  414. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +0 -115
  415. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +0 -202
  416. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  417. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +0 -273
  418. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  419. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -162
  420. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  421. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  422. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -673
  423. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +0 -92
  424. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +0 -415
  425. data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +0 -134
  426. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +0 -129
  427. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +0 -1809
  428. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +0 -237
  429. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  430. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -312
  431. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +0 -98
  432. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -218
  433. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +0 -114
  434. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +0 -256
  435. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +0 -139
  436. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +0 -118
  437. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +0 -135
  438. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -378
  439. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +0 -111
  440. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +0 -252
  441. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +0 -161
  442. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +0 -368
  443. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +0 -132
  444. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +0 -151
  445. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +0 -189
  446. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +0 -177
  447. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +0 -341
  448. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +0 -203
  449. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +0 -156
  450. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +0 -168
  451. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +0 -86
  452. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +0 -135
  453. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  454. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -1550
  455. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +0 -204
  456. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +0 -171
  457. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +0 -140
  458. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +0 -260
  459. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  460. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -265
  461. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
  462. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +0 -561
  463. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  464. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  465. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -182
  466. data/doc/rdoc/classes/Process.html +0 -115
  467. data/doc/rdoc/classes/Signal.html +0 -139
  468. data/doc/rdoc/created.rid +0 -1
  469. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -276
  470. data/doc/rdoc/files/README.html +0 -157
  471. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -130
  472. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -135
  473. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  474. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  475. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +0 -126
  476. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +0 -132
  477. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  478. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +0 -129
  479. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +0 -127
  480. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +0 -141
  481. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +0 -126
  482. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +0 -146
  483. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +0 -125
  484. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +0 -132
  485. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  486. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  487. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +0 -122
  488. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -147
  489. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  490. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -127
  491. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  492. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +0 -127
  493. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +0 -132
  494. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  495. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +0 -127
  496. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +0 -129
  497. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +0 -126
  498. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +0 -126
  499. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +0 -126
  500. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +0 -126
  501. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +0 -127
  502. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +0 -128
  503. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +0 -126
  504. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -122
  505. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +0 -127
  506. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +0 -127
  507. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -137
  508. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  509. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +0 -127
  510. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  511. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -160
  512. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +0 -127
  513. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +0 -135
  514. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +0 -126
  515. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +0 -126
  516. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +0 -126
  517. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +0 -127
  518. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +0 -133
  519. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +0 -136
  520. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +0 -126
  521. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +0 -126
  522. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +0 -126
  523. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +0 -127
  524. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +0 -126
  525. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +0 -120
  526. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
  527. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +0 -122
  528. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +0 -126
  529. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -179
  530. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -132
  531. data/doc/rdoc/fr_class_index.html +0 -138
  532. data/doc/rdoc/fr_file_index.html +0 -108
  533. data/doc/rdoc/fr_method_index.html +0 -430
  534. data/doc/rdoc/index.html +0 -26
  535. data/doc/rdoc/rdoc-style.css +0 -187
  536. data/ext/apache2/LICENSE-CNRI.TXT +0 -79
  537. data/ext/common/Utils/BlockingScalar.h +0 -50
  538. data/ext/common/Utils/FileHandleGuard.h +0 -81
@@ -6,9 +6,10 @@
6
6
  * Boost Software License, Version 1.0. (See accompanying
7
7
  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8
8
  * Author: Jeff Garland, Bart Garst
9
- * $Date: 2009-06-06 07:27:35 -0400 (Sat, 06 Jun 2009) $
9
+ * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $
10
10
  */
11
11
 
12
+ #include <cstring>
12
13
  #include <string>
13
14
  #include <stdexcept>
14
15
  #include <boost/throw_exception.hpp>
@@ -41,7 +42,8 @@ namespace gregorian {
41
42
  boost::throw_exception(std::out_of_range(s));
42
43
  }
43
44
 
44
- std::tm datetm = {}; // zero initialization is needed for extension members, like tm_zone
45
+ std::tm datetm;
46
+ std::memset(&datetm, 0, sizeof(datetm));
45
47
  boost::gregorian::date::ymd_type ymd = d.year_month_day();
46
48
  datetm.tm_year = ymd.year - 1900;
47
49
  datetm.tm_mon = ymd.month - 1;
@@ -6,7 +6,7 @@
6
6
  * Boost Software License, Version 1.0. (See accompanying
7
7
  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8
8
  * Author: Jeff Garland, Bart Garst
9
- * $Date: 2009-06-04 07:36:43 -0400 (Thu, 04 Jun 2009) $
9
+ * $Date: 2010-05-10 05:15:48 -0400 (Mon, 10 May 2010) $
10
10
  */
11
11
 
12
12
 
@@ -98,9 +98,9 @@ namespace date_time {
98
98
 
99
99
  std::tm curr;
100
100
  std::tm* curr_ptr = converter(&t, &curr);
101
- date_type d(curr_ptr->tm_year + 1900,
102
- curr_ptr->tm_mon + 1,
103
- curr_ptr->tm_mday);
101
+ date_type d(static_cast< typename date_type::year_type::value_type >(curr_ptr->tm_year + 1900),
102
+ static_cast< typename date_type::month_type::value_type >(curr_ptr->tm_mon + 1),
103
+ static_cast< typename date_type::day_type::value_type >(curr_ptr->tm_mday));
104
104
 
105
105
  //The following line will adjust the fractional second tick in terms
106
106
  //of the current time system. For example, if the time system
@@ -108,9 +108,9 @@ namespace date_time {
108
108
  //and all the fractional seconds return 0.
109
109
  int adjust = static_cast< int >(resolution_traits_type::res_adjust() / 1000000);
110
110
 
111
- time_duration_type td(curr_ptr->tm_hour,
112
- curr_ptr->tm_min,
113
- curr_ptr->tm_sec,
111
+ time_duration_type td(static_cast< typename time_duration_type::hour_type >(curr_ptr->tm_hour),
112
+ static_cast< typename time_duration_type::min_type >(curr_ptr->tm_min),
113
+ static_cast< typename time_duration_type::sec_type >(curr_ptr->tm_sec),
114
114
  sub_sec * adjust);
115
115
 
116
116
  return time_type(d,td);
@@ -6,9 +6,10 @@
6
6
  * Boost Software License, Version 1.0. (See accompanying
7
7
  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8
8
  * Author: Jeff Garland, Bart Garst
9
- * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $
9
+ * $Date: 2010-06-09 14:10:13 -0400 (Wed, 09 Jun 2010) $
10
10
  */
11
11
 
12
+ #include <cstring>
12
13
  #include <boost/date_time/posix_time/ptime.hpp>
13
14
  #include <boost/date_time/posix_time/posix_time_duration.hpp>
14
15
  #include <boost/date_time/filetime_functions.hpp>
@@ -43,7 +44,8 @@ namespace posix_time {
43
44
  //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components
44
45
  inline
45
46
  std::tm to_tm(const boost::posix_time::time_duration& td) {
46
- std::tm timetm = {};
47
+ std::tm timetm;
48
+ std::memset(&timetm, 0, sizeof(timetm));
47
49
  timetm.tm_hour = date_time::absolute_value(td.hours());
48
50
  timetm.tm_min = date_time::absolute_value(td.minutes());
49
51
  timetm.tm_sec = date_time::absolute_value(td.seconds());
@@ -7,7 +7,7 @@
7
7
  * Boost Software License, Version 1.0. (See accompanying
8
8
  * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
9
9
  * Author: Martin Andrian, Jeff Garland, Bart Garst
10
- * $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $
10
+ * $Date: 2010-06-09 12:39:31 -0400 (Wed, 09 Jun 2010) $
11
11
  */
12
12
 
13
13
  #include <cctype>
@@ -21,6 +21,7 @@
21
21
  #include <boost/assert.hpp>
22
22
  #include <boost/lexical_cast.hpp>
23
23
  #include <boost/throw_exception.hpp>
24
+ #include <boost/range/as_literal.hpp>
24
25
  #include <boost/algorithm/string/erase.hpp>
25
26
  #include <boost/algorithm/string/replace.hpp>
26
27
  #include <boost/date_time/compiler_config.hpp>
@@ -42,6 +43,10 @@ namespace date_time {
42
43
  static const char_type seconds_format[3]; // S
43
44
  static const char_type hours_format[3]; // H
44
45
  static const char_type unrestricted_hours_format[3]; // O
46
+ static const char_type full_24_hour_time_format[3]; // T
47
+ static const char_type full_24_hour_time_expanded_format[9]; // HH:MM:SS
48
+ static const char_type short_24_hour_time_format[3]; // R
49
+ static const char_type short_24_hour_time_expanded_format[6]; // HH:MM
45
50
  static const char_type standard_format[9]; // x X
46
51
  static const char_type zone_abbrev_format[3]; // z
47
52
  static const char_type zone_name_format[3]; // Z
@@ -73,8 +78,7 @@ namespace date_time {
73
78
 
74
79
  template <class CharT>
75
80
  const typename time_formats<CharT>::char_type
76
- time_formats<CharT>::seconds_with_fractional_seconds_format[3] =
77
- {'%','s'};
81
+ time_formats<CharT>::seconds_with_fractional_seconds_format[3] = {'%','s'};
78
82
 
79
83
  template <class CharT>
80
84
  const typename time_formats<CharT>::char_type
@@ -88,6 +92,24 @@ namespace date_time {
88
92
  const typename time_formats<CharT>::char_type
89
93
  time_formats<CharT>::unrestricted_hours_format[3] = {'%','O'};
90
94
 
95
+ template <class CharT>
96
+ const typename time_formats<CharT>::char_type
97
+ time_formats<CharT>::full_24_hour_time_format[3] = {'%','T'};
98
+
99
+ template <class CharT>
100
+ const typename time_formats<CharT>::char_type
101
+ time_formats<CharT>::full_24_hour_time_expanded_format[9] =
102
+ {'%','H',':','%','M',':','%','S'};
103
+
104
+ template <class CharT>
105
+ const typename time_formats<CharT>::char_type
106
+ time_formats<CharT>::short_24_hour_time_format[3] = {'%','R'};
107
+
108
+ template <class CharT>
109
+ const typename time_formats<CharT>::char_type
110
+ time_formats<CharT>::short_24_hour_time_expanded_format[6] =
111
+ {'%','H',':','%','M'};
112
+
91
113
  template <class CharT>
92
114
  const typename time_formats<CharT>::char_type
93
115
  //time_formats<CharT>::standard_format[5] = {'%','c',' ','%','z'};
@@ -180,6 +202,7 @@ namespace date_time {
180
202
  class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
181
203
  class time_facet :
182
204
  public boost::date_time::date_facet<typename time_type::date_type , CharT, OutItrT> {
205
+ typedef time_formats< CharT > formats_type;
183
206
  public:
184
207
  typedef typename time_type::date_type date_type;
185
208
  typedef typename time_type::time_duration_type time_duration_type;
@@ -266,6 +289,14 @@ namespace date_time {
266
289
  }
267
290
  string_type format(this->m_format);
268
291
 
292
+ // %T and %R have to be replaced here since they are not standard
293
+ boost::algorithm::replace_all(format,
294
+ boost::as_literal(formats_type::full_24_hour_time_format),
295
+ boost::as_literal(formats_type::full_24_hour_time_expanded_format));
296
+ boost::algorithm::replace_all(format,
297
+ boost::as_literal(formats_type::short_24_hour_time_format),
298
+ boost::as_literal(formats_type::short_24_hour_time_expanded_format));
299
+
269
300
  string_type frac_str;
270
301
  if (format.find(seconds_with_fractional_seconds_format) != string_type::npos) {
271
302
  // replace %s with %S.nnn
@@ -366,7 +397,7 @@ namespace date_time {
366
397
  }
367
398
  if (format.find(fractional_seconds_format) != string_type::npos) {
368
399
  // replace %f with nnnnnnn
369
- if (!frac_str.size()) {
400
+ if (frac_str.empty()) {
370
401
  frac_str = fractional_seconds_as_string(a_time.time_of_day(), false);
371
402
  }
372
403
  boost::algorithm::replace_all(format,
@@ -428,6 +459,14 @@ namespace date_time {
428
459
  positive_sign);
429
460
  }
430
461
 
462
+ // %T and %R have to be replaced here since they are not standard
463
+ boost::algorithm::replace_all(format,
464
+ boost::as_literal(formats_type::full_24_hour_time_format),
465
+ boost::as_literal(formats_type::full_24_hour_time_expanded_format));
466
+ boost::algorithm::replace_all(format,
467
+ boost::as_literal(formats_type::short_24_hour_time_format),
468
+ boost::as_literal(formats_type::short_24_hour_time_expanded_format));
469
+
431
470
  /*
432
471
  * It is possible for a time duration to span more then 24 hours.
433
472
  * Standard time_put::put is obliged to behave the same as strftime
@@ -1,5 +1,6 @@
1
1
  // Copyright 2005 Caleb Epstein
2
2
  // Copyright 2006 John Maddock
3
+ // Copyright 2010 Rene Rivera
3
4
  // Distributed under the Boost Software License, Version 1.0. (See accompany-
4
5
  // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6
 
@@ -42,10 +43,12 @@
42
43
  # error Unknown machine endianness detected.
43
44
  # endif
44
45
  # define BOOST_BYTE_ORDER __BYTE_ORDER
45
- #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
46
+ #elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) || \
47
+ defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
46
48
  # define BOOST_BIG_ENDIAN
47
49
  # define BOOST_BYTE_ORDER 4321
48
- #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
50
+ #elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) || \
51
+ defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
49
52
  # define BOOST_LITTLE_ENDIAN
50
53
  # define BOOST_BYTE_ORDER 1234
51
54
  #elif defined(__sparc) || defined(__sparc__) \
@@ -173,8 +173,8 @@ inline void lcast_set_precision(std::ios_base& stream, T*)
173
173
  template<class Source, class Target>
174
174
  inline void lcast_set_precision(std::ios_base& stream, Source*, Target*)
175
175
  {
176
- std::streamsize const s = lcast_get_precision((Source*)0);
177
- std::streamsize const t = lcast_get_precision((Target*)0);
176
+ std::streamsize const s = lcast_get_precision(static_cast<Source*>(0));
177
+ std::streamsize const t = lcast_get_precision(static_cast<Target*>(0));
178
178
  stream.precision(s > t ? s : t);
179
179
  }
180
180
 
@@ -74,7 +74,7 @@ template<class T> struct sp_typeid_
74
74
  }
75
75
  };
76
76
 
77
- template<class T> sp_typeinfo sp_typeid_< T >::ti_( sp_typeid_< T >::name() );
77
+ template<class T> sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name();
78
78
 
79
79
  template<class T> struct sp_typeid_< T & >: sp_typeid_< T >
80
80
  {
@@ -65,6 +65,11 @@
65
65
  #else
66
66
  #define BOOST_MSVC_WORKAROUND_GUARD 0
67
67
  #endif
68
+ #ifndef BOOST_MSVC_FULL_VER
69
+ #define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1
70
+ #else
71
+ #define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0
72
+ #endif
68
73
  #ifndef __GNUC__
69
74
  #define __GNUC___WORKAROUND_GUARD 1
70
75
  #else
@@ -1,4 +1,4 @@
1
- //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
1
+ //Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
2
2
 
3
3
  //Distributed under the Boost Software License, Version 1.0. (See accompanying
4
4
  //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -25,7 +25,7 @@ boost
25
25
  {
26
26
  public:
27
27
 
28
- virtual char const * tag_typeid_name() const = 0;
28
+ virtual std::string tag_typeid_name() const = 0;
29
29
  virtual std::string value_as_string() const = 0;
30
30
 
31
31
  protected:
@@ -62,7 +62,7 @@ boost
62
62
 
63
63
  private:
64
64
 
65
- char const * tag_typeid_name() const;
65
+ std::string tag_typeid_name() const;
66
66
  std::string value_as_string() const;
67
67
 
68
68
  value_type value_;
@@ -28,6 +28,26 @@
28
28
  namespace
29
29
  boost
30
30
  {
31
+ typedef shared_ptr<exception_detail::clone_base const> exception_ptr;
32
+
33
+ exception_ptr current_exception();
34
+
35
+ template <class T>
36
+ inline
37
+ exception_ptr
38
+ copy_exception( T const & e )
39
+ {
40
+ try
41
+ {
42
+ throw enable_current_exception(e);
43
+ }
44
+ catch(
45
+ ... )
46
+ {
47
+ return current_exception();
48
+ }
49
+ }
50
+
31
51
  #ifndef BOOST_NO_RTTI
32
52
  typedef error_info<struct tag_original_exception_type,std::type_info const *> original_exception_type;
33
53
 
@@ -39,91 +59,47 @@ boost
39
59
  }
40
60
  #endif
41
61
 
42
- class exception_ptr;
43
- exception_ptr current_exception();
44
- void rethrow_exception( exception_ptr const & );
45
-
46
- class
47
- exception_ptr
62
+ namespace
63
+ exception_detail
48
64
  {
49
- typedef bool exception_ptr::*unspecified_bool_type;
50
- friend exception_ptr current_exception();
51
- friend void rethrow_exception( exception_ptr const & );
52
-
53
- shared_ptr<exception_detail::clone_base const> c_;
54
- bool bad_alloc_;
55
-
56
65
  struct
57
- bad_alloc_tag
58
- {
59
- };
60
-
61
- explicit
62
- exception_ptr( bad_alloc_tag ):
63
- bad_alloc_(true)
64
- {
65
- }
66
-
67
- explicit
68
- exception_ptr( shared_ptr<exception_detail::clone_base const> const & c ):
69
- c_(c),
70
- bad_alloc_(false)
71
- {
72
- BOOST_ASSERT(c);
73
- }
74
-
75
- void
76
- rethrow() const
77
- {
78
- BOOST_ASSERT(*this);
79
- if( bad_alloc_ )
80
- throw enable_current_exception(std::bad_alloc());
81
- else
82
- c_->rethrow();
83
- }
84
-
85
- bool
86
- empty() const
87
- {
88
- return !bad_alloc_ && !c_;
89
- }
90
-
91
- public:
92
-
93
- exception_ptr():
94
- bad_alloc_(false)
95
- {
96
- }
97
-
98
- ~exception_ptr() throw()
99
- {
100
- }
66
+ bad_alloc_:
67
+ boost::exception,
68
+ std::bad_alloc
69
+ {
70
+ };
101
71
 
102
- operator unspecified_bool_type() const
72
+ template <int Dummy>
73
+ exception_ptr
74
+ get_bad_alloc()
103
75
  {
104
- return empty() ? 0 : &exception_ptr::bad_alloc_;
76
+ bad_alloc_ ba;
77
+ exception_detail::clone_impl<bad_alloc_> c(ba);
78
+ c <<
79
+ throw_function(BOOST_CURRENT_FUNCTION) <<
80
+ throw_file(__FILE__) <<
81
+ throw_line(__LINE__);
82
+ static exception_ptr ep(new exception_detail::clone_impl<bad_alloc_>(c));
83
+ return ep;
105
84
  }
106
85
 
107
- friend
108
- bool
109
- operator==( exception_ptr const & a, exception_ptr const & b )
86
+ template <int Dummy>
87
+ struct
88
+ exception_ptr_bad_alloc
110
89
  {
111
- return a.c_==b.c_ && a.bad_alloc_==b.bad_alloc_;
112
- }
90
+ static exception_ptr const e;
91
+ };
113
92
 
114
- friend
115
- bool
116
- operator!=( exception_ptr const & a, exception_ptr const & b )
117
- {
118
- return !(a==b);
119
- }
120
- };
93
+ template <int Dummy>
94
+ exception_ptr const
95
+ exception_ptr_bad_alloc<Dummy>::
96
+ e = get_bad_alloc<Dummy>();
97
+ }
121
98
 
122
99
  class
123
100
  unknown_exception:
124
- public exception,
125
- public std::exception,
126
- public exception_detail::clone_base
101
+ public boost::exception,
102
+ public std::exception
127
103
  {
128
104
  public:
129
105
 
@@ -150,18 +126,6 @@ boost
150
126
 
151
127
  private:
152
128
 
153
- exception_detail::clone_base const *
154
- clone() const
155
- {
156
- return new unknown_exception(*this);
157
- }
158
-
159
- void
160
- rethrow() const
161
- {
162
- throw*this;
163
- }
164
-
165
129
  template <class E>
166
130
  void
167
131
  add_original_type( E const & e )
@@ -179,8 +143,7 @@ boost
179
143
  class
180
144
  current_exception_std_exception_wrapper:
181
145
  public T,
182
- public boost::exception,
183
- public clone_base
146
+ public boost::exception
184
147
  {
185
148
  public:
186
149
 
@@ -204,18 +167,6 @@ boost
204
167
 
205
168
  private:
206
169
 
207
- clone_base const *
208
- clone() const
209
- {
210
- return new current_exception_std_exception_wrapper(*this);
211
- }
212
-
213
- void
214
- rethrow() const
215
- {
216
- throw *this;
217
- }
218
-
219
170
  template <class E>
220
171
  void
221
172
  add_original_type( E const & e )
@@ -228,7 +179,7 @@ boost
228
179
 
229
180
  #ifdef BOOST_NO_RTTI
230
181
  template <class T>
231
- exception const *
182
+ boost::exception const *
232
183
  get_boost_exception( T const * )
233
184
  {
234
185
  try
@@ -236,7 +187,7 @@ boost
236
187
  throw;
237
188
  }
238
189
  catch(
239
- exception & x )
190
+ boost::exception & x )
240
191
  {
241
192
  return &x;
242
193
  }
@@ -247,50 +198,50 @@ boost
247
198
  }
248
199
  #else
249
200
  template <class T>
250
- exception const *
201
+ boost::exception const *
251
202
  get_boost_exception( T const * x )
252
203
  {
253
- return dynamic_cast<exception const *>(x);
204
+ return dynamic_cast<boost::exception const *>(x);
254
205
  }
255
206
  #endif
256
207
 
257
208
  template <class T>
258
209
  inline
259
- shared_ptr<clone_base const>
210
+ exception_ptr
260
211
  current_exception_std_exception( T const & e1 )
261
212
  {
262
213
  if( boost::exception const * e2 = get_boost_exception(&e1) )
263
- return shared_ptr<current_exception_std_exception_wrapper<T> const>(new current_exception_std_exception_wrapper<T>(e1,*e2));
214
+ return boost::copy_exception(current_exception_std_exception_wrapper<T>(e1,*e2));
264
215
  else
265
- return shared_ptr<current_exception_std_exception_wrapper<T> const>(new current_exception_std_exception_wrapper<T>(e1));
216
+ return boost::copy_exception(current_exception_std_exception_wrapper<T>(e1));
266
217
  }
267
218
 
268
219
  inline
269
- shared_ptr<clone_base const>
220
+ exception_ptr
270
221
  current_exception_unknown_exception()
271
222
  {
272
- return shared_ptr<unknown_exception const>(new unknown_exception());
223
+ return boost::copy_exception(unknown_exception());
273
224
  }
274
225
 
275
226
  inline
276
- shared_ptr<clone_base const>
227
+ exception_ptr
277
228
  current_exception_unknown_boost_exception( boost::exception const & e )
278
229
  {
279
- return shared_ptr<unknown_exception const>(new unknown_exception(e));
230
+ return boost::copy_exception(unknown_exception(e));
280
231
  }
281
232
 
282
233
  inline
283
- shared_ptr<clone_base const>
234
+ exception_ptr
284
235
  current_exception_unknown_std_exception( std::exception const & e )
285
236
  {
286
237
  if( boost::exception const * be = get_boost_exception(&e) )
287
238
  return current_exception_unknown_boost_exception(*be);
288
239
  else
289
- return shared_ptr<unknown_exception const>(new unknown_exception(e));
240
+ return boost::copy_exception(unknown_exception(e));
290
241
  }
291
242
 
292
243
  inline
293
- shared_ptr<clone_base const>
244
+ exception_ptr
294
245
  current_exception_impl()
295
246
  {
296
247
  try
@@ -300,7 +251,7 @@ boost
300
251
  catch(
301
252
  exception_detail::clone_base & e )
302
253
  {
303
- return shared_ptr<exception_detail::clone_base const>(e.clone());
254
+ return exception_ptr(e.clone());
304
255
  }
305
256
  catch(
306
257
  std::domain_error & e )
@@ -396,24 +347,28 @@ boost
396
347
  exception_ptr
397
348
  current_exception()
398
349
  {
350
+ exception_ptr ret;
351
+ BOOST_ASSERT(!ret);
399
352
  try
400
353
  {
401
- return exception_ptr(exception_detail::current_exception_impl());
354
+ ret=exception_detail::current_exception_impl();
402
355
  }
403
356
  catch(
404
357
  std::bad_alloc & )
405
358
  {
359
+ ret=exception_detail::exception_ptr_bad_alloc<42>::e;
406
360
  }
407
361
  catch(
408
362
  ... )
409
363
  {
410
364
  try
411
365
  {
412
- return exception_ptr(exception_detail::current_exception_std_exception(std::bad_exception()));
366
+ ret=exception_detail::current_exception_std_exception(std::bad_exception());
413
367
  }
414
368
  catch(
415
369
  std::bad_alloc & )
416
370
  {
371
+ ret=exception_detail::exception_ptr_bad_alloc<42>::e;
417
372
  }
418
373
  catch(
419
374
  ... )
@@ -421,30 +376,16 @@ boost
421
376
  BOOST_ASSERT(0);
422
377
  }
423
378
  }
424
- return exception_ptr(exception_ptr::bad_alloc_tag());
425
- }
426
-
427
- template <class T>
428
- inline
429
- exception_ptr
430
- copy_exception( T const & e )
431
- {
432
- try
433
- {
434
- throw enable_current_exception(e);
435
- }
436
- catch(
437
- ... )
438
- {
439
- return current_exception();
440
- }
379
+ BOOST_ASSERT(ret);
380
+ return ret;
441
381
  }
442
382
 
443
383
  inline
444
384
  void
445
385
  rethrow_exception( exception_ptr const & p )
446
386
  {
447
- p.rethrow();
387
+ BOOST_ASSERT(p);
388
+ p->rethrow();
448
389
  }
449
390
 
450
391
  inline