The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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 <plicease@cpan.org>

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.