NAME FFI::Util - Some useful pointer utilities when writing FFI modules (Deprecated) VERSION version 0.17 SYNOPSIS use FFI::Util; DESCRIPTION Note: This module has largely been obsoleted by FFI::Platypus, which I recommend that you use instead of this module. This module may be removed from CPAN at a future date, but not before 31 January 2017. 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.