ffi-libc 0.0.3 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ruby.yml +29 -0
- data/.gitignore +6 -4
- data/.rspec +1 -0
- data/ChangeLog.md +48 -4
- data/Gemfile +8 -21
- data/LICENSE.txt +1 -4
- data/README.md +114 -7
- data/Rakefile +6 -31
- data/ffi-libc.gemspec +54 -70
- data/gemspec.yml +21 -0
- data/lib/ffi/libc/ifaddrs.rb +93 -0
- data/lib/ffi/libc/ifaddrs_union.rb +15 -0
- data/lib/ffi/libc/libc.rb +154 -21
- data/lib/ffi/libc/rusage.rb +30 -0
- data/lib/ffi/libc/sockaddr.rb +16 -0
- data/lib/ffi/libc/{sock_addr_dl.rb → sockaddr_dl.rb} +2 -2
- data/lib/ffi/libc/{sock_addr_family.rb → sockaddr_family.rb} +1 -1
- data/lib/ffi/libc/sockaddr_in.rb +19 -0
- data/lib/ffi/libc/{sock_addr_in6.rb → sockaddr_in6.rb} +2 -1
- data/lib/ffi/libc/types.rb +3 -0
- data/lib/ffi/libc.rb +11 -0
- data/spec/ifaddrs_spec.rb +30 -0
- data/spec/libc_spec.rb +36 -0
- data/spec/spec_helper.rb +5 -0
- metadata +67 -123
- data/.specopts +0 -1
- data/VERSION +0 -1
- data/lib/ffi/libc/sock_addr.rb +0 -17
- data/lib/ffi/libc/sock_addr_in.rb +0 -19
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 0102b721ed989c2427b5531a522da0001f4dfda43cf1c295e8eda3071891e02d
         | 
| 4 | 
            +
              data.tar.gz: 4e06ead22308e1fdb667d24defc2ea3a069d4737732b1ab046777b663a4d5e00
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 9c4a840ac2740ba51db453edc891b17db0fae22dfe5cebdf5598107b175377ba2436d1dfebbead02fec119bc10a39703b64fa74595467100c0ee35952871a303
         | 
| 7 | 
            +
              data.tar.gz: beca1246d6d97ce653c508025f636c70c0dd19ffbd11ff4ffea569495b230f5d401819c89949607c5caa3b94baacc3be4b0c092933f1a2126ac13bfca8fd8fe5
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            name: CI
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            on: [ push, pull_request ]
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            jobs:
         | 
| 6 | 
            +
              tests:
         | 
| 7 | 
            +
                runs-on: ubuntu-latest
         | 
| 8 | 
            +
                strategy:
         | 
| 9 | 
            +
                  fail-fast: false
         | 
| 10 | 
            +
                  matrix:
         | 
| 11 | 
            +
                    ruby:
         | 
| 12 | 
            +
                      - 2.4
         | 
| 13 | 
            +
                      - 2.5
         | 
| 14 | 
            +
                      - 2.6
         | 
| 15 | 
            +
                      - 2.7
         | 
| 16 | 
            +
                      - 3.0
         | 
| 17 | 
            +
                      - jruby
         | 
| 18 | 
            +
                      - truffleruby
         | 
| 19 | 
            +
                name: Ruby ${{ matrix.ruby }}
         | 
| 20 | 
            +
                steps:
         | 
| 21 | 
            +
                  - uses: actions/checkout@v2
         | 
| 22 | 
            +
                  - name: Set up Ruby
         | 
| 23 | 
            +
                    uses: ruby/setup-ruby@v1
         | 
| 24 | 
            +
                    with:
         | 
| 25 | 
            +
                      ruby-version: ${{ matrix.ruby }}
         | 
| 26 | 
            +
                  - name: Install dependencies
         | 
| 27 | 
            +
                    run: bundle install --jobs 4 --retry 3
         | 
| 28 | 
            +
                  - name: Run tests
         | 
| 29 | 
            +
                    run: bundle exec rake test
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rspec
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            --colour --format documentation
         | 
    
        data/ChangeLog.md
    CHANGED
    
    | @@ -1,3 +1,47 @@ | |
| 1 | 
            +
            ### 0.1.1 / 2021-09-22
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * Removed `sys_errlist` and `sys_nerr` variables, as they have been removed
         | 
| 4 | 
            +
              from glibc (see:
         | 
| 5 | 
            +
              https://sourceware.org/pipermail/libc-announce/2020/000029.html).
         | 
| 6 | 
            +
            * Load `libc` via `FFI::Library::LIBC`.
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ### 0.1.0 / 2013-08-15
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * Require ffi ~> 1.0.
         | 
| 11 | 
            +
            * Added `alarm`.
         | 
| 12 | 
            +
            * Added `clock`.
         | 
| 13 | 
            +
            * Added `getc`.
         | 
| 14 | 
            +
            * Added `getchar`.
         | 
| 15 | 
            +
            * Added `gets`.
         | 
| 16 | 
            +
            * Added `ungetc`.
         | 
| 17 | 
            +
            * Added `getifaddrs`.
         | 
| 18 | 
            +
            * Added `puts`.
         | 
| 19 | 
            +
            * Added `putchar`.
         | 
| 20 | 
            +
            * Added `putc`.
         | 
| 21 | 
            +
            * Added `strcmp`.
         | 
| 22 | 
            +
            * Added `strncmp`.
         | 
| 23 | 
            +
            * Added {FFI::LibC::NULL}.
         | 
| 24 | 
            +
            * Added {FFI::LibC::Ifaddrs}.
         | 
| 25 | 
            +
            * Added {FFI::LibC.raise_error}.
         | 
| 26 | 
            +
            * Added {FFI::LibC.each_ifaddr}.
         | 
| 27 | 
            +
            * Added {FFI::LibC.rusage}.
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            ### 0.0.5 / 2011-05-11
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            * Skip `clearenv`, `memrchr`, `stdin`, `stdout` and `stderr` if they cannot
         | 
| 32 | 
            +
              be loaded (thanks FreneticEntropy and mephux).
         | 
| 33 | 
            +
              * The `libc` installed on OSX lacks these functions/global-variables.
         | 
| 34 | 
            +
            * Opt into `test.rubygems.org`.
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            ### 0.0.4 / 2011-02-03
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            * Require ffi >= 0.6.0, <= 1.1.0:
         | 
| 39 | 
            +
              * JRuby requires ffi >= 1.0.0.
         | 
| 40 | 
            +
              * A lot of projects still require ffi ~> 0.6.0.
         | 
| 41 | 
            +
            * Added `stdin`.
         | 
| 42 | 
            +
            * Added `stdout`.
         | 
| 43 | 
            +
            * Added `stderr`.
         | 
| 44 | 
            +
             | 
| 1 45 | 
             
            ### 0.0.3 / 2010-08-03
         | 
| 2 46 |  | 
| 3 47 | 
             
            * Load libc from the current process.
         | 
| @@ -11,10 +55,10 @@ | |
| 11 55 | 
             
            * Added the Structs:
         | 
| 12 56 | 
             
              * {FFI::LibC::InAddr}.
         | 
| 13 57 | 
             
              * {FFI::LibC::In6Addr}.
         | 
| 14 | 
            -
              * {FFI::LibC:: | 
| 15 | 
            -
              * {FFI::LibC:: | 
| 16 | 
            -
              * {FFI::LibC:: | 
| 17 | 
            -
              * {FFI::LibC:: | 
| 58 | 
            +
              * {FFI::LibC::Sockaddr}.
         | 
| 59 | 
            +
              * {FFI::LibC::SockaddrDL}.
         | 
| 60 | 
            +
              * {FFI::LibC::SockaddrIn}.
         | 
| 61 | 
            +
              * {FFI::LibC::SockaddrIn6}.
         | 
| 18 62 |  | 
| 19 63 | 
             
            ### 0.0.1 / 2010-05-19
         | 
| 20 64 |  | 
    
        data/Gemfile
    CHANGED
    
    | @@ -1,24 +1,11 @@ | |
| 1 1 | 
             
            source 'https://rubygems.org'
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 3 | 
            +
            gemspec
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            group :development do
         | 
| 6 | 
            +
              gem 'rake'
         | 
| 7 | 
            +
              gem 'rubygems-tasks', '~> 0.2'
         | 
| 8 | 
            +
              gem 'rspec',          '~> 3.0'
         | 
| 9 | 
            +
              gem 'kramdown'
         | 
| 10 | 
            +
              gem 'yard',           '~> 0.9'
         | 
| 5 11 | 
             
            end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            group(:development) do
         | 
| 8 | 
            -
              gem 'bundler',	'~> 0.9.25'
         | 
| 9 | 
            -
              gem 'rake',		'~> 0.8.7'
         | 
| 10 | 
            -
              gem 'jeweler',	'~> 1.4.0', :git => 'git://github.com/technicalpickles/jeweler.git'
         | 
| 11 | 
            -
            end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            group(:doc) do
         | 
| 14 | 
            -
              case RUBY_PLATFORM
         | 
| 15 | 
            -
              when 'java'
         | 
| 16 | 
            -
                gem 'maruku',	'~> 0.6.0'
         | 
| 17 | 
            -
              else
         | 
| 18 | 
            -
                gem 'rdiscount',	'~> 1.6.3'
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              gem 'yard',		'~> 0.5.3'
         | 
| 22 | 
            -
            end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            gem 'rspec',	'~> 1.3.0', :group => [:development, :test]
         | 
    
        data/LICENSE.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,8 +1,11 @@ | |
| 1 1 | 
             
            # ffi-libc
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 3 | 
            +
            [](https://github.com/postmodern/ffi-libc/actions/workflows/ruby.yml)
         | 
| 4 | 
            +
            [](https://codeclimate.com/github/postmodern/ffi-libc)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            * [Source](https://github.com/postmodern/ffi-libc/)
         | 
| 7 | 
            +
            * [Issues](https://github.com/postmodern/ffi-libc/issues)
         | 
| 8 | 
            +
            * [Documentation](https://rubydoc.info/gems/ffi-libc)
         | 
| 6 9 |  | 
| 7 10 | 
             
            ## Description
         | 
| 8 11 |  | 
| @@ -10,18 +13,122 @@ Useful Ruby FFI bindings for `libc`. | |
| 10 13 |  | 
| 11 14 | 
             
            ## Features
         | 
| 12 15 |  | 
| 13 | 
            -
            * Provides common Structs used in `libc | 
| 14 | 
            -
            *  | 
| 16 | 
            +
            * Provides common Structs used in `libc`:
         | 
| 17 | 
            +
              * {FFI::LibC::Ifaddrs}
         | 
| 18 | 
            +
              * {FFI::LibC::In6Addr}
         | 
| 19 | 
            +
              * {FFI::LibC::InAddr}
         | 
| 20 | 
            +
              * {FFI::LibC::SockaddrDL}
         | 
| 21 | 
            +
              * {FFI::LibC::SockaddrFamily}
         | 
| 22 | 
            +
              * {FFI::LibC::SockaddrIn6}
         | 
| 23 | 
            +
              * {FFI::LibC::SockaddrIn}
         | 
| 24 | 
            +
              * {FFI::LibC::Sockaddr}
         | 
| 25 | 
            +
              * {FFI::LibC::Timeval}
         | 
| 26 | 
            +
              * {FFI::LibC::Timezone}
         | 
| 27 | 
            +
              * {FFI::LibC::RUsage}
         | 
| 28 | 
            +
            * Binds to common functions and global variables in `libc`:
         | 
| 29 | 
            +
              * `errno.h`:
         | 
| 30 | 
            +
                * `sys_errlist` (BSD)
         | 
| 31 | 
            +
                * `sys_nerr` (BSD)
         | 
| 32 | 
            +
                * `errno`
         | 
| 33 | 
            +
              * `unistd.h`:
         | 
| 34 | 
            +
                * `brk`
         | 
| 35 | 
            +
                * `sbrk`
         | 
| 36 | 
            +
                * `getpid`
         | 
| 37 | 
            +
                * `getppid`
         | 
| 38 | 
            +
                * `getuid`
         | 
| 39 | 
            +
                * `geteuid`
         | 
| 40 | 
            +
                * `getgid`
         | 
| 41 | 
            +
                * `getegid`
         | 
| 42 | 
            +
              * `stdlib.h`:
         | 
| 43 | 
            +
                * `calloc`
         | 
| 44 | 
            +
                * `malloc`
         | 
| 45 | 
            +
                * `free`
         | 
| 46 | 
            +
                * `realloc`
         | 
| 47 | 
            +
                * `getenv`
         | 
| 48 | 
            +
                * `putenv`
         | 
| 49 | 
            +
                * `unsetenv`
         | 
| 50 | 
            +
                * `clearenv`
         | 
| 51 | 
            +
              * `time.h`:
         | 
| 52 | 
            +
                * `time`
         | 
| 53 | 
            +
              * `sys/time.h`:
         | 
| 54 | 
            +
                * `gettimeofday`
         | 
| 55 | 
            +
                * `settimeofday`
         | 
| 56 | 
            +
              * `sys/resource.h` / `bits/resource.h`:
         | 
| 57 | 
            +
                * `getrusage`
         | 
| 58 | 
            +
              * `sys/mman.h`:
         | 
| 59 | 
            +
                * `mmap`
         | 
| 60 | 
            +
                * `munmap`
         | 
| 61 | 
            +
              * `string.h`:
         | 
| 62 | 
            +
                * `bzero`
         | 
| 63 | 
            +
                * `memset`
         | 
| 64 | 
            +
                * `memcpy`
         | 
| 65 | 
            +
                * `memcmp`
         | 
| 66 | 
            +
                * `memchr`
         | 
| 67 | 
            +
                * `memrchr`
         | 
| 68 | 
            +
                * `strcpy`
         | 
| 69 | 
            +
                * `strncpy`
         | 
| 70 | 
            +
                * `strlen`
         | 
| 71 | 
            +
                * `index`
         | 
| 72 | 
            +
                * `rindex`
         | 
| 73 | 
            +
                * `strchr`
         | 
| 74 | 
            +
                * `strrchr`
         | 
| 75 | 
            +
                * `strstr`
         | 
| 76 | 
            +
                * `strerror`
         | 
| 77 | 
            +
              * `stdio.h`:
         | 
| 78 | 
            +
                * `stdin`
         | 
| 79 | 
            +
                * `stdout`
         | 
| 80 | 
            +
                * `stderr`
         | 
| 81 | 
            +
                * `fopen`
         | 
| 82 | 
            +
                * `fdopen`
         | 
| 83 | 
            +
                * `freopen`
         | 
| 84 | 
            +
                * `fseek`
         | 
| 85 | 
            +
                * `ftell`
         | 
| 86 | 
            +
                * `rewind`
         | 
| 87 | 
            +
                * `fread`
         | 
| 88 | 
            +
                * `fwrite`
         | 
| 89 | 
            +
                * `fgetc`
         | 
| 90 | 
            +
                * `fgets`
         | 
| 91 | 
            +
                * `fputc`
         | 
| 92 | 
            +
                * `fputs`
         | 
| 93 | 
            +
                * `fflush`
         | 
| 94 | 
            +
                * `fclose`
         | 
| 95 | 
            +
                * `clearerr`
         | 
| 96 | 
            +
                * `feof`
         | 
| 97 | 
            +
                * `ferror`
         | 
| 98 | 
            +
                * `fileno`
         | 
| 99 | 
            +
                * `perror`
         | 
| 100 | 
            +
              * `netdb.h`:
         | 
| 101 | 
            +
                * `getnameinfo`
         | 
| 102 | 
            +
              * `ifaddrs.h`:
         | 
| 103 | 
            +
                * `getifaddrs`
         | 
| 104 | 
            +
                * `freeifaddrs`
         | 
| 15 105 |  | 
| 16 106 | 
             
            ## Requirements
         | 
| 17 107 |  | 
| 18 | 
            -
            * [ffi] | 
| 108 | 
            +
            * [ffi] ~> 1.0
         | 
| 19 109 |  | 
| 20 110 | 
             
            ## Install
         | 
| 21 111 |  | 
| 22 | 
            -
             | 
| 112 | 
            +
            ```shell
         | 
| 113 | 
            +
            $ gem install ffi-libc
         | 
| 114 | 
            +
            ```
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ### gemspec
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            ```ruby
         | 
| 119 | 
            +
            gem.add_dependency 'ffi-libc', '~> 0.1'
         | 
| 120 | 
            +
            ```
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            ### Gemfile
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            ```ruby
         | 
| 125 | 
            +
            gem 'ffi-libc', '~> 0.1'
         | 
| 126 | 
            +
            ```
         | 
| 23 127 |  | 
| 24 128 | 
             
            ## License
         | 
| 25 129 |  | 
| 130 | 
            +
            Copyright (c) 2010-2021 Hal Brodigan
         | 
| 131 | 
            +
             | 
| 26 132 | 
             
            See {file:LICENSE.txt} for license information.
         | 
| 27 133 |  | 
| 134 | 
            +
            [ffi]: https://github.com/ffi/ffi#readme
         | 
    
        data/Rakefile
    CHANGED
    
    | @@ -1,38 +1,13 @@ | |
| 1 1 | 
             
            require 'rubygems'
         | 
| 2 | 
            -
            require 'bundler'
         | 
| 3 2 |  | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
            rescue Bundler::BundlerError => e
         | 
| 7 | 
            -
              STDERR.puts e.message
         | 
| 8 | 
            -
              STDERR.puts "Run `bundle install` to install missing gems"
         | 
| 9 | 
            -
              exit e.status_code
         | 
| 10 | 
            -
            end
         | 
| 3 | 
            +
            require 'rubygems/tasks'
         | 
| 4 | 
            +
            Gem::Tasks.new
         | 
| 11 5 |  | 
| 12 | 
            -
            require ' | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
            Jeweler::Tasks.new do |gem|
         | 
| 17 | 
            -
              gem.name = 'ffi-libc'
         | 
| 18 | 
            -
              gem.licenses = ['MIT']
         | 
| 19 | 
            -
              gem.summary = %Q{Useful FFI bindings for libc}
         | 
| 20 | 
            -
              gem.email = 'postmodern.mod3@gmail.com'
         | 
| 21 | 
            -
              gem.homepage = %Q{http://github.com/postmodern/ffi-libc}
         | 
| 22 | 
            -
              gem.description = %Q{Useful Ruby FFI bindings for libc.}
         | 
| 23 | 
            -
              gem.authors = ['Postmodern']
         | 
| 24 | 
            -
              gem.has_rdoc = 'yard'
         | 
| 25 | 
            -
            end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            require 'spec/rake/spectask'
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            desc "Run all specifications"
         | 
| 30 | 
            -
            Spec::Rake::SpecTask.new(:spec) do |spec|
         | 
| 31 | 
            -
              spec.libs += ['lib', 'spec']
         | 
| 32 | 
            -
              spec.spec_files = FileList['spec/**/*_spec.rb']
         | 
| 33 | 
            -
              spec.spec_opts = ['--options', '.specopts']
         | 
| 34 | 
            -
            end
         | 
| 6 | 
            +
            require 'rspec/core/rake_task'
         | 
| 7 | 
            +
            RSpec::Core::RakeTask.new
         | 
| 8 | 
            +
            task :test => :spec
         | 
| 35 9 | 
             
            task :default => :spec
         | 
| 36 10 |  | 
| 37 11 | 
             
            require 'yard'
         | 
| 38 12 | 
             
            YARD::Rake::YardocTask.new
         | 
| 13 | 
            +
            task :doc => :yard
         | 
    
        data/ffi-libc.gemspec
    CHANGED
    
    | @@ -1,77 +1,61 @@ | |
| 1 | 
            -
            #  | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         | 
| 4 | 
            -
            # -*- encoding: utf-8 -*-
         | 
| 1 | 
            +
            # encoding: utf-8
         | 
| 5 2 |  | 
| 6 | 
            -
             | 
| 7 | 
            -
              s.name = %q{ffi-libc}
         | 
| 8 | 
            -
              s.version = "0.0.3"
         | 
| 3 | 
            +
            require 'yaml'
         | 
| 9 4 |  | 
| 10 | 
            -
             | 
| 11 | 
            -
               | 
| 12 | 
            -
              s.date = %q{2010-08-03}
         | 
| 13 | 
            -
              s.description = %q{Useful Ruby FFI bindings for libc.}
         | 
| 14 | 
            -
              s.email = %q{postmodern.mod3@gmail.com}
         | 
| 15 | 
            -
              s.extra_rdoc_files = [
         | 
| 16 | 
            -
                "ChangeLog.md",
         | 
| 17 | 
            -
                "LICENSE.txt",
         | 
| 18 | 
            -
                "README.md"
         | 
| 19 | 
            -
              ]
         | 
| 20 | 
            -
              s.files = [
         | 
| 21 | 
            -
                ".gitignore",
         | 
| 22 | 
            -
                ".specopts",
         | 
| 23 | 
            -
                ".yardopts",
         | 
| 24 | 
            -
                "ChangeLog.md",
         | 
| 25 | 
            -
                "Gemfile",
         | 
| 26 | 
            -
                "LICENSE.txt",
         | 
| 27 | 
            -
                "README.md",
         | 
| 28 | 
            -
                "Rakefile",
         | 
| 29 | 
            -
                "VERSION",
         | 
| 30 | 
            -
                "ffi-libc.gemspec",
         | 
| 31 | 
            -
                "lib/ffi/libc.rb",
         | 
| 32 | 
            -
                "lib/ffi/libc/af.rb",
         | 
| 33 | 
            -
                "lib/ffi/libc/in6_addr.rb",
         | 
| 34 | 
            -
                "lib/ffi/libc/in_addr.rb",
         | 
| 35 | 
            -
                "lib/ffi/libc/libc.rb",
         | 
| 36 | 
            -
                "lib/ffi/libc/sock_addr.rb",
         | 
| 37 | 
            -
                "lib/ffi/libc/sock_addr_dl.rb",
         | 
| 38 | 
            -
                "lib/ffi/libc/sock_addr_family.rb",
         | 
| 39 | 
            -
                "lib/ffi/libc/sock_addr_in.rb",
         | 
| 40 | 
            -
                "lib/ffi/libc/sock_addr_in6.rb",
         | 
| 41 | 
            -
                "lib/ffi/libc/timeval.rb",
         | 
| 42 | 
            -
                "lib/ffi/libc/timezone.rb",
         | 
| 43 | 
            -
                "lib/ffi/libc/types.rb"
         | 
| 44 | 
            -
              ]
         | 
| 45 | 
            -
              s.has_rdoc = %q{yard}
         | 
| 46 | 
            -
              s.homepage = %q{http://github.com/postmodern/ffi-libc}
         | 
| 47 | 
            -
              s.licenses = ["MIT"]
         | 
| 48 | 
            -
              s.require_paths = ["lib"]
         | 
| 49 | 
            -
              s.rubygems_version = %q{1.3.7}
         | 
| 50 | 
            -
              s.summary = %q{Useful FFI bindings for libc}
         | 
| 5 | 
            +
            Gem::Specification.new do |gem|
         | 
| 6 | 
            +
              gemspec = YAML.load_file('gemspec.yml')
         | 
| 51 7 |  | 
| 52 | 
            -
               | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 8 | 
            +
              gem.name    = gemspec.fetch('name')
         | 
| 9 | 
            +
              gem.version = gemspec.fetch('version') do
         | 
| 10 | 
            +
                              lib_dir = File.join(File.dirname(__FILE__),'lib')
         | 
| 11 | 
            +
                              $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
         | 
| 55 12 |  | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
                 | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 13 | 
            +
                              require 'ffi/libc/version'
         | 
| 14 | 
            +
                              FFI::LibC::VERSION
         | 
| 15 | 
            +
                            end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              gem.summary     = gemspec['summary']
         | 
| 18 | 
            +
              gem.description = gemspec['description']
         | 
| 19 | 
            +
              gem.licenses    = Array(gemspec['license'])
         | 
| 20 | 
            +
              gem.authors     = Array(gemspec['authors'])
         | 
| 21 | 
            +
              gem.email       = gemspec['email']
         | 
| 22 | 
            +
              gem.homepage    = gemspec['homepage']
         | 
| 23 | 
            +
              gem.metadata    = gemspec['metadata'] if gemspec['metadata']
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              glob = lambda { |patterns| gem.files & Dir[*patterns] }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              gem.files = `git ls-files`.split($/)
         | 
| 28 | 
            +
              gem.files = glob[gemspec['files']] if gemspec['files']
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              gem.executables = gemspec.fetch('executables') do
         | 
| 31 | 
            +
                glob['bin/*'].map { |path| File.basename(path) }
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              gem.extensions       = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
         | 
| 36 | 
            +
              gem.test_files       = glob[gemspec['test_files'] || '{test/{**/}*_test.rb']
         | 
| 37 | 
            +
              gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              gem.require_paths = Array(gemspec.fetch('require_paths') {
         | 
| 40 | 
            +
                %w[ext lib].select { |dir| File.directory?(dir) }
         | 
| 41 | 
            +
              })
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              gem.requirements              = gemspec['requirements']
         | 
| 44 | 
            +
              gem.required_ruby_version     = gemspec['required_ruby_version']
         | 
| 45 | 
            +
              gem.required_rubygems_version = gemspec['required_rubygems_version']
         | 
| 46 | 
            +
              gem.post_install_message      = gemspec['post_install_message']
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              split = lambda { |string| string.split(/,\s*/) }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              if gemspec['dependencies']
         | 
| 51 | 
            +
                gemspec['dependencies'].each do |name,versions|
         | 
| 52 | 
            +
                  gem.add_dependency(name,split[versions])
         | 
| 68 53 | 
             
                end
         | 
| 69 | 
            -
              else
         | 
| 70 | 
            -
                s.add_dependency(%q<ffi>, ["~> 0.6.0"])
         | 
| 71 | 
            -
                s.add_dependency(%q<bundler>, ["~> 0.9.25"])
         | 
| 72 | 
            -
                s.add_dependency(%q<rake>, ["~> 0.8.7"])
         | 
| 73 | 
            -
                s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
         | 
| 74 | 
            -
                s.add_dependency(%q<rspec>, ["~> 1.3.0"])
         | 
| 75 54 | 
             
              end
         | 
| 76 | 
            -
            end
         | 
| 77 55 |  | 
| 56 | 
            +
              if gemspec['development_dependencies']
         | 
| 57 | 
            +
                gemspec['development_dependencies'].each do |name,versions|
         | 
| 58 | 
            +
                  gem.add_development_dependency(name,split[versions])
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
            end
         | 
    
        data/gemspec.yml
    ADDED
    
    | @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            name: ffi-libc
         | 
| 2 | 
            +
            version: 0.1.1
         | 
| 3 | 
            +
            summary: Useful FFI bindings for libc
         | 
| 4 | 
            +
            description: Useful Ruby FFI bindings for libc.
         | 
| 5 | 
            +
            license: MIT
         | 
| 6 | 
            +
            authors: Postmodern
         | 
| 7 | 
            +
            email: postmodern.mod3@gmail.com
         | 
| 8 | 
            +
            homepage: https://github.com/postmodern/ffi-libc#redme
         | 
| 9 | 
            +
            has_yard: true
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            metadata:
         | 
| 12 | 
            +
              documentation_uri: https://rubydoc.info/gems/ffi-libc
         | 
| 13 | 
            +
              source_code_uri:   https://github.com/postmodern/ffi-libc
         | 
| 14 | 
            +
              bug_tracker_uri:   https://github.com/postmodern/ffi-libc/issues
         | 
| 15 | 
            +
              changelog_uri:     https://github.com/postmodern/ffi-libc/blob/master/ChangeLog.md
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            dependencies:
         | 
| 18 | 
            +
              ffi: ~> 1.0
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            development_dependencies:
         | 
| 21 | 
            +
              bundler: ~> 2.0
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            require 'ffi/libc/ifaddrs_union'
         | 
| 2 | 
            +
            require 'ffi/libc/sockaddr'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FFI
         | 
| 5 | 
            +
              module LibC
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                # @since 0.1.0
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                class Ifaddrs < FFI::Struct
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  layout :ifa_next,    :pointer,
         | 
| 12 | 
            +
                         :ifa_name,    :string,
         | 
| 13 | 
            +
                         :ifa_flags,   :uint,
         | 
| 14 | 
            +
                         :ifa_addr,    :pointer,
         | 
| 15 | 
            +
                         :ifa_netmask, :pointer,
         | 
| 16 | 
            +
                         :ifa_ifu,     IfaddrsUnion,
         | 
| 17 | 
            +
                         :ifa_data,    :pointer
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  #
         | 
| 20 | 
            +
                  # Gets the next Interface Address in the list.
         | 
| 21 | 
            +
                  #
         | 
| 22 | 
            +
                  # @return [Ifaddrs, nil]
         | 
| 23 | 
            +
                  #   The next Interface Address in the list.
         | 
| 24 | 
            +
                  #
         | 
| 25 | 
            +
                  def next
         | 
| 26 | 
            +
                    unless self[:ifa_next].null?
         | 
| 27 | 
            +
                      Ifaddrs.new(self[:ifa_next])
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  #
         | 
| 32 | 
            +
                  # The name of the Interface.
         | 
| 33 | 
            +
                  #
         | 
| 34 | 
            +
                  # @return [String]
         | 
| 35 | 
            +
                  #   The name.
         | 
| 36 | 
            +
                  #
         | 
| 37 | 
            +
                  def name
         | 
| 38 | 
            +
                    self[:ifa_name]
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  #
         | 
| 42 | 
            +
                  # The flags of the Interface.
         | 
| 43 | 
            +
                  #
         | 
| 44 | 
            +
                  # @return [Integer]
         | 
| 45 | 
            +
                  #   The flags.
         | 
| 46 | 
            +
                  #
         | 
| 47 | 
            +
                  def flags
         | 
| 48 | 
            +
                    self[:ifa_flags]
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  #
         | 
| 52 | 
            +
                  # The address of the Interface.
         | 
| 53 | 
            +
                  #
         | 
| 54 | 
            +
                  # @return [Sockaddr]
         | 
| 55 | 
            +
                  #   The basic socket address.
         | 
| 56 | 
            +
                  #
         | 
| 57 | 
            +
                  def addr
         | 
| 58 | 
            +
                    Sockaddr.new(self[:ifa_addr])
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  #
         | 
| 62 | 
            +
                  # The netmask of the Interface.
         | 
| 63 | 
            +
                  #
         | 
| 64 | 
            +
                  # @return [Sockaddr]
         | 
| 65 | 
            +
                  #   The socket address containing the netmask.
         | 
| 66 | 
            +
                  #
         | 
| 67 | 
            +
                  def netmask
         | 
| 68 | 
            +
                    Sockaddr.new(self[:ifa_netmask])
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  #
         | 
| 72 | 
            +
                  # The broadcast address of the Interface.
         | 
| 73 | 
            +
                  #
         | 
| 74 | 
            +
                  # @return [Sockaddr]
         | 
| 75 | 
            +
                  #   The broadcast address.
         | 
| 76 | 
            +
                  #
         | 
| 77 | 
            +
                  def broadaddr
         | 
| 78 | 
            +
                    Sockaddr.new(self[:ifa_ifu][:ifu_broadaddr])
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  #
         | 
| 82 | 
            +
                  # The destination address of the Interface.
         | 
| 83 | 
            +
                  #
         | 
| 84 | 
            +
                  # @return [Sockaddr]
         | 
| 85 | 
            +
                  #   The destination address.
         | 
| 86 | 
            +
                  #
         | 
| 87 | 
            +
                  def dstaddr
         | 
| 88 | 
            +
                    Sockaddr.new(self[:ifa_ifu][:ifu_dstaddr])
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
            end
         | 
    
        data/lib/ffi/libc/libc.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            require 'ffi/libc/types'
         | 
| 2 2 | 
             
            require 'ffi/libc/timeval'
         | 
| 3 3 | 
             
            require 'ffi/libc/timezone'
         | 
| 4 | 
            +
            require 'ffi/libc/ifaddrs'
         | 
| 5 | 
            +
            require 'ffi/libc/rusage'
         | 
| 4 6 |  | 
| 5 7 | 
             
            require 'ffi'
         | 
| 6 8 |  | 
| @@ -8,13 +10,23 @@ module FFI | |
| 8 10 | 
             
              module LibC
         | 
| 9 11 | 
             
                extend FFI::Library
         | 
| 10 12 |  | 
| 11 | 
            -
                ffi_lib  | 
| 13 | 
            +
                ffi_lib FFI::Library::LIBC
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # The NULL constant
         | 
| 16 | 
            +
                NULL = nil
         | 
| 12 17 |  | 
| 13 18 | 
             
                # errno.h
         | 
| 14 | 
            -
                 | 
| 15 | 
            -
             | 
| 19 | 
            +
                begin
         | 
| 20 | 
            +
                  attach_variable :sys_errlist, :pointer
         | 
| 21 | 
            +
                  attach_variable :sys_nerr, :int
         | 
| 22 | 
            +
                rescue FFI::NotFoundError
         | 
| 23 | 
            +
                end
         | 
| 16 24 | 
             
                attach_variable :errno, :int
         | 
| 17 25 |  | 
| 26 | 
            +
                def self.raise_error(error=self.errno)
         | 
| 27 | 
            +
                  raise(strerror(error))
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 18 30 | 
             
                # unistd.h
         | 
| 19 31 | 
             
                attach_function :brk, [:pointer], :int
         | 
| 20 32 | 
             
                attach_function :sbrk, [:pointer], :pointer
         | 
| @@ -24,6 +36,7 @@ module FFI | |
| 24 36 | 
             
                attach_function :geteuid, [], :uid_t
         | 
| 25 37 | 
             
                attach_function :getgid, [], :gid_t
         | 
| 26 38 | 
             
                attach_function :getegid, [], :gid_t
         | 
| 39 | 
            +
                attach_function :alarm, [:uint], :uint
         | 
| 27 40 |  | 
| 28 41 | 
             
                # stdlib.h
         | 
| 29 42 | 
             
                attach_function :calloc, [:size_t, :size_t], :pointer
         | 
| @@ -33,9 +46,15 @@ module FFI | |
| 33 46 | 
             
                attach_function :getenv, [:string], :string
         | 
| 34 47 | 
             
                attach_function :putenv, [:string], :int
         | 
| 35 48 | 
             
                attach_function :unsetenv, [:string], :int
         | 
| 36 | 
            -
             | 
| 49 | 
            +
             | 
| 50 | 
            +
                begin
         | 
| 51 | 
            +
                  attach_function :clearenv, [], :int
         | 
| 52 | 
            +
                rescue FFI::NotFoundError
         | 
| 53 | 
            +
                  # clearenv is not available on OSX
         | 
| 54 | 
            +
                end
         | 
| 37 55 |  | 
| 38 56 | 
             
                # time.h
         | 
| 57 | 
            +
                attach_function :clock, [], :clock_t
         | 
| 39 58 | 
             
                attach_function :time, [:pointer], :time_t
         | 
| 40 59 |  | 
| 41 60 | 
             
                # sys/time.h
         | 
| @@ -49,33 +68,48 @@ module FFI | |
| 49 68 | 
             
                # string.h
         | 
| 50 69 | 
             
                attach_function :bzero, [:pointer, :size_t], :void
         | 
| 51 70 | 
             
                attach_function :memset, [:pointer, :int, :size_t], :pointer
         | 
| 52 | 
            -
                attach_function :memcpy, [: | 
| 53 | 
            -
                attach_function :memcmp, [: | 
| 54 | 
            -
                attach_function :memchr, [: | 
| 55 | 
            -
             | 
| 56 | 
            -
                 | 
| 57 | 
            -
             | 
| 58 | 
            -
                 | 
| 59 | 
            -
             | 
| 60 | 
            -
                 | 
| 61 | 
            -
             | 
| 62 | 
            -
                attach_function : | 
| 63 | 
            -
                attach_function : | 
| 71 | 
            +
                attach_function :memcpy, [:buffer_out, :buffer_in, :size_t], :pointer
         | 
| 72 | 
            +
                attach_function :memcmp, [:buffer_in, :buffer_in, :size_t], :int
         | 
| 73 | 
            +
                attach_function :memchr, [:buffer_in, :int, :size_t], :pointer
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                begin
         | 
| 76 | 
            +
                  attach_function :memrchr, [:buffer_in, :int, :size_t], :pointer
         | 
| 77 | 
            +
                rescue FFI::NotFoundError
         | 
| 78 | 
            +
                  # memrchr is not available on OSX
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                attach_function :strcpy, [:buffer_out, :string], :pointer
         | 
| 82 | 
            +
                attach_function :strncpy, [:buffer_out, :string, :size_t], :pointer
         | 
| 83 | 
            +
                attach_function :strcmp, [:buffer_in, :buffer_in], :int
         | 
| 84 | 
            +
                attach_function :strncmp, [:buffer_in, :buffer_in, :size_t], :int
         | 
| 85 | 
            +
                attach_function :strlen, [:buffer_in], :size_t
         | 
| 86 | 
            +
                attach_function :index, [:buffer_in, :int], :pointer
         | 
| 87 | 
            +
                attach_function :rindex, [:buffer_in, :int], :pointer
         | 
| 88 | 
            +
                attach_function :strchr, [:buffer_in, :int], :pointer
         | 
| 89 | 
            +
                attach_function :strrchr, [:buffer_in, :int], :pointer
         | 
| 90 | 
            +
                attach_function :strstr, [:buffer_in, :string], :pointer
         | 
| 64 91 | 
             
                attach_function :strerror, [:int], :string
         | 
| 65 92 |  | 
| 66 | 
            -
                 | 
| 93 | 
            +
                begin
         | 
| 94 | 
            +
                  attach_variable :stdin, :pointer
         | 
| 95 | 
            +
                  attach_variable :stdout, :pointer
         | 
| 96 | 
            +
                  attach_variable :stderr, :pointer
         | 
| 97 | 
            +
                rescue FFI::NotFoundError
         | 
| 98 | 
            +
                  # stdin, stdout, stderr are not available on OSX
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
             | 
| 67 101 | 
             
                attach_function :fopen, [:string, :string], :FILE
         | 
| 68 102 | 
             
                attach_function :fdopen, [:int, :string], :FILE
         | 
| 69 103 | 
             
                attach_function :freopen, [:string, :string, :FILE], :FILE
         | 
| 70 104 | 
             
                attach_function :fseek, [:FILE, :long, :int], :int
         | 
| 71 105 | 
             
                attach_function :ftell, [:FILE], :long
         | 
| 72 106 | 
             
                attach_function :rewind, [:FILE], :void
         | 
| 73 | 
            -
                attach_function :fread, [: | 
| 74 | 
            -
                attach_function :fwrite, [: | 
| 107 | 
            +
                attach_function :fread, [:buffer_out, :size_t, :size_t, :FILE], :size_t
         | 
| 108 | 
            +
                attach_function :fwrite, [:buffer_in, :size_t, :size_t, :FILE], :size_t
         | 
| 75 109 | 
             
                attach_function :fgetc, [:FILE], :int
         | 
| 76 | 
            -
                attach_function :fgets, [: | 
| 110 | 
            +
                attach_function :fgets, [:buffer_out, :int, :FILE], :pointer
         | 
| 77 111 | 
             
                attach_function :fputc, [:int, :FILE], :int
         | 
| 78 | 
            -
                attach_function :fputs, [: | 
| 112 | 
            +
                attach_function :fputs, [:buffer_in, :FILE], :int
         | 
| 79 113 | 
             
                attach_function :fflush, [:FILE], :int
         | 
| 80 114 | 
             
                attach_function :fclose, [:FILE], :int
         | 
| 81 115 | 
             
                attach_function :clearerr, [:FILE], :void
         | 
| @@ -83,5 +117,104 @@ module FFI | |
| 83 117 | 
             
                attach_function :ferror, [:FILE], :int
         | 
| 84 118 | 
             
                attach_function :fileno, [:FILE], :int
         | 
| 85 119 | 
             
                attach_function :perror, [:string], :void
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                attach_function :getc, [:FILE], :int
         | 
| 122 | 
            +
                attach_function :getchar, [], :int
         | 
| 123 | 
            +
                attach_function :gets, [:buffer_out], :int
         | 
| 124 | 
            +
                attach_function :ungetc, [:int, :pointer], :int
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                attach_function :putc, [:int, :FILE], :int
         | 
| 127 | 
            +
                attach_function :putchar, [:int], :int
         | 
| 128 | 
            +
                attach_function :puts, [:string], :int
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                # netdb.h
         | 
| 131 | 
            +
                attach_function :getnameinfo, [
         | 
| 132 | 
            +
                  :pointer,
         | 
| 133 | 
            +
                  :socklen_t, :pointer,
         | 
| 134 | 
            +
                  :socklen_t, :pointer,
         | 
| 135 | 
            +
                  :socklen_t, :int
         | 
| 136 | 
            +
                ], :int
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                NI_MAXHOST = 1024
         | 
| 139 | 
            +
                NI_MAXSERV = 32
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                NI_NUMERICHOST = 1       # Don't try to look up hostname.
         | 
| 142 | 
            +
                NI_NUMERICSERV = 2       # Don't convert port number to name.
         | 
| 143 | 
            +
                NI_NOFQDN      = 4       # Only return nodename portion.
         | 
| 144 | 
            +
                NI_NAMEREQD    = 8       # Don't return numeric addresses.
         | 
| 145 | 
            +
                NI_DGRAM       = 16      # Look up UDP service rather than TCP.
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                # ifaddrs.h
         | 
| 148 | 
            +
                attach_function :getifaddrs, [:pointer], :int
         | 
| 149 | 
            +
                attach_function :freeifaddrs, [:pointer], :void
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                #
         | 
| 152 | 
            +
                # Enumerates over the Interface Addresses.
         | 
| 153 | 
            +
                #
         | 
| 154 | 
            +
                # @yield [ifaddr]
         | 
| 155 | 
            +
                #   The given block will be passed each Interface Address.
         | 
| 156 | 
            +
                #
         | 
| 157 | 
            +
                # @yieldparam [Ifaddrs] ifaddr
         | 
| 158 | 
            +
                #   An Interface Address.
         | 
| 159 | 
            +
                #
         | 
| 160 | 
            +
                # @return [Enumerator]
         | 
| 161 | 
            +
                #   If no block is given, an enumerator will be returned.
         | 
| 162 | 
            +
                #
         | 
| 163 | 
            +
                # @since 0.1.0
         | 
| 164 | 
            +
                #
         | 
| 165 | 
            +
                def self.each_ifaddr
         | 
| 166 | 
            +
                  return enum_for(__method__) unless block_given?
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                  ptr = MemoryPointer.new(:pointer)
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                  if getifaddrs(ptr) == -1
         | 
| 171 | 
            +
                    raise_error
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                  if (ifaddrs = ptr.get_pointer(0)).null?
         | 
| 175 | 
            +
                    return
         | 
| 176 | 
            +
                  end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                  ifaddr = Ifaddrs.new(ifaddrs)
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  while ifaddr
         | 
| 181 | 
            +
                    yield ifaddr
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                    ifaddr = ifaddr.next
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                  freeifaddrs(ifaddrs)
         | 
| 187 | 
            +
                end
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                # bits/resource.h (Linux) / sys/resource.h (Darwin)
         | 
| 190 | 
            +
                RUSAGE_SELF = 0
         | 
| 191 | 
            +
                RUSAGE_CHILDREN = -1
         | 
| 192 | 
            +
                RUSAGE_THREAD = 1 # Linux/glibc only
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                attach_function :getrusage, [:int, :pointer], :int
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                #
         | 
| 197 | 
            +
                # Gets the RUsage for the user.
         | 
| 198 | 
            +
                #
         | 
| 199 | 
            +
                # @param [RUSAGE_SELF, RUSAGE_CHILDREN, RUSAGE_THREAD] who
         | 
| 200 | 
            +
                #   Whome to get RUsage statistics for.
         | 
| 201 | 
            +
                #
         | 
| 202 | 
            +
                # @return [RUsage]
         | 
| 203 | 
            +
                #   The RUsage statistics.
         | 
| 204 | 
            +
                #
         | 
| 205 | 
            +
                # @raise [RuntimeError]
         | 
| 206 | 
            +
                #   An error has occurred.
         | 
| 207 | 
            +
                #
         | 
| 208 | 
            +
                # @since 0.1.0
         | 
| 209 | 
            +
                #
         | 
| 210 | 
            +
                def self.rusage(who=RUSAGE_SELF)
         | 
| 211 | 
            +
                  rusage = RUsage.new
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                  unless (ret = getrusage(who,rusage)) == 0
         | 
| 214 | 
            +
                    raise_error(ret)
         | 
| 215 | 
            +
                  end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  return rusage
         | 
| 218 | 
            +
                end
         | 
| 86 219 | 
             
              end
         | 
| 87 220 | 
             
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'ffi/libc/types'
         | 
| 2 | 
            +
            require 'ffi/libc/timeval'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FFI
         | 
| 5 | 
            +
              module LibC
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                # @since 0.1.0
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                class RUsage < FFI::Struct
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  layout :ru_utime, Timeval,
         | 
| 12 | 
            +
                         :ru_stime, Timeval,
         | 
| 13 | 
            +
                         :ru_maxrss, :long,
         | 
| 14 | 
            +
                         :ru_ixrss, :long,
         | 
| 15 | 
            +
                         :ru_idrss, :long,
         | 
| 16 | 
            +
                         :ru_isrss, :long,
         | 
| 17 | 
            +
                         :ru_minflt, :long,
         | 
| 18 | 
            +
                         :ru_majflt, :long,
         | 
| 19 | 
            +
                         :ru_nswap, :long,
         | 
| 20 | 
            +
                         :ru_inblock, :long,
         | 
| 21 | 
            +
                         :ru_oublock, :long,
         | 
| 22 | 
            +
                         :ru_msgsnd, :long,
         | 
| 23 | 
            +
                         :ru_msgrcv, :long,
         | 
| 24 | 
            +
                         :ru_nsignals, :long,
         | 
| 25 | 
            +
                         :ru_nvcsw, :long,
         | 
| 26 | 
            +
                         :ru_nivcsw, :long
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            require 'ffi/libc/types'
         | 
| 2 | 
            +
            require 'ffi/libc/sockaddr_family'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FFI
         | 
| 5 | 
            +
              module LibC
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                # The generic `sockaddr` structure.
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                class Sockaddr < SockaddrFamily
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  layout :family, :sa_family_t,
         | 
| 12 | 
            +
                         :data,   [:char, 14]
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            require 'ffi/libc/types'
         | 
| 2 | 
            -
            require 'ffi/libc/ | 
| 2 | 
            +
            require 'ffi/libc/sockaddr_family'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module FFI
         | 
| 5 5 | 
             
              module LibC
         | 
| 6 6 | 
             
                #
         | 
| 7 7 | 
             
                # The data-link socket address
         | 
| 8 8 | 
             
                #
         | 
| 9 | 
            -
                class  | 
| 9 | 
            +
                class SockaddrDL < SockaddrFamily
         | 
| 10 10 |  | 
| 11 11 | 
             
                  layout :len, :uint8,
         | 
| 12 12 | 
             
                         :family, :sa_family_t,
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'ffi/libc/types'
         | 
| 2 | 
            +
            require 'ffi/libc/sockaddr_family'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module FFI
         | 
| 5 | 
            +
              module LibC
         | 
| 6 | 
            +
                #
         | 
| 7 | 
            +
                # sockaddr inet, always good to have around
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                class SockaddrIn < SockaddrFamily
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  layout :len,      :uint8,
         | 
| 12 | 
            +
                         :family,   :sa_family_t,
         | 
| 13 | 
            +
                         :port,     :in_port_t,
         | 
| 14 | 
            +
                         :addr,     :in_addr_t,
         | 
| 15 | 
            +
                         :_sa_zero, [:uint8, 8]
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'ffi/libc/types'
         | 
| 2 | 
            +
            require 'ffi/libc/sockaddr_family'
         | 
| 2 3 | 
             
            require 'ffi/libc/in6_addr'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module FFI
         | 
| @@ -6,7 +7,7 @@ module FFI | |
| 6 7 | 
             
                #
         | 
| 7 8 | 
             
                # IPv6 socket address
         | 
| 8 9 | 
             
                #
         | 
| 9 | 
            -
                class  | 
| 10 | 
            +
                class SockaddrIn6 < SockaddrFamily
         | 
| 10 11 |  | 
| 11 12 | 
             
                  layout :len, :uint8,
         | 
| 12 13 | 
             
                         :family, :sa_family_t,
         | 
    
        data/lib/ffi/libc/types.rb
    CHANGED
    
    
    
        data/lib/ffi/libc.rb
    CHANGED
    
    | @@ -1,2 +1,13 @@ | |
| 1 1 | 
             
            require 'ffi/libc/types'
         | 
| 2 | 
            +
            require 'ffi/libc/af'
         | 
| 3 | 
            +
            require 'ffi/libc/ifaddrs'
         | 
| 4 | 
            +
            require 'ffi/libc/in_addr'
         | 
| 5 | 
            +
            require 'ffi/libc/in6_addr'
         | 
| 6 | 
            +
            require 'ffi/libc/sockaddr'
         | 
| 7 | 
            +
            require 'ffi/libc/sockaddr_dl'
         | 
| 8 | 
            +
            require 'ffi/libc/sockaddr_in'
         | 
| 9 | 
            +
            require 'ffi/libc/sockaddr_in6'
         | 
| 10 | 
            +
            require 'ffi/libc/timeval'
         | 
| 11 | 
            +
            require 'ffi/libc/timezone'
         | 
| 12 | 
            +
            require 'ffi/libc/rusage'
         | 
| 2 13 | 
             
            require 'ffi/libc/libc'
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'ffi/libc/ifaddrs'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Ifaddrs do
         | 
| 5 | 
            +
              subject { LibC.each_ifaddr.first }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              it "should have a name" do
         | 
| 8 | 
            +
                expect(subject.name).to_not be_empty
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it "should have flags" do
         | 
| 12 | 
            +
                expect(subject.flags).to be_kind_of(Integer)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it "should have an addr" do
         | 
| 16 | 
            +
                expect(subject.addr).to be_kind_of(Sockaddr)
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              it "should have an netmask" do
         | 
| 20 | 
            +
                expect(subject.netmask).to be_kind_of(Sockaddr)
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              it "should have a broadcast addr" do
         | 
| 24 | 
            +
                expect(subject.broadaddr).to be_kind_of(Sockaddr)
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              it "should have a destination addr" do
         | 
| 28 | 
            +
                expect(subject.dstaddr).to be_kind_of(Sockaddr)
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
    
        data/spec/libc_spec.rb
    ADDED
    
    | @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'ffi/libc'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe FFI::LibC do
         | 
| 5 | 
            +
              describe "NULL" do
         | 
| 6 | 
            +
                subject { described_class::NULL }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                it { expect(subject).to be == nil }
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              describe "each_ifaddr" do
         | 
| 12 | 
            +
                it "should yield Ifaddrs" do
         | 
| 13 | 
            +
                  addrs = []
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  described_class.each_ifaddr do |ifaddr|
         | 
| 16 | 
            +
                    addrs << ifaddr
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  expect(addrs).to all(be_kind_of(Ifaddrs))
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                context "when not given a block" do
         | 
| 23 | 
            +
                  subject { described_class.each_ifaddr }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  it { expect(subject).to be_kind_of(Enumerable) }
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              describe "rusage" do
         | 
| 30 | 
            +
                subject { described_class.rusage }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                it "should be able to fetch its own memory usage" do
         | 
| 33 | 
            +
                  expect(subject[:ru_maxrss]).to be > 4000
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,163 +1,107 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ffi-libc
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
              segments: 
         | 
| 6 | 
            -
              - 0
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 3
         | 
| 9 | 
            -
              version: 0.0.3
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.1
         | 
| 10 5 | 
             
            platform: ruby
         | 
| 11 | 
            -
            authors: | 
| 6 | 
            +
            authors:
         | 
| 12 7 | 
             
            - Postmodern
         | 
| 13 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 14 9 | 
             
            bindir: bin
         | 
| 15 10 | 
             
            cert_chain: []
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
            dependencies: 
         | 
| 20 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 11 | 
            +
            date: 2021-09-22 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 21 14 | 
             
              name: ffi
         | 
| 22 | 
            -
              requirement:  | 
| 23 | 
            -
                 | 
| 24 | 
            -
                 | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
                    segments: 
         | 
| 28 | 
            -
                    - 0
         | 
| 29 | 
            -
                    - 6
         | 
| 30 | 
            -
                    - 0
         | 
| 31 | 
            -
                    version: 0.6.0
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '1.0'
         | 
| 32 20 | 
             
              type: :runtime
         | 
| 33 21 | 
             
              prerelease: false
         | 
| 34 | 
            -
              version_requirements:  | 
| 35 | 
            -
             | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '1.0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 36 28 | 
             
              name: bundler
         | 
| 37 | 
            -
              requirement:  | 
| 38 | 
            -
                 | 
| 39 | 
            -
                 | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                    segments: 
         | 
| 43 | 
            -
                    - 0
         | 
| 44 | 
            -
                    - 9
         | 
| 45 | 
            -
                    - 25
         | 
| 46 | 
            -
                    version: 0.9.25
         | 
| 47 | 
            -
              type: :development
         | 
| 48 | 
            -
              prerelease: false
         | 
| 49 | 
            -
              version_requirements: *id002
         | 
| 50 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 51 | 
            -
              name: rake
         | 
| 52 | 
            -
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 53 | 
            -
                none: false
         | 
| 54 | 
            -
                requirements: 
         | 
| 55 | 
            -
                - - ~>
         | 
| 56 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 57 | 
            -
                    segments: 
         | 
| 58 | 
            -
                    - 0
         | 
| 59 | 
            -
                    - 8
         | 
| 60 | 
            -
                    - 7
         | 
| 61 | 
            -
                    version: 0.8.7
         | 
| 62 | 
            -
              type: :development
         | 
| 63 | 
            -
              prerelease: false
         | 
| 64 | 
            -
              version_requirements: *id003
         | 
| 65 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 66 | 
            -
              name: jeweler
         | 
| 67 | 
            -
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 68 | 
            -
                none: false
         | 
| 69 | 
            -
                requirements: 
         | 
| 70 | 
            -
                - - ~>
         | 
| 71 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 72 | 
            -
                    segments: 
         | 
| 73 | 
            -
                    - 1
         | 
| 74 | 
            -
                    - 4
         | 
| 75 | 
            -
                    - 0
         | 
| 76 | 
            -
                    version: 1.4.0
         | 
| 77 | 
            -
              type: :development
         | 
| 78 | 
            -
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: *id004
         | 
| 80 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 81 | 
            -
              name: rspec
         | 
| 82 | 
            -
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 83 | 
            -
                none: false
         | 
| 84 | 
            -
                requirements: 
         | 
| 85 | 
            -
                - - ~>
         | 
| 86 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 87 | 
            -
                    segments: 
         | 
| 88 | 
            -
                    - 1
         | 
| 89 | 
            -
                    - 3
         | 
| 90 | 
            -
                    - 0
         | 
| 91 | 
            -
                    version: 1.3.0
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '2.0'
         | 
| 92 34 | 
             
              type: :development
         | 
| 93 35 | 
             
              prerelease: false
         | 
| 94 | 
            -
              version_requirements:  | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '2.0'
         | 
| 95 41 | 
             
            description: Useful Ruby FFI bindings for libc.
         | 
| 96 42 | 
             
            email: postmodern.mod3@gmail.com
         | 
| 97 43 | 
             
            executables: []
         | 
| 98 | 
            -
             | 
| 99 44 | 
             
            extensions: []
         | 
| 100 | 
            -
             | 
| 101 | 
            -
            extra_rdoc_files: 
         | 
| 45 | 
            +
            extra_rdoc_files:
         | 
| 102 46 | 
             
            - ChangeLog.md
         | 
| 103 47 | 
             
            - LICENSE.txt
         | 
| 104 48 | 
             
            - README.md
         | 
| 105 | 
            -
            files: | 
| 106 | 
            -
            - . | 
| 107 | 
            -
            - . | 
| 108 | 
            -
            - . | 
| 49 | 
            +
            files:
         | 
| 50 | 
            +
            - ".github/workflows/ruby.yml"
         | 
| 51 | 
            +
            - ".gitignore"
         | 
| 52 | 
            +
            - ".rspec"
         | 
| 53 | 
            +
            - ".yardopts"
         | 
| 109 54 | 
             
            - ChangeLog.md
         | 
| 110 55 | 
             
            - Gemfile
         | 
| 111 56 | 
             
            - LICENSE.txt
         | 
| 112 57 | 
             
            - README.md
         | 
| 113 58 | 
             
            - Rakefile
         | 
| 114 | 
            -
            - VERSION
         | 
| 115 59 | 
             
            - ffi-libc.gemspec
         | 
| 60 | 
            +
            - gemspec.yml
         | 
| 116 61 | 
             
            - lib/ffi/libc.rb
         | 
| 117 62 | 
             
            - lib/ffi/libc/af.rb
         | 
| 63 | 
            +
            - lib/ffi/libc/ifaddrs.rb
         | 
| 64 | 
            +
            - lib/ffi/libc/ifaddrs_union.rb
         | 
| 118 65 | 
             
            - lib/ffi/libc/in6_addr.rb
         | 
| 119 66 | 
             
            - lib/ffi/libc/in_addr.rb
         | 
| 120 67 | 
             
            - lib/ffi/libc/libc.rb
         | 
| 121 | 
            -
            - lib/ffi/libc/ | 
| 122 | 
            -
            - lib/ffi/libc/ | 
| 123 | 
            -
            - lib/ffi/libc/ | 
| 124 | 
            -
            - lib/ffi/libc/ | 
| 125 | 
            -
            - lib/ffi/libc/ | 
| 68 | 
            +
            - lib/ffi/libc/rusage.rb
         | 
| 69 | 
            +
            - lib/ffi/libc/sockaddr.rb
         | 
| 70 | 
            +
            - lib/ffi/libc/sockaddr_dl.rb
         | 
| 71 | 
            +
            - lib/ffi/libc/sockaddr_family.rb
         | 
| 72 | 
            +
            - lib/ffi/libc/sockaddr_in.rb
         | 
| 73 | 
            +
            - lib/ffi/libc/sockaddr_in6.rb
         | 
| 126 74 | 
             
            - lib/ffi/libc/timeval.rb
         | 
| 127 75 | 
             
            - lib/ffi/libc/timezone.rb
         | 
| 128 76 | 
             
            - lib/ffi/libc/types.rb
         | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 77 | 
            +
            - spec/ifaddrs_spec.rb
         | 
| 78 | 
            +
            - spec/libc_spec.rb
         | 
| 79 | 
            +
            - spec/spec_helper.rb
         | 
| 80 | 
            +
            homepage: https://github.com/postmodern/ffi-libc#redme
         | 
| 81 | 
            +
            licenses:
         | 
| 132 82 | 
             
            - MIT
         | 
| 133 | 
            -
             | 
| 83 | 
            +
            metadata:
         | 
| 84 | 
            +
              documentation_uri: https://rubydoc.info/gems/ffi-libc
         | 
| 85 | 
            +
              source_code_uri: https://github.com/postmodern/ffi-libc
         | 
| 86 | 
            +
              bug_tracker_uri: https://github.com/postmodern/ffi-libc/issues
         | 
| 87 | 
            +
              changelog_uri: https://github.com/postmodern/ffi-libc/blob/master/ChangeLog.md
         | 
| 88 | 
            +
            post_install_message:
         | 
| 134 89 | 
             
            rdoc_options: []
         | 
| 135 | 
            -
             | 
| 136 | 
            -
            require_paths: 
         | 
| 90 | 
            +
            require_paths:
         | 
| 137 91 | 
             
            - lib
         | 
| 138 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 139 | 
            -
               | 
| 140 | 
            -
              requirements: 
         | 
| 92 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
              requirements:
         | 
| 141 94 | 
             
              - - ">="
         | 
| 142 | 
            -
                - !ruby/object:Gem::Version | 
| 143 | 
            -
                   | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
                  version: "0"
         | 
| 147 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 148 | 
            -
              none: false
         | 
| 149 | 
            -
              requirements: 
         | 
| 95 | 
            +
                - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                  version: '0'
         | 
| 97 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 98 | 
            +
              requirements:
         | 
| 150 99 | 
             
              - - ">="
         | 
| 151 | 
            -
                - !ruby/object:Gem::Version | 
| 152 | 
            -
                   | 
| 153 | 
            -
                  - 0
         | 
| 154 | 
            -
                  version: "0"
         | 
| 100 | 
            +
                - !ruby/object:Gem::Version
         | 
| 101 | 
            +
                  version: '0'
         | 
| 155 102 | 
             
            requirements: []
         | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
            signing_key: 
         | 
| 160 | 
            -
            specification_version: 3
         | 
| 103 | 
            +
            rubygems_version: 3.2.22
         | 
| 104 | 
            +
            signing_key:
         | 
| 105 | 
            +
            specification_version: 4
         | 
| 161 106 | 
             
            summary: Useful FFI bindings for libc
         | 
| 162 107 | 
             
            test_files: []
         | 
| 163 | 
            -
             | 
    
        data/.specopts
    DELETED
    
    | @@ -1 +0,0 @@ | |
| 1 | 
            -
            --colour --format specdoc
         | 
    
        data/VERSION
    DELETED
    
    | @@ -1 +0,0 @@ | |
| 1 | 
            -
            0.0.3
         | 
    
        data/lib/ffi/libc/sock_addr.rb
    DELETED
    
    | @@ -1,17 +0,0 @@ | |
| 1 | 
            -
            require 'ffi/libc/types'
         | 
| 2 | 
            -
            require 'ffi/libc/sock_addr_family'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module FFI
         | 
| 5 | 
            -
              module LibC
         | 
| 6 | 
            -
                #
         | 
| 7 | 
            -
                # The generic `sock_addr` structure.
         | 
| 8 | 
            -
                #
         | 
| 9 | 
            -
                class SockAddr < SockAddrFamily
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  layout :len, :uint8,
         | 
| 12 | 
            -
                         :family, :sa_family_t,
         | 
| 13 | 
            -
                         :data, :char
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
            end
         | 
| @@ -1,19 +0,0 @@ | |
| 1 | 
            -
            require 'ffi/libc/types'
         | 
| 2 | 
            -
            require 'ffi/libc/sock_addr_family'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module FFI
         | 
| 5 | 
            -
              module LibC
         | 
| 6 | 
            -
                #
         | 
| 7 | 
            -
                # sockaddr inet, always good to have around
         | 
| 8 | 
            -
                #
         | 
| 9 | 
            -
                class SockAddrIn < SockAddrFamily
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  layout :len, :uint8,
         | 
| 12 | 
            -
                         :family, :sa_family_t,
         | 
| 13 | 
            -
                         :port, :in_port_t,
         | 
| 14 | 
            -
                         :addr, :in_addr_t,
         | 
| 15 | 
            -
                         :_sa_zero, [:uint8, 8]
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
            end
         |