Commit graph

309 commits

Author SHA1 Message Date
ngoto
1fcde7c2e2 * ext/dl/lib/dl/func.rb (DL::Function#unbind, #bound?): suppress NoMethodError when Fiddle is available. [ruby-core:50756] [Bug #7543]
* test/dl/test_func.rb (test_bound*, test_unbind*): tests for the above.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-11 15:24:31 +00:00
naruse
addefaa6a3 * ext/dl/win32/extconf.rb: Fix typo
by Santiago Pastorino <santiago@wyeworks.com>
  https://github.com/ruby/ruby/pull/221 fix GH-221

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-11 03:02:04 +00:00
usa
f9aa334b5b * ext/fiddle/win32/*: library ports from DL to Fiddle.
* ext/dl/win32/extconf.rb: check fiddle.  often case dl compiled prior
  to fiddle, so this change is no meaning.  in most cases, simply
  fiddle/win32 overwrite dl/win32.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-10 09:01:27 +00:00
ngoto
34592fb5b6 * ext/dl/lib/dl/func.rb (CALL_TYPE_TO_ABI, FiddleClosureCFunc): exclude private constants and methods from rdoc
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-06 14:30:24 +00:00
ngoto
9920da5593 * ext/dl/lib/dl/func.rb (DL::Function#bind): When Fiddle is used,
@ptr should be updated. This fixes SEGV raised in DL::Function#call
  after calling DL::Function#bind. [Bug #7516] [ruby-dev:46708]
* test/dl/test_func.rb (test_bind): test for the above


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-05 13:24:19 +00:00
nobu
94cb1c9b4b * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38204 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-05 04:08:17 +00:00
ngoto
f1841f43eb * ext/dl/lib/dl/func.rb (DL::Function#initialize, DL::Function#bind):
ABI should be set by using CFunc#calltype even when Fiddle is used.
  When Fiddle is used and a block is given, name shoud not be ignored.
  [ruby-core:50562] [Bug #7514]
* ext/dl/lib/dl/import.rb (DL::Importer#bind_function): should respect
  abi and name when Fiddle is used.
* test/dl/test_func.rb (test_name_with_block): test for "name" method
  with giving a block.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-12-05 03:20:05 +00:00
naruse
b1b7c389fb suppress warnings: uninitialized variables
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-30 19:10:14 +00:00
zzak
4ba88161ee * ext/dl/lib/dl.rb: Deprecation notice for DL
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-27 23:27:36 +00:00
tenderlove
c1fb6a82dc * ext/fiddle/handle.c: Make Fiddle independent of DL, copy DL::Handle
to Fiddle::Handle.
* ext/fiddle/pointer.c: Make Fiddle independent of DL, copy
  DL::Pointer to Fiddle::Pointer.
* test/fiddle/test_func.rb: relevent tests
* test/fiddle/test_handle.rb: ditto
* test/fiddle/test_pointer.rb: ditto
* ext/dl/lib/dl/struct.rb: use Fiddle::Pointer if available
* ext/fiddle/extconf.rb: check for dlfcn.h
* ext/fiddle/fiddle.c: add constants for sizeof() things
* ext/fiddle/fiddle.h: include dlfcn.h
* ext/fiddle/function.c: expose a C function for creating new
  Fiddle::Function objects.
* ext/fiddle/lib/fiddle.rb: include constants for dl backwards compat
* ext/fiddle/lib/fiddle/function.rb: read the pointer from the
  function for dl backwards compat.
* test/dl/test_callback.rb: check the addresses of the pointers rather
  than their types.
* test/fiddle/helper.rb: remove dependency on dl
* test/fiddle/test_closure.rb: ditto
* test/fiddle/test_fiddle.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-27 19:54:50 +00:00
tenderlove
1eac1cb21e reverting r37881
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37891 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-27 05:59:34 +00:00
tenderlove
ab2a7a9346 * ext/fiddle/handle.c: Make Fiddle independent of DL, copy DL::Handle
to Fiddle::Handle.
* ext/fiddle/pointer.c: Make Fiddle independent of DL, copy
  DL::Pointer to Fiddle::Pointer.
* test/fiddle/test_func.rb: relevent tests
* test/fiddle/test_handle.rb: ditto
* test/fiddle/test_pointer.rb: ditto
* ext/dl/lib/dl/struct.rb: use Fiddle::Pointer if available
* ext/fiddle/extconf.rb: check for dlfcn.h
* ext/fiddle/fiddle.c: add constants for sizeof() things
* ext/fiddle/fiddle.h: include dlfcn.h
* ext/fiddle/function.c: expose a C function for creating new
  Fiddle::Function objects.
* ext/fiddle/lib/fiddle.rb: include constants for dl backwards compat
* ext/fiddle/lib/fiddle/function.rb: read the pointer from the
  function for dl backwards compat.
* test/dl/test_callback.rb: check the addresses of the pointers rather
  than their types.
* test/fiddle/helper.rb: remove dependency on dl
* test/fiddle/test_closure.rb: ditto
* test/fiddle/test_fiddle.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37881 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-27 01:38:41 +00:00
shirosaki
9bb55f7633 * ext/dl/win32/lib/Win32API.rb (Win32API#call): use 64bit pointer for x64
Windows. This would fix
  TestSecureRandom#test_s_random_bytes_without_openssl error.
  [ruby-core:47451] [Bug #6990]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-05 14:00:41 +00:00
tenderlove
4b1df2ae45 * ext/dl/lib/dl/struct.rb: fix strange require order. [ruby-dev:45702]
* ext/dl/lib/dl/value.rb: ditto

* test/dl/test_c_struct_entry.rb: remove strange require order from
  tests.

* test/dl/test_c_union_entity.rb: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-30 17:54:34 +00:00
nobu
af6c038b23 remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-09-04 00:57:31 +00:00
usa
3401fc5984 * ext/dl/lib/dl/func.rb (DL::Function#bind): fixes an error in
test/dl/test_import.rb (DL::TestImport#test_carried_function)
  introduced by r36718.
  the instance of the anonymous class which wraps the block should have
  same methods and instance variables of self.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36753 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-21 06:53:40 +00:00
usa
4a097d2e3e * ext/dl/lib/dl/func.rb (DL::Function#bind): allow to return/break from
the callback method. (Fiddle already allows it.)
  [Bug #6389] [ruby-dev:45604]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-17 03:42:19 +00:00
usa
1f23350194 * ext/dl/cfunc.c (rb_dlcfunc_call): also needed the workaround for VC8
for x64.  [ruby-dev:45875] [Bug #6676]
  reported by aves_ramphastos (Seigo Ishigane)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36281 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-03 03:10:02 +00:00
drbrain
fe962cde15 * ext/dl/lib/dl/struct.rb (DL::CStructEntity#set_ctypes): Refactored
#set_ctypes using newer ruby features to simplify its implementation.
* test/dl/test_c_struct_entry.rb (class DL):  Test to verify
  refactoring.

Reviewed by Aaron Patterson.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-31 22:07:09 +00:00
drbrain
40cf3e0cca * ext/dl/lib/dl/struct.rb (DL::CStructEntity::size): Refactored ::size
to remove unused variables and simplify using newer ruby features.
* test/dl/test_c_struct_entry.rb:  Test to validate refactoring

Reviewed by Aaron Patterson


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-31 00:27:34 +00:00
drbrain
0381ab0769 * ext/dl/lib/dl/struct.rb (DL::CUnionEntity#set_ctypes): Refactored
#set_types to reuse DL::CUnionEntity::size
* test/dl/test_c_union_entity.rb:  Added test

Reviewed by Aaron Paterson


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-30 23:41:07 +00:00
drbrain
f1cb6ea08f * ext/dl/lib/dl/struct.rb (DL::CUnionEntity::size): Fixed ::size to
return the size of the union.
* test/dl/test_c_union_entity.rb:  Test for DL::CUnionEntity::size

Reviewed by Aaron Patterson


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35848 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-30 23:20:29 +00:00
drbrain
2e87e2150e * ext/dl: Added documentation. Patch by Vincent Batts.
[ruby-trunk - Bug #6496]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-05-30 22:48:42 +00:00
usa
62d71852df * ext/dl/cfunc.c (rb_dlcfunc_call): should convert a Bignum value to
unsigned long long on Win64.
  [ruby-core:44636][Bug #6364] reported by raylinn@gmail.com (ray linn)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-04-27 03:36:33 +00:00
drbrain
da39d32f60 * encoding.c (rb_enc_codepoint_len): Use UNREACHABLE to avoid "control
reaches end of non-void function" warnings.  [ruby-trunk - Bug #6066]
* re.c (name_to_backref_number):  ditto.
* object.c (rb_Float):  ditto.
* io.c (io_readpartial):  ditto.
* io.c (io_read_nonblock):  ditto.
* pack.c (rb_uv_to_utf8):  ditto.
* proc.c (rb_method_entry_arity):  ditto.
* vm_method.c (rb_f_notimplement):  ditto.
* struct.c (rb_struct_aset_id):  ditto.
* class.c (rb_scan_args):  ditto.
* process.c (rlimit_resource_type):  ditto.
* process.c (rlimit_resource_value):  ditto.
* process.c (p_uid_switch):  ditto.
* process.c (p_gid_switch):  ditto.
* ext/digest/digest.c (rb_digest_instance_update):  ditto.
* ext/digest/digest.c (rb_digest_instance_finish):  ditto.
* ext/digest/digest.c (rb_digest_instance_reset):  ditto.
* ext/digest/digest.c (rb_digest_instance_block_length):  ditto.
* ext/bigdecimal/bigdecimal.c (BigDecimalCmp):  ditto.
* ext/dl/handle.c (rb_dlhandle_close):  ditto.
* ext/tk/tcltklib.c (pending_exception_check0):  ditto.
* ext/tk/tcltklib.c (pending_exception_check1):  ditto.
* ext/tk/tcltklib.c (ip_cancel_eval_core):  ditto.
* ext/tk/tcltklib.c (lib_get_reltype_name):  ditto.
* ext/tk/tcltklib.c (create_dummy_encoding_for_tk_core):  ditto.
* ext/tk/tkutil/tkutil.c (tk_hash_kv):  ditto.
* ext/openssl/ossl_ssl.c (ossl_ssl_session_reused):  ditto.
* ext/openssl/ossl_pkey_ec.c (ossl_ec_key_dsa_verify_asn1):  ditto.
* ext/openssl/ossl_pkey_ec.c (ossl_ec_point_is_at_infinit):  ditto.
* ext/openssl/ossl_pkey_ec.c (ossl_ec_point_is_on_curve):  ditto.
* ext/fiddle/conversions.c (generic_to_value):  ditto.
* ext/socket/raddrinfo.c (rsock_io_socket_addrinfo):  ditto.
* ext/socket/socket.c (sock_s_getnameinfo):  ditto.
* ext/ripper/eventids2.c (ripper_token2eventid):  ditto.
* cont.c (return_fiber):  ditto.
* dmydln.c (dln_load):  ditto.
* vm_insnhelper.c (vm_search_normal_superclass):  ditto.
* bignum.c (big_fdiv):  ditto.
* marshal.c (r_symlink):  ditto.
* marshal.c (r_symbol):  ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-04-13 23:45:37 +00:00
nobu
b4288080e7 * ext/dl/dl.c (Init_dl): support intrinsic types, size_t, ptrdiff_t
and intptr_t.  [ruby-core:42460][Feature #5992]
* ext/fiddle/fiddle.c (Init_fiddle): ditto.
* ext/dl/lib/dl/cparser.rb (DL::CParser#parse_ctype): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-25 05:47:16 +00:00
nobu
14c97cf9b6 * ext/dl/extconf.rb: clang does not use -fno-defer-pop during compilation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34523 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 16:41:08 +00:00
nobu
96ab37015e * ext/dl/dl.h (ALIGN_OF): use offsetof().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 16:30:43 +00:00
nobu
196151158f * ext/dl/dl.h (DLALIGN): round up at once and get rid of overflow.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34521 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 16:29:08 +00:00
nobu
f90f02ab20 * ext/dl/dl.c (Init_dl): fix mangled documnet.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34510 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 07:48:22 +00:00
usa
b2ba3242ea * ext/dl/lib/value.rb (DL::ValueUtil.{unsigned_value,signed_value}):
currenly pack/unpack does not accept "q!" and "Q!".


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 07:10:26 +00:00
usa
70b504badb * ext/dl/lib/types.rb: Win64 support.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34504 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-02-09 02:32:58 +00:00
nobu
ef84b7c678 * ext/dl/cptr.c (rb_dlptr_new2): remove unused variable.
* ext/iconv/iconv.c (get_iconv_opt_i): ditto.

	* ext/syck/token.c (Plain): fix types on LP64.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34400 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-01-30 21:47:35 +00:00
nobu
67bf09903f * ext/dl/callback/mkcallback.rb (gencallback): suppress unused
variables.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-01-14 13:24:12 +00:00
naruse
56dc6f5acc * gc.c (ruby_mimmalloc): defined for objects need not rb_objspace,
but should return pointer suitable for ruby_xfree;
  main vm and main thread.
  patched by Sokolov Yura. https://github.com/ruby/ruby/pull/79

* internal.h: ditto.

* vm.c (Init_BareVM): use ruby_mimmalloc.

* ext/dl/cfunc.c: #include <ruby/util.h>.

* ext/syslog/syslog.c: use xfree because it is allocated by
  ruby_strdup.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34257 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-01-10 03:49:10 +00:00
drbrain
de6d4f7e7b * ext/dl: Add documentation. Patch by Vincent Batts. [Ruby 1.9 - Bug #5192]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-08-16 00:34:51 +00:00
nobu
d3d44cd928 * ext/dl/callback/mkcallback.rb (gencallback): use PTR2NUM.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-28 03:32:56 +00:00
nobu
eda13c7ee2 * ext/dl/cptr.c (rb_dlptr_aref, rb_dlptr_aset): check NULL pointer
dereference.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-28 03:32:52 +00:00
nobu
ad8ab9c013 * ext/dl/cptr.c (rb_dlptr_s_to_ptr): use rb_check_funcall.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32719 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-28 03:32:48 +00:00
nobu
79d8d7439a * ext/dl/cptr.c (rb_dlptr_s_to_ptr): fix wrapping condition.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-28 03:32:45 +00:00
nobu
9f3914aba6 * ext/dl/cfunc.c (dlcfunc_mark), ext/dl/cptr.c (dlptr_mark):
workaround to mark wrapped object.  this is not a true fix,
  because [Bug #4929] is caused by the interface design of DL.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32712 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-27 17:15:09 +00:00
naruse
13f62a384b * ext/dl/handle.c (dlhandle_sym): clear previous error with dlerror()
before calling dlsym(). [ruby-dev:44091] [Bug #5021]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-07-20 06:50:54 +00:00
naruse
6b1cf264a8 * ext/sdbm/_sdbm.c (sdbm_open): use size_t.
* ext/syck/bytecode.c: ditto.

* ext/sdbm/_sdbm.c (delpair): use ptrdiff_t.

* ext/sdbm/init.c: use RSTRING_LENINT.

* ext/dl/handle.c: suppress warning: shorten-64-to-32.

* ext/strscan/strscan.c: ditto.

* ext/syck/emitter.c: ditto.

* ext/syck/implicit.c: ditto.

* ext/syck/syck.c: ditto.

* ext/syck/token.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31176 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-03-25 06:46:57 +00:00
akr
698960439d * ext/dl/cfunc.c: parenthesize macro arguments.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-02-11 14:17:24 +00:00
akr
ac2c1a2968 * ext/dl/dl.h: parenthesize macro arguments.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-02-10 14:12:57 +00:00
tenderlove
20e2c4cb36 * Use _WIN32 rather than checking for windows.h. Thanks Jon Forums!
[ruby-core:33977]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30450 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-01-05 03:13:18 +00:00
luislavena
5d47965174 * ext/dl/win32/registry.rb: Corrected RegCreateKeyExA signature.
Patch by Rafal Michalski [ruby-core:33874] [Ruby 1.9-Bug#4203]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30377 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-12-25 19:33:46 +00:00
naruse
b2ea6df3b5 * ext/dl/lib/dl/struct.rb: clean a warning: assigned but unused
variable. patched by Kouhei Yanagita. [ruby-dev:42722]

* ext/dl/lib/dl/import.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30146 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-12-08 13:29:25 +00:00
usa
b00dfcca17 * ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that
VALUE is the same size with long.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29925 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-11-25 01:31:21 +00:00
nobu
cea3919ae6 * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf format
specifier if possible.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-12 15:03:51 +00:00