If you have glibc (probably yes for Linux or Mac, probably no for Windows),
you can call memmem():

use NativeCall;

sub memmem(Blob $haystack, size_t $haystacklen,
           Blob $needle,   size_t $needlelen --> Pointer) is native {}

sub buf-index(Blob $buffer, Blob $needle) {
    (memmem($buffer, $buffer.bytes, $needle, $needle.bytes) // return)
        - nativecast(Pointer, $buffer)
}

my $buf = Buf.new(0,0,0,1,2,0);
my $needle = Buf.new(1,2);

say buf-index($buf, $needle);

Curt

Reply via email to