Implement no copy memory

Ardika Rommy Sanjaya ardikars at gmail.com
Mon May 20 01:44:46 UTC 2019


Hi,

> It looks like pamana copy value from 'u_char *' into 'Pointer<Byte> buf', correct or not? Because when I call buf.addr() it returns 0, what zero mean?
> How I can do with no copy? Just returns the address of 'u_char *' like below in callback method?

Returns 0 when call buf.addr() is fixed, but I got another issue. buf.addr() always returns same address. 

Regards,
Ardika Rommy Sanjaya

---

> On 20 May 2019, at 06.33, Ardika Rommy Sanjaya <ardikars at gmail.com> wrote:
> 
> Hi,
> 
> There is native function in libpcap library: typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);
> When I use jextract it generate code like below:
> 
> @NativeHeader(...)
> public interface pcap_h {
> 
>    ...
> 
>    @NativeLocation(...)
>    @NativeFunction("(u64:${pcap}i32u64:(u64:u8u64:${pcap_pkthdr}u64:u8)vu64:u8)i32")
>    int pcap_loop(Pointer<pcap> p, int cnt, Callback<pcap_handler> callback, Pointer<Byte> usr);
> 
>    @FunctionalInterface
>    @NativeCallback("(u64:u8u64:${pcap_pkthdr}u64:u8)v")
>    interface pcap_handler {
> 
>        void fn(Pointer<Byte> buf, Pointer<pcap_pkthdr> pkthdr, Pointer<Byte> usr) throws IllegalAccessException;
> 
>    }
> 
>    ...
> 
> }
> 
> It looks like pamana copy value from 'u_char *' into 'Pointer<Byte> buf', correct or not? Because when I call buf.addr() it returns 0, what zero mean?
> How I can do with no copy? Just returns the address of 'u_char *' like below in callback method?
> 
> void fn(long memoryAddressOf_u_char_ptr, Pointer<pcap_pkthdr> pkthdr, Pointer<Byte> usr) throws IllegalAccessException;
> 
> Thanks and Regards,
> Ardika Rommy Sanjaya



More information about the panama-dev mailing list