Use Pascal strings in place of null-termination; update documentation

This commit is contained in:
2026-01-21 18:17:21 -05:00
parent 868db8c038
commit a72be0393c
4 changed files with 99 additions and 20 deletions
+22 -16
View File
@@ -2,62 +2,68 @@ package main
/*
#include <stdlib.h>
typedef struct {
char* data;
int len;
} PascalString;
*/
import "C"
import (
"github.com/rwinkhart/libmutton/global"
)
// TODO Use a nil pointer for blank deviceIDs, not FSMisc (requires changes to libmutton)
// DirInit returns:
// r0: oldDeviceID (FSMisc if none)
// r0: err
//
// r1: err
// r1: oldDeviceID (FSMisc if none)
//
//export DirInit
func DirInit(preserveOldCfgDir bool) (*C.char, *C.char) {
func DirInit(preserveOldCfgDir bool) (*C.char, C.PascalString) {
oldDeviceID, err := global.DirInit(preserveOldCfgDir)
if err != nil {
return nil, C.CString(err.Error())
return C.CString(err.Error()), C.PascalString{data: nil, len: 0}
}
return C.CString(oldDeviceID), nil
return nil, getPascalString(oldDeviceID)
}
// GetCurrentDeviceID returns:
// r0: currentDeviceID (FSMisc if none)
// r0: err
//
// r1: err
// r1: currentDeviceID (FSMisc if none)
//
//export GetCurrentDeviceID
func GetCurrentDeviceID() (*C.char, *C.char) {
func GetCurrentDeviceID() (*C.char, C.PascalString) {
currentDeviceID, err := global.GetCurrentDeviceID()
if err != nil {
return nil, C.CString(err.Error())
return C.CString(err.Error()), C.PascalString{data: nil, len: 0}
}
return C.CString(currentDeviceID), nil
return nil, getPascalString(currentDeviceID)
}
// GetRealAgePath returns:
// realAgePath
//
//export GetRealAgePath
func GetRealAgePath(vanityPath *C.char) *C.char {
return C.CString(global.GetRealAgePath(C.GoString(vanityPath)))
func GetRealAgePath(vanityPath *C.char) C.PascalString {
return getPascalString(global.GetRealAgePath(C.GoString(vanityPath)))
}
// GetRealPath returns:
// realPath
//
//export GetRealPath
func GetRealPath(vanityPath *C.char) *C.char {
return C.CString(global.GetRealPath(C.GoString(vanityPath)))
func GetRealPath(vanityPath *C.char) C.PascalString {
return getPascalString(global.GetRealPath(C.GoString(vanityPath)))
}
// GetVanityPath returns:
// vanityPath
//
//export GetVanityPath
func GetVanityPath(realPath *C.char) *C.char {
return C.CString(global.GetVanityPath(C.GoString(realPath)))
func GetVanityPath(realPath *C.char) C.PascalString {
return getPascalString(global.GetVanityPath(C.GoString(realPath)))
}
func main() {}