Add slash to dir options and replace slashes with backslash on windows when loading file

This commit is contained in:
trollkotze 2024-03-27 01:37:26 +01:00
parent d4897432a1
commit 3c49d9387a

View file

@ -2742,19 +2742,23 @@ static void server_params_parse(int argc, char ** argv, server_params & sparams,
invalid_param = true; invalid_param = true;
break; break;
} }
char *name = argv[i]; std::string name = argv[i];
if (++i >= argc) { if (++i >= argc) {
invalid_param = true; invalid_param = true;
break; break;
} }
size_t slen = strlen(argv[i]); std::string fname = argv[i];
size_t slen = fname.length();
bool is_dir = slen < 5 || strncmp(argv[i] + slen - 5, ".gguf", 5) != 0; bool is_dir = slen < 5 || strncmp(argv[i] + slen - 5, ".gguf", 5) != 0;
// Append path separator for dirs // Append path separator for dir names
std::string fname = argv[i];
if (is_dir && argv[i][slen - 1] != '/') if (is_dir && argv[i][slen - 1] != '/')
fname += '/'; fname += '/';
sparams.control_vector_load_options.push_back({ argv[i-1], fname, is_dir }); if (is_dir && argv[i-1][slen - 1] != '/')
name += '/';
sparams.control_vector_load_options.push_back({ name, fname, is_dir });
break; break;
} else { } else {
fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
@ -3260,8 +3264,13 @@ int main(int argc, char ** argv) {
} }
if (opt.is_dir && v.fname.rfind(opt.name, 0) == 0) { if (opt.is_dir && v.fname.rfind(opt.name, 0) == 0) {
std::cout << "file exact match\n"; std::cout << "file exact match\n";
// opt.fname already includes '/' (or '\') while opt.name doesn't real_fname = opt.fname + v.fname.substr(opt.name.length());
real_fname = opt.fname + v.fname.substr(opt.name.length() + 1); #if defined(_WIN32)
std::replace(real_fname.begin(), real_fname.end(), '/', '\\');
#endif
size_t len = real_fname.length();
if (len < 5 || real_fname.compare(len - 5, 5, ".gguf") != 0)
real_fname += ".gguf";
break; break;
} }
} }