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 )