GitRoot

Craft your forge, Build your project, Grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: MIT
 4
 5package gitroot
 6
 7// #include <stdlib.h>
 8import "C"
 9
10import (
11	"errors"
12	"unsafe"
13)
14
15func ptrToString(ptr uint32, size uint32) string {
16	return unsafe.String((*byte)(unsafe.Pointer(uintptr(ptr))), size)
17}
18
19func stringToPtr(s string) (uint32, uint32) {
20	ptr := unsafe.Pointer(unsafe.StringData(s))
21	return uint32(uintptr(ptr)), uint32(len(s))
22}
23
24func stringToLeakedPtr(s string) (uint32, uint32) {
25	size := C.ulong(len(s))
26	ptr := unsafe.Pointer(C.malloc(size))
27	copy(unsafe.Slice((*byte)(ptr), size), s)
28	return uint32(uintptr(ptr)), uint32(size)
29}
30
31func ptrSizeToError(ptrSize uint64) error {
32	if ptrSize == 0 {
33		return nil
34	}
35	ptrDiff := uint32(ptrSize >> 32)
36	sizeDiff := uint32(ptrSize)
37	return errors.New(ptrToString(ptrDiff, sizeDiff))
38}