Sha256: 64aa1c7a96e45dfe978c2e35a997965d04d1bf8b3a676b56826d92db9f6cb877

Contents?: true

Size: 1.7 KB

Versions: 13

Compression:

Stored size: 1.7 KB

Contents

module Libuv
    module FsChecks


        module ClassMethods
            def fs_lookup(ref)
                ref.to_ptr.address
            end
        end

        def self.included(base)
            base.extend(ClassMethods)
        end


        def stat
            @stat_deferred = @loop.defer

            request = ::Libuv::Ext.allocate_request_fs
            pre_check @stat_deferred, request, ::Libuv::Ext.fs_fstat(@loop.handle, request, @fileno, callback(:on_stat, request.address))
            @stat_deferred.promise
        end


        private


        def on_stat(req)
            if post_check(req, @stat_deferred)
                uv_stat = req[:stat]
                uv_members = uv_stat.members

                stats = {}
                uv_members.each do |key|
                    stats[key] = uv_stat[key]
                end

                cleanup(req)
                @stat_deferred.resolve(stats)
            end
            @stat_deferred = nil
        end

        def pre_check(deferrable, request, result)
            error = check_result result
            if error
                @request_refs.delete request.address
                ::Libuv::Ext.free(request)
                deferrable.reject(error)
            end
            deferrable.promise
        end

        def cleanup(req)
            cleanup_callbacks req.to_ptr.address

            ::Libuv::Ext.fs_req_cleanup(req)
            ::Libuv::Ext.free(req)
        end

        def post_check(req, deferrable)
            error = check_result(req[:result])
            if error
                cleanup(req)
                deferrable.reject(error)
                false
            else
                true
            end
        end
    end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
libuv-2.0.12 lib/libuv/mixins/fs_checks.rb
libuv-2.0.11 lib/libuv/mixins/fs_checks.rb
libuv-2.0.10 lib/libuv/mixins/fs_checks.rb
libuv-2.0.9 lib/libuv/mixins/fs_checks.rb
libuv-2.0.8 lib/libuv/mixins/fs_checks.rb
libuv-2.0.6 lib/libuv/mixins/fs_checks.rb
libuv-2.0.5 lib/libuv/mixins/fs_checks.rb
libuv-2.0.4 lib/libuv/mixins/fs_checks.rb
libuv-2.0.3 lib/libuv/mixins/fs_checks.rb
libuv-2.0.2 lib/libuv/mixins/fs_checks.rb
libuv-2.0.1 lib/libuv/mixins/fs_checks.rb
libuv-2.0.0 lib/libuv/mixins/fs_checks.rb
libuv-1.3.0 lib/libuv/mixins/fs_checks.rb