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}