07-clip-unicode.diff 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp
  2. index 95fbe3d0..5a02a6ec 100644
  3. --- a/examples/llava/clip.cpp
  4. +++ b/examples/llava/clip.cpp
  5. @@ -32,6 +33,14 @@
  6. #include <cinttypes>
  7. #include <limits>
  8. +#if defined(_WIN32)
  9. +#define WIN32_LEAN_AND_MEAN
  10. +#ifndef NOMINMAX
  11. + #define NOMINMAX
  12. +#endif
  13. +#include <windows.h>
  14. +#endif
  15. +
  16. //#define CLIP_DEBUG_FUNCTIONS
  17. // RGB uint8 image
  18. @@ -1055,7 +1064,22 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
  19. return nullptr;
  20. }
  21. +#ifdef _WIN32
  22. + int wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, NULL, 0);
  23. + if (!wlen) {
  24. + return NULL;
  25. + }
  26. + wchar_t * wbuf = (wchar_t *) malloc(wlen * sizeof(wchar_t));
  27. + wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, wbuf, wlen);
  28. + if (!wlen) {
  29. + free(wbuf);
  30. + return NULL;
  31. + }
  32. + auto fin = std::ifstream(wbuf, std::ios::binary);
  33. + free(wbuf);
  34. +#else
  35. auto fin = std::ifstream(fname, std::ios::binary);
  36. +#endif
  37. if (!fin) {
  38. LOG_TEE("cannot open model file for loading tensors\n");
  39. clip_free(new_clip);