Skip to content

Commit

Permalink
Showing 9 changed files with 39 additions and 0 deletions.
12 changes: 12 additions & 0 deletions spec/std/system_spec.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require "spec"
require "system"

describe System do
describe "hostname" do
it "returns current hostname" do
shell_hostname = `hostname`.strip
hostname = System.hostname
hostname.should eq(shell_hostname)
end
end
end
1 change: 1 addition & 0 deletions src/lib_c/i686-linux-gnu/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ lib LibC
fun accept(fd : Int, addr : Sockaddr*, addr_len : SocklenT*) : Int
fun bind(fd : Int, addr : Sockaddr*, len : SocklenT) : Int
fun connect(fd : Int, addr : Sockaddr*, len : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(fd : Int, addr : Sockaddr*, len : SocklenT*) : Int
fun getsockname(fd : Int, addr : Sockaddr*, len : SocklenT*) : Int
fun getsockopt(fd : Int, level : Int, optname : Int, optval : Void*, optlen : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/lib_c/i686-linux-musl/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ lib LibC
fun accept(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun bind(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun connect(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockname(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/lib_c/x86_64-linux-gnu/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ lib LibC
fun accept(fd : Int, addr : Sockaddr*, addr_len : SocklenT*) : Int
fun bind(fd : Int, addr : Sockaddr*, len : SocklenT) : Int
fun connect(fd : Int, addr : Sockaddr*, len : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(fd : Int, addr : Sockaddr*, len : SocklenT*) : Int
fun getsockname(fd : Int, addr : Sockaddr*, len : SocklenT*) : Int
fun getsockopt(fd : Int, level : Int, optname : Int, optval : Void*, optlen : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/lib_c/x86_64-linux-musl/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ lib LibC
fun accept(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun bind(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun connect(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockname(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/lib_c/x86_64-macosx-darwin/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ lib LibC
fun accept(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun bind(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun connect(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockname(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/lib_c/x86_64-portbld-freebsd/c/sys/socket.cr
Original file line number Diff line number Diff line change
@@ -44,6 +44,7 @@ lib LibC
fun accept(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun bind(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun connect(x0 : Int, x1 : Sockaddr*, x2 : SocklenT) : Int
fun gethostname(name : Char*, len : SizeT) : Int
fun getpeername(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockname(x0 : Int, x1 : Sockaddr*, x2 : SocklenT*) : Int
fun getsockopt(x0 : Int, x1 : Int, x2 : Int, x3 : Void*, x4 : SocklenT*) : Int
1 change: 1 addition & 0 deletions src/prelude.cr
Original file line number Diff line number Diff line change
@@ -57,3 +57,4 @@ require "mutex"
require "kernel"
require "main"
require "ext"
require "system"
20 changes: 20 additions & 0 deletions src/system.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
require "c/sys/socket"

module System
# Returns the hostname
#
# Maximum of 253 characters are allowed, with 2 bytes reserved for storage.
# In practice, many platforms will disallow anything longer than 63 characters.
# ```
# System.hostname # => "host.example.org"
# ```
def self.hostname
String.new(255) do |buffer|
unless LibC.gethostname(buffer, LibC::SizeT.new(255)) == 0
raise Errno.new("Could not get hostname")
end
len = LibC.strlen(buffer)
{len, len}
end
end
end

0 comments on commit 15dd634

Please sign in to comment.