@@ -2888,7 +2888,7 @@ struct llama_model_loader {
2888
2888
}
2889
2889
2890
2890
char split_prefix[PATH_MAX] = {0};
2891
- if (!llama_split_prefix(split_prefix, fname.c_str( ), fname.size (), idx, n_split)) {
2891
+ if (!llama_split_prefix(split_prefix, sizeof(split_prefix ), fname.c_str (), idx, n_split)) {
2892
2892
throw std::runtime_error(format("invalid split file: %s", fname.c_str()));
2893
2893
}
2894
2894
@@ -14806,25 +14806,19 @@ LLAMA_API int llama_split_path(char * split_path, size_t maxlen, const char * pa
14806
14806
return 0;
14807
14807
}
14808
14808
14809
- LLAMA_API int llama_split_prefix(char * dest, const char * split_path, size_t split_path_len , int split_no, int split_count) {
14810
- char split_prefix[PATH_MAX] = {0} ;
14811
- int split_no_file = 0 ;
14812
- int split_count_file = 0 ;
14813
- const char * split_format = "-00000-of-00000.gguf" ;
14809
+ int llama_split_prefix(char * dest, size_t maxlen, const char * split_path, int split_no, int split_count) {
14810
+ std::string str_split_path(split_path) ;
14811
+ char postfix[32] ;
14812
+ sprintf(postfix, "-%05d-of-%05d.gguf", split_no + 1, split_count) ;
14813
+ std::string str_postfix(postfix) ;
14814
14814
14815
- if (split_path_len > strlen(split_format) + 1) {
14816
- size_t prefix_len = split_path_len - strlen(split_format);
14817
- if (prefix_len >= sizeof(split_prefix)) {
14818
- prefix_len = sizeof(split_prefix) - 1; // leave room for null terminator
14819
- }
14820
- strncpy(split_prefix, split_path, prefix_len);
14821
-
14822
- int n = sscanf(&split_path[0] + strlen(split_prefix), "-%d-of-%d", &split_no_file, &split_count_file);
14823
- if (n == 2 && split_no_file - 1 == split_no && split_count_file == split_count) {
14824
- strcpy(dest, split_prefix);
14825
- return strlen(split_prefix);
14826
- }
14815
+ // check if dest ends with postfix
14816
+ auto size_prefix = str_split_path.size() - str_postfix.size();
14817
+ if (size_prefix > 0 && str_split_path.find(str_postfix, size_prefix) != std::string::npos) {
14818
+ strncpy(dest, split_path, std::min(size_prefix, maxlen));
14819
+ return size_prefix;
14827
14820
}
14821
+
14828
14822
return 0;
14829
14823
}
14830
14824
0 commit comments