GlusterFS-GFAPI-FFI

 view release on metacpan or  search on metacpan

lib/GlusterFS/GFAPI/FFI.pm  view on Meta::CPAN

        my $psize = $FFI->sizeof('opaque');
        my $count = scalar(@{$vectors});

        my $buffer = calloc($count, $vsize);
        my @len    = ();
        my @ptrs   = ();

        for (my $i=0; $i<$count; $i++)
        {
            $len[$i] = pack('L!', length($vectors->[$i]));

            my $p_base  = pack('P', $vectors->[$i]);
            my $p_len   = pack('P', $len[$i]);
            my $pp_base = pack('P', $p_base);

            push(@ptrs, $p_base, $p_len, $pp_base);

            memcpy($buffer + ($vsize * $i), unpack('L!', $pp_base), $psize);
            memcpy($buffer + ($vsize * $i) + $psize, unpack('L!', $p_len), length($len[$i]));
        }

        my $retval = $sub->($fd, $buffer, $count, $offset, $flags);

        free($buffer);

        return $retval;
    });
$FFI->attach(glfs_preadv_async => ['glfs_fd_t', 'Iovec', 'int', 'int', 'int', 'off_t', 'glfs_io_cbk', 'opaque'] => 'ssize_t');
$FFI->attach(glfs_pwritev_async => ['glfs_fd_t', 'Iovec', 'int', 'int', 'int', 'off_t', 'glfs_io_cbk', 'opaque'] => 'ssize_t');
$FFI->attach(glfs_lseek => ['glfs_fd_t', 'off_t', 'int'] => 'int');
$FFI->attach(glfs_truncate => ['glfs_t', 'string', 'off_t'] => 'int');
$FFI->attach(glfs_ftruncate => ['glfs_fd_t', 'off_t'] => 'int');
$FFI->attach(glfs_ftruncate_async => ['glfs_fd_t', 'off_t', 'glfs_io_cbk', 'opaque'] => 'int');
$FFI->attach(glfs_lstat => ['glfs_t', 'string', 'Stat'] => 'int');
$FFI->attach(glfs_stat  => ['glfs_t', 'string', 'Stat'] => 'int');
$FFI->attach(glfs_fstat => ['glfs_fd_t', 'Stat'] => 'int');
$FFI->attach(glfs_fsync => ['glfs_fd_t'] => 'int');
$FFI->attach(glfs_fsync_async => ['glfs_fd_t', 'glfs_io_cbk', 'opaque'] => 'int');
$FFI->attach(glfs_fdatasync => ['glfs_fd_t'] => 'int');
$FFI->attach(glfs_fdatasync_async => ['glfs_fd_t', 'glfs_io_cbk', 'opaque'] => 'int');
$FFI->attach(glfs_access => ['glfs_t', 'string', 'int'] => 'int');
$FFI->attach(glfs_symlink => ['glfs_t', 'string', 'string'] => 'int');
$FFI->attach(glfs_readlink => ['glfs_t', 'string', 'string', 'size_t'] => 'int');
$FFI->attach(glfs_mknod => ['glfs_t', 'string', 'mode_t', 'dev_t'] => 'int');
$FFI->attach(glfs_mkdir => ['glfs_t', 'string', 'mode_t'] => 'int');
$FFI->attach(glfs_unlink => ['glfs_t', 'string'] => 'int');
$FFI->attach(glfs_rmdir => ['glfs_t', 'string'] => 'int');
$FFI->attach(glfs_rename => ['glfs_t', 'string', 'string'] => 'int');
$FFI->attach(glfs_link => ['glfs_t', 'string', 'string'] => 'int');
$FFI->attach(glfs_opendir => ['glfs_t', 'string'] => 'glfs_fd_t');
$FFI->attach(glfs_readdir_r => ['glfs_fd_t', 'Dirent', 'opaque*'] => 'int');
$FFI->attach(glfs_readdirplus_r => ['glfs_fd_t', 'Stat', 'Dirent', 'opaque*'] => 'int');
$FFI->attach(glfs_readdir => ['glfs_fd_t'] => 'Dirent');
$FFI->attach(glfs_readdirplus => ['glfs_fd_t', 'Stat'] => 'Dirent');
$FFI->attach(glfs_telldir => ['glfs_fd_t'] => 'long');
$FFI->attach(glfs_seekdir => ['glfs_fd_t', 'long'] => 'long');
$FFI->attach(glfs_closedir => ['glfs_fd_t'] => 'int');
$FFI->attach(glfs_statvfs => ['glfs_t', 'string', 'Statvfs'], => 'int');
$FFI->attach(glfs_chmod => ['glfs_t', 'string', 'mode_t'] => 'int');
$FFI->attach(glfs_fchmod => ['glfs_fd_t', 'mode_t'] => 'int');
$FFI->attach(glfs_chown => ['glfs_t', 'string', 'uid_t', 'gid_t'] => 'int');
$FFI->attach(glfs_lchown => ['glfs_t', 'string', 'uid_t', 'gid_t'] => 'int');
$FFI->attach(glfs_fchown => ['glfs_fd_t', 'uid_t', 'gid_t'] => 'int');
$FFI->attach(glfs_utimens => ['glfs_t', 'string', 'Timespecs'] => 'int');
$FFI->attach(glfs_lutimens => ['glfs_t', 'string', 'Timespecs'] => 'int');
$FFI->attach(glfs_futimens => ['glfs_fd_t', 'Timespecs'] => 'int');
$FFI->attach(glfs_getxattr => ['glfs_t', 'string', 'string', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_lgetxattr => ['glfs_t', 'string', 'string', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_fgetxattr => ['glfs_fd_t', 'string', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_listxattr => ['glfs_t', 'string', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_llistxattr => ['glfs_t', 'string', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_flistxattr => ['glfs_fd_t', 'opaque', 'size_t'] => 'ssize_t');
$FFI->attach(glfs_setxattr => ['glfs_t', 'string', 'string', 'opaque', 'size_t', 'int'] => 'int');
$FFI->attach(glfs_lsetxattr => ['glfs_t', 'string', 'string', 'opaque', 'size_t', 'int'] => 'int');
$FFI->attach(glfs_fsetxattr => ['glfs_fd_t', 'string', 'opaque', 'size_t', 'int'] => 'int');
$FFI->attach(glfs_removexattr => ['glfs_t', 'string', 'string'] => 'int');
$FFI->attach(glfs_lremovexattr => ['glfs_t', 'string', 'string'] => 'int');
$FFI->attach(glfs_fremovexattr => ['glfs_fd_t', 'string'] => 'int');
$FFI->attach(glfs_fallocate => ['glfs_fd_t', 'int', 'off_t', 'size_t'] => 'int');
$FFI->attach(glfs_discard => ['glfs_fd_t', 'off_t', 'size_t'] => 'int');
$FFI->attach(glfs_discard_async => ['glfs_fd_t', 'off_t', 'size_t', 'glfs_io_cbk', 'opaque'] => 'int');
$FFI->attach(glfs_zerofill => ['glfs_fd_t', 'off_t', 'size_t'] => 'int');
$FFI->attach(glfs_zerofill_async => ['glfs_fd_t', 'off_t', 'off_t', 'glfs_io_cbk', 'opaque'] => 'int');
$FFI->attach(glfs_getcwd => ['glfs_t', 'string', 'size_t'] => 'string');
$FFI->attach(glfs_chdir => ['glfs_t', 'string'] => 'int');
$FFI->attach(glfs_fchdir => ['glfs_fd_t'] => 'int');
$FFI->attach(glfs_realpath => ['glfs_t', 'string', 'string'] => 'string');
$FFI->attach(glfs_posix_lock => ['glfs_fd_t', 'int', 'Flock'] => 'int');
$FFI->attach(glfs_dup => ['glfs_fd_t'] => 'glfs_fd_t');

sub new
{
    my $class = shift;
    my %attrs = ();

    bless(\%attrs, __PACKAGE__);
}

1;

__END__

=encoding utf8

=head1 NAME

GlusterFS::GFAPI::FFI - FFI Perl binding for GlusterFS libgfapi

=head1 VERSION

0.4

=head1 SYNOPSIS

    # make GlusterFS Volume instance
    my $fs = GlusterFS::GFAPI::FFI::glfs_new('libgfapi-perl');

    # set server information for a volume
    if (GlusterFS::GFAPI::FFI::glfs_set_volfile_server($fs, 'tcp', 'node1', 24007))
    {
        die "Failed to set volfile server: $!";
    }

lib/GlusterFS/GFAPI/FFI.pm  view on Meta::CPAN

=head2 C<glfs_unlink($fs, $path)>

    $retval = glfs_unlink($fs, $path);

=head2 C<glfs_rmdir($fs, $path)>

    $retval = glfs_rmdir($fs, $path);

=head2 C<glfs_rename($fs, $oldpath, $newpath)>

    $retval = glfs_rename($fs, $oldpath, $newpath);

=head2 C<glfs_link($fs, $oldpath, $newpath)>

    $retval = glfs_link($fs, $oldpath, $newpath);

=head2 C<glfs_opendir($fs, $path)>

    $retval = glfs_opendir($fs, $path);

=head2 C<glfs_readdir_r($fd, $dirent, \$result)>

    $retval = glfs_readdir_r($fd, $dirent, \$result);

=head2 C<glfs_readdirplus_r($fd, $stat, $dirent, \$result)>

    $retval = glfs_readdirplus_r($fd, $stat, $dirent, \$result);

=head2 C<glfs_readdir($fd)>

    $dirent = glfs_readdir($fd);

=head2 C<glfs_readdirplus($fd, $stat)>

    $dirent = glfs_readdirplus($fd, $stat);

=head2 C<glfs_telldir($fd)>

    $retval = glfs_telldir($fd);

=head2 C<glfs_seekdir($fd, $offset)>

    $retval = glfs_seekdir($fd, $offset);

=head2 C<glfs_closedir($fd)>

    $retval = glfs_closedir($fd);

=head2 C<glfs_statvfs($fs, $path, $statvfs)>

    $retval = glfs_statvfs($fs, $path, $statvfs);

=head2 C<glfs_chmod($fs, $path, $mode)>

    $retval = glfs_chmod($fs, $path, $mode);

=head2 C<glfs_fchmod($fd, $mode)>

    $retval = glfs_fchmod($fd, $mode);

=head2 C<glfs_chown($fs, $path, $uid, $gid)>

    $retval = glfs_chown($fs, $path, $uid, $gid);

=head2 C<glfs_lchown($fs, $path, $uid, $gid)>

    $retval = glfs_lchown($fs, $path, $uid, $gid);

=head2 C<glfs_fchown($fd, $uid, $gid)>

    $retval = glfs_fchown($fd, $uid, $gid);

=head2 C<glfs_utimens($fs, $path, $timespecs)>

    $retval = glfs_utimens($fs, $path, $timespecs);

=head2 C<glfs_ltimens($fs, $path, $timespecs)>

    $retval = glfs_ltimens($fs, $path, $timespecs);

=head2 C<glfs_ftimens($fd, $timespecs)>

    $retval = glfs_ftimens($fd, $timespecs);

=head2 C<glfs_getxattr($fs, $path, $key, $value, $valsz)>

    $retval = glfs_getxattr($fs, $path, $key, $value, $valsz);

=head2 C<glfs_lgetxattr($fs, $path, $key, $value, $valsz)>

    $retval = glfs_lgetxattr($fs, $path, $key, $value, $valsz);

=head2 C<glfs_lgetxattr($fd, $key, $value, $valsz)>

    $retval = glfs_lgetxattr($fd, $key, $value, $valsz);

=head2 C<glfs_listxattr($fs, $path, $value, $valsz)>

    $retval = glfs_listxattr($fs, $path, $value, $valsz);

=head2 C<glfs_llistxattr($fs, $path, $value, $valsz)>

    $retval = glfs_llistxattr($fs, $path, $value, $valsz);

=head2 C<glfs_flistxattr($fd, $value, $valsz)>

    $retval = glfs_flistxattr($fd, $value, $valsz);

=head2 C<glfs_setxattr($fs, $path, $key, $value, $valsz, $flags)>

    $retval = glfs_setxattr($fs, $path, $key, $value, $valsz, $flags);

=head2 C<glfs_lsetxattr($fs, $path, $key, $value, $valsz, $flags)>

    $retval = glfs_lsetxattr($fs, $path, $key, $value, $valsz, $flags);

=head2 C<glfs_fsetxattr($fd, $key, $value, $valsz, $flags)>

    $retval = glfs_fsetxattr($fd, $key, $value, $valsz, $flags);

=head2 C<glfs_removexttr($fd, $path, $key)>

    $retval = glfs_removexttr($fd, $path, $key);

=head2 C<glfs_lremovexttr($fd, $path, $key)>

    $retval = glfs_lremovexttr($fd, $path, $key);

=head2 C<glfs_fremovexttr($fs, $key)>

    $retval = glfs_fremovexttr($fs, $key);



( run in 0.723 second using v1.01-cache-2.11-cpan-71847e10f99 )