From 229485e40be40a97670909a9314cb1268802ad53 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Thu, 30 Apr 2026 16:22:56 +0200 Subject: [PATCH] taglib wchar support --- taglib-ffi.rkt | 5 +++++ taglib.rkt | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/taglib-ffi.rkt b/taglib-ffi.rkt index 07b7a46..9f5dfc5 100644 --- a/taglib-ffi.rkt +++ b/taglib-ffi.rkt @@ -12,6 +12,7 @@ _TagLib_AudioProperties-pointer taglib_file_new + taglib_file_new_wchar taglib_file_new_type taglib_file_is_valid taglib_file_free @@ -106,6 +107,10 @@ (define-tag-c-lib taglib_file_new (_fun _string/utf-8 -> _TagLib_File-pointer )) +; TAGLIB_C_EXPORT TagLib_File *taglib_file_new_wchar(const wchar_t *filename); +(define-tag-c-lib taglib_file_new_wchar + (_fun _string/utf-16 -> _TagLib_File-pointer )) + ; TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type); (define-tag-c-lib taglib_file_new_type (_fun _string/utf-8 TagLib_File_Type -> _TagLib_File-pointer)) diff --git a/taglib.rkt b/taglib.rkt index 3a3af8d..026ac2b 100644 --- a/taglib.rkt +++ b/taglib.rkt @@ -73,6 +73,19 @@ (if (eq? tag-file #f) (set! valid? #f) (set! valid? (taglib_file_is_valid tag-file))) + + (unless valid? + (when (eq? (system-type 'os) 'windows) + (set! tag-file (taglib_file_new_wchar file)) + (if (eq? tag-file #f) + (set! valid? #f) + (set! valid? (taglib_file_is_valid tag-file))))) + + (unless valid? + (unless (eq? tag-file #f) + (taglib_file_free tag-file) + (set! tag-file #f))) + (when valid? (let ((tag (taglib_file_tag tag-file)) (ap (taglib_file_audioproperties tag-file))