restore locale after opening windows file
This commit is contained in:
parent
accdc9bb23
commit
2c65d77583
1 changed files with 23 additions and 9 deletions
30
ggml.c
30
ggml.c
|
@ -20283,23 +20283,37 @@ struct gguf_context * gguf_init_empty(void) {
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) {
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
static FILE *open_file(const char *fname) {
|
||||||
|
char* oldLocale = setlocale(LC_ALL, NULL);
|
||||||
|
if(oldLocale) {
|
||||||
|
oldLocale = strdup(oldLocale); // duplicate since setlocale returns a pointer to internal memory which might be altered by subsequent setlocale calls
|
||||||
|
}
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
|
|
||||||
|
FILE *file = NULL;
|
||||||
size_t size = mbstowcs(NULL, fname, 0) + 1;
|
size_t size = mbstowcs(NULL, fname, 0) + 1;
|
||||||
wchar_t *wfname = malloc(size * sizeof(wchar_t));
|
wchar_t *wfname = malloc(size * sizeof(wchar_t));
|
||||||
if (!wfname) {
|
if (wfname && mbstowcs(wfname, fname, size) != (size_t)-1) {
|
||||||
return NULL;
|
file = _wfopen(wfname, L"rb");
|
||||||
}
|
}
|
||||||
if (mbstowcs(wfname, fname, size) == (size_t)-1) {
|
|
||||||
free(wfname);
|
free(wfname);
|
||||||
return NULL;
|
|
||||||
|
if (oldLocale) {
|
||||||
|
setlocale(LC_ALL, oldLocale);
|
||||||
|
free(oldLocale);
|
||||||
}
|
}
|
||||||
FILE * file = _wfopen(wfname, L"rb");
|
|
||||||
free(wfname);
|
return file;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
FILE * file = fopen(fname, "rb");
|
static FILE *open_file(const char *fname) {
|
||||||
|
return fopen(fname, "rb");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) {
|
||||||
|
FILE *file = open_file(fname);
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue