summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb
diff options
context:
space:
mode:
authorBen Sanders <ben@sanders.life>2026-08-02 09:49:25 -0400
committerBen Sanders <ben@sanders.life>2026-08-02 09:49:25 -0400
commitb41479c91e6685511c1f8ba8586106b322073b62 (patch)
treec9f1345999d754ae0a533849966427e792d9e68d /vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb
parentcfaceeb9a6d1295f5754be211858155cd309acc2 (diff)
added statscounter code
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb109
1 files changed, 109 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb
new file mode 100644
index 0000000..4782270
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/ffi-1.17.4-arm64-darwin/lib/ffi/ffi.rb
@@ -0,0 +1,109 @@
+#
+# Copyright (C) 2008-2010 JRuby project
+#
+# This file is part of ruby-ffi.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of the Ruby FFI project nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+require 'ffi/compat'
+require 'ffi/platform'
+require 'ffi/data_converter'
+require 'ffi/types'
+require 'ffi/library_path'
+require 'ffi/library'
+require 'ffi/errno'
+require 'ffi/abstract_memory'
+require 'ffi/pointer'
+require 'ffi/memorypointer'
+require 'ffi/struct'
+require 'ffi/union'
+require 'ffi/managedstruct'
+require 'ffi/callback'
+require 'ffi/io'
+require 'ffi/autopointer'
+require 'ffi/variadic'
+require 'ffi/enum'
+require 'ffi/version'
+require 'ffi/function'
+
+module FFI
+ module ModernForkTracking
+ def _fork
+ pid = super
+ if pid == 0
+ FFI._async_cb_dispatcher_atfork_child
+ end
+ pid
+ end
+ end
+
+ module LegacyForkTracking
+ module KernelExt
+ def fork
+ if block_given?
+ super do
+ FFI._async_cb_dispatcher_atfork_child
+ yield
+ end
+ else
+ pid = super
+ FFI._async_cb_dispatcher_atfork_child if pid.nil?
+ pid
+ end
+ end
+ end
+
+ module KernelExtPrivate
+ include KernelExt
+ private :fork
+ end
+
+ module IOExt
+ def popen(*args)
+ return super unless args[0] == '-'
+
+ super(*args) do |pipe|
+ FFI._async_cb_dispatcher_atfork_child if pipe.nil?
+ yield pipe
+ end
+ end
+ ruby2_keywords :popen if respond_to?(:ruby2_keywords)
+ end
+ end
+
+ if Process.respond_to?(:_fork)
+ # The nice Ruby 3.1+ way of doing things
+ ::Process.singleton_class.prepend(ModernForkTracking)
+ elsif Process.respond_to?(:fork)
+ # Barf. Old CRuby.
+ # Most of the inspiration for how to do this was stolen from ActiveSupport.
+ ::Object.prepend(LegacyForkTracking::KernelExtPrivate)
+ ::Object.singleton_class.prepend(LegacyForkTracking::KernelExt)
+ ::Kernel.prepend(LegacyForkTracking::KernelExtPrivate)
+ ::Kernel.singleton_class.prepend(LegacyForkTracking::KernelExt)
+ ::IO.singleton_class.prepend(LegacyForkTracking::IOExt)
+ end
+end