base64wrap.go

 1//go:build cgo
 2
 3package clib
 4
 5/*
 6#include "base64wrap.h"
 7#include <stdlib.h>
 8*/
 9import "C"
10import "unsafe"
11
12// WrapBase64 wraps base64-encoded data at 76 characters per line with \r\n
13// separators, as required by MIME (RFC 2045).
14func WrapBase64(data string) string {
15	if len(data) == 0 {
16		return ""
17	}
18
19	cData := C.CString(data)
20	defer C.free(unsafe.Pointer(cData))
21
22	var outLen C.size_t
23	result := C.wrap_base64(cData, C.size_t(len(data)), &outLen)
24	if result == nil {
25		return ""
26	}
27	defer C.free(unsafe.Pointer(result))
28
29	return C.GoStringN(result, C.int(outLen))
30}