6298f49816
On windows, if the model dir contained unicode characters clip models would fail to load. This fixes the file name handling in clip.cpp to support utf16 on windows.
42 lines
1.2 KiB
Diff
42 lines
1.2 KiB
Diff
diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp
|
|
index 95fbe3d0..5a02a6ec 100644
|
|
--- a/examples/llava/clip.cpp
|
|
+++ b/examples/llava/clip.cpp
|
|
@@ -32,6 +33,14 @@
|
|
#include <cinttypes>
|
|
#include <limits>
|
|
|
|
+#if defined(_WIN32)
|
|
+#define WIN32_LEAN_AND_MEAN
|
|
+#ifndef NOMINMAX
|
|
+ #define NOMINMAX
|
|
+#endif
|
|
+#include <windows.h>
|
|
+#endif
|
|
+
|
|
//#define CLIP_DEBUG_FUNCTIONS
|
|
|
|
// RGB uint8 image
|
|
@@ -1055,7 +1064,22 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
|
|
return nullptr;
|
|
}
|
|
|
|
+#ifdef _WIN32
|
|
+ int wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, NULL, 0);
|
|
+ if (!wlen) {
|
|
+ return NULL;
|
|
+ }
|
|
+ wchar_t * wbuf = (wchar_t *) malloc(wlen * sizeof(wchar_t));
|
|
+ wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, wbuf, wlen);
|
|
+ if (!wlen) {
|
|
+ free(wbuf);
|
|
+ return NULL;
|
|
+ }
|
|
+ auto fin = std::ifstream(wbuf, std::ios::binary);
|
|
+ free(wbuf);
|
|
+#else
|
|
auto fin = std::ifstream(fname, std::ios::binary);
|
|
+#endif
|
|
if (!fin) {
|
|
LOG_TEE("cannot open model file for loading tensors\n");
|
|
clip_free(new_clip);
|