From 308fb7f046986eb30f73a19c9b4eefcc2eab1803 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Sat, 31 Jan 2026 22:47:46 -0500 Subject: [PATCH] Port synccommon.GetAllEntryData (partial implementation) --- README.md | 2 +- synccommon.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7232cad..928cba5 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,6 @@ int main() { - [X] ~~ShearAgeFileLocal(vanityPath string) error~~ (not for use outside of libmutton) - [X] ~~ShearLocal(vanityPath, clientDeviceID string, onlyShearAgeFile bool) (string, bool, error)~~ (not for use outside of libmutton) - [X] WalkEntryDir() ([]string, []string, error) - - [X] ~~GetAllEntryData() (EntryMapT, error)~~ (not easy to port to C; also not needed) + - [X] GetAllEntryData() (EntryMapT, error) - [ ] syncserver - [ ] GetRemoteDataFromServer(clientDeviceID string) diff --git a/synccommon.go b/synccommon.go index ef14718..99da1f1 100644 --- a/synccommon.go +++ b/synccommon.go @@ -4,6 +4,9 @@ package main // #include "types.h" import "C" import ( + "unsafe" + + "github.com/rwinkhart/libmutton/age" "github.com/rwinkhart/libmutton/synccommon" ) @@ -26,3 +29,29 @@ func WalkEntryDir() (*C.char, *C.PascalString, C.int, *C.PascalString, C.int) { } return nil, getCPascalStringArrayFromStringSlice(files), C.int(len(files)), getCPascalStringArrayFromStringSlice(dirs), C.int(len(dirs)) } + +// GetAllEntryData returns: +// r0: err +// +// r1: vanityPaths (pointer to C-allocated array) +// +// r2: vanityPaths length +// +// r3: translatedAges (pointer to C-allocated array) +// +// r4: translatedAges length +// +//export GetAllEntryData +func GetAllEntryData() (*C.char, *C.PascalString, C.int, *uint8, C.int) { + entryMap, err := synccommon.GetAllEntryData() + if err != nil { + return C.CString(err.Error()), nil, 0, nil, 0 + } + var vanityPaths []string + var translatedAges []uint8 + for k, v := range entryMap { + vanityPaths = append(vanityPaths, k) + translatedAges = append(translatedAges, age.TranslateAgeTimestamp(v.AgeTimestamp)) + } + return nil, getCPascalStringArrayFromStringSlice(vanityPaths), C.int(len(vanityPaths)), (*uint8)(unsafe.Pointer(&translatedAges[0])), C.int(len(translatedAges)) +}