mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
33 lines
885 B
Ruby
33 lines
885 B
Ruby
# typed: strict
|
|
# frozen_string_literal: true
|
|
|
|
require "socket"
|
|
|
|
module OS
|
|
module Mac
|
|
# Wrapper around UNIXSocket to allow > 104 characters on macOS.
|
|
module UNIXSocketExt
|
|
module ClassMethods
|
|
extend T::Helpers
|
|
|
|
requires_ancestor { Kernel }
|
|
|
|
sig { params(path: String).returns(String) }
|
|
def sockaddr_un(path)
|
|
if path.bytesize > 252 # largest size that can fit into a single-byte length
|
|
raise ArgumentError, "too long unix socket path (#{path.bytesize} bytes given but 252 bytes max)"
|
|
end
|
|
|
|
[
|
|
path.bytesize + 3, # = length (1 byte) + family (1 byte) + path (variable) + null terminator (1 byte)
|
|
1, # AF_UNIX
|
|
path,
|
|
].pack("CCZ*")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Utils::UNIXSocketExt.singleton_class.prepend(OS::Mac::UNIXSocketExt::ClassMethods)
|