NAME FFI::Util - Some useful pointer utilities when writing FFI modules VERSION version 0.11 SYNOPSIS use FFI::Util; DESCRIPTION This module provides some useful memory manipulation that is either difficult or impossible in pure Perl. It was originally intended to be used by Archive::Libarchive::FFI, but it may be useful in other projects. FUNCTIONS locate_module_share_lib my $path = locate_module_share_lib(); my $path = locate_module_share_lib($module_name, $module_filename); Returns the path to the shared library for the current module, or the module specified by $module_name (example: Foo::Bar) $module_filename(example /full/path/Foo/Bar.pm). scalar_to_buffer my($ptr, $size) = scalar_to_buffer $scalar; Given a scalar string value, return a pointer to where the data is stored and the size of the scalar in bytes. buffer_to_scalar my $scalar = buffer_to_scalar($ptr, $size); Given a pointer to a memory location and a size, construct a new scalar with the same content and size. deref_ptr_get my $ptr2 = deref_ptr_get($ptr1); equivalent to void *ptr1; void *ptr2; *ptr2 = *ptr1; deref_ptr_set deref_ptr_set($ptr1, $ptr2); equivalent to void **ptr1; void *ptr2; *ptr1 = ptr2; deref_str_get my $string = deref_str_get($ptr); equivalent to const char *string; const char **ptr; string = *ptr; deref_str_set deref_str_set($ptr, $string); equivalent to const char **ptr; const char *string; *ptr = string; deref_int_get my $integer = deref_int_get($ptr); equivalent to int *ptr; int integer; integer = *ptr; deref_int_set deref_int_set($ptr, $integer); equivalent to int *ptr; int integer; *ptr = integer; deref_uint_get my $unsigned_integer = deref_uint_get($ptr); equivalent to unsigned int unsigned_integer; unsigned int *ptr; unsigned_integer = *ptr; deref_uint_set deref_uint_set($ptr, $unsigned_integer); equivalent to unsigned int *ptr; unsigned int unsigned_integer; *ptr = unsigned_integer; deref_short_get my $short_integer = deref_short_get($ptr); equivalent to short short_integer; short *ptr; short_integer = *ptr; deref_short_set deref_short_set($ptr, $short_integer); equivalent to short *ptr; short short_integer; *ptr = short_integer; deref_ushort_get my $unsigned_short_integer = deref_ushort_get($ptr); equivalent to unsigned short unsigned_short_integer; unsigned short *ptr; unsigned unsigned_short_integer = *ptr; deref_ushort_set deref_ushort_set($ptr, $unsigned_short_integer); equivalent to unsigned short *ptr; unsigned short unsigned_short_integer; *ptr = unsigned_short_integer; deref_long_get my $long_integer = deref_long_get($ptr); equivalent to long long_integer; long *ptr; long_integer = *ptr; deref_long_set deref_long_set($ptr, $long_integer); equivalent to long *ptr; long long_integer; *ptr = long_integer; deref_ulong_get my $unsigned_long_integer = deref_ulong_get($ptr); equivalent to unsigned long unsigned_long_integer; unsigned long *ptr; unsigned unsigned_long_integer = *ptr; deref_ulong_set deref_ulong_set($ptr, $unsigned_long_integer); equivalent to unsigned long *ptr; unsigned long unsigned_long_integer; *ptr = unsigned_long_integer; deref_char_get my $char_integer = deref_char_get($ptr); equivalent to char char_integer; char *ptr; char_integer = *ptr; deref_char_set deref_char_set($ptr, $char_integer); equivalent to char *ptr; char char_integer; *ptr = char_integer; deref_uchar_get my $unsigned_char_integer = deref_uchar_get($ptr); equivalent to unsigned char unsigned char_integer; unsigned char *ptr; unsigned_char_integer = *ptr; deref_uchar_set deref_uchar_set($ptr, $unsigned_char_integer); equivalent to unsigned char *ptr; unsigned char unsigned_char_integer; *ptr = unsigned_char_integer; deref_float_get my $single_float = deref_float_get($ptr); equivalent to float single_float; float *ptr; single_float = *ptr; deref_float_set deref_float_set($ptr, $single_float); equivalent to float *ptr; float single_float; *ptr = single_float; deref_double_get my $double_float = deref_double_get($ptr); equivalent to double double_float; double *ptr; double_float = *ptr; deref_double_set deref_double_set($ptr, $double_float); equivalent to double *ptr; double double_float; *ptr = double_float; deref_int64_get my $int64 = deref_int64_get($ptr); equivalent to int64_t int64; int64_t *ptr; int64 = *ptr; deref_int64_set deref_int64_set($ptr, $int64); equivalent to int64_t *ptr; int64_t int64; *ptr = int64; deref_uint64_get my $uint64 = deref_uint64_get($ptr); equivalent to uint64_t uint64; uint64_t *ptr; uint64 = *ptr; deref_uint64_set deref_uint64_set($ptr, $uint64); equivalent to uint64_t *ptr; uint64_t uint64; *ptr = uint64; deref_dev_t_get Alias for appropriate derf_..._get if dev_t is provided by your compiler. deref_dev_t_set Alias for appropriate derf_..._set if dev_t is provided by your compiler. deref_gid_t_get Alias for appropriate derf_..._get if gid_t is provided by your compiler. deref_gid_t_set Alias for appropriate derf_..._set if gid_t is provided by your compiler. deref_size_t_get Alias for appropriate derf_..._get if size_t is provided by your compiler. deref_size_t_set Alias for appropriate derf_..._set if size_t is provided by your compiler. deref_time_t_get Alias for appropriate derf_..._get if time_t is provided by your compiler. deref_time_t_set Alias for appropriate derf_..._set if time_t is provided by your compiler. deref_uid_t_get Alias for appropriate derf_..._get if uid_t is provided by your compiler. deref_uid_t_set Alias for appropriate derf_..._set if uid_t is provided by your compiler. SEE ALSO Module::Build::FFI FFI::Platypus AUTHOR Graham Ollis COPYRIGHT AND LICENSE This software is copyright (c) 2013 by Graham Ollis. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.