0007-clip-unicode.patch 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. From 01c42149cbdc194644a2f138598029938e0dd447 Mon Sep 17 00:00:00 2001
  2. From: Gabe Goodhart <ghart@us.ibm.com>
  3. Date: Thu, 19 Sep 2024 17:09:57 -0600
  4. Subject: [PATCH] clip unicode
  5. ---
  6. examples/llava/clip.cpp | 23 +++++++++++++++++++++++
  7. 1 file changed, 23 insertions(+)
  8. diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp
  9. index b8941c74..3a735f17 100644
  10. --- a/examples/llava/clip.cpp
  11. +++ b/examples/llava/clip.cpp
  12. @@ -40,6 +40,14 @@
  13. #include <cinttypes>
  14. #include <limits>
  15. +#if defined(_WIN32)
  16. +#define WIN32_LEAN_AND_MEAN
  17. +#ifndef NOMINMAX
  18. + #define NOMINMAX
  19. +#endif
  20. +#include <windows.h>
  21. +#endif
  22. +
  23. #define LOG_INF(...) do { fprintf(stdout, __VA_ARGS__); } while (0)
  24. #define LOG_WRN(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
  25. #define LOG_ERR(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
  26. @@ -1227,7 +1235,22 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
  27. return nullptr;
  28. }
  29. +#ifdef _WIN32
  30. + int wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, NULL, 0);
  31. + if (!wlen) {
  32. + return NULL;
  33. + }
  34. + wchar_t * wbuf = (wchar_t *) malloc(wlen * sizeof(wchar_t));
  35. + wlen = MultiByteToWideChar(CP_UTF8, 0, fname, -1, wbuf, wlen);
  36. + if (!wlen) {
  37. + free(wbuf);
  38. + return NULL;
  39. + }
  40. + auto fin = std::ifstream(wbuf, std::ios::binary);
  41. + free(wbuf);
  42. +#else
  43. auto fin = std::ifstream(fname, std::ios::binary);
  44. +#endif
  45. if (!fin) {
  46. LOG_ERR("cannot open model file for loading tensors\n");
  47. clip_free(new_clip);
  48. --
  49. 2.39.3 (Apple Git-146)