wsutil: Make progfile_dir the main program file directory.

If our program file directory has a trailing "/extcap" or "\extcap",
trim it off. This should let extcaps determine the proper data file and
plugin directories. Fixes #15592.
This commit is contained in:
Gerald Combs 2022-12-21 18:37:05 -08:00
parent e9176b652d
commit 5dcefc7777
2 changed files with 21 additions and 1 deletions

View File

@ -517,6 +517,20 @@ get_executable_path(void)
}
#endif /* _WIN32 */
static void trim_progfile_dir(void)
{
char *progfile_last_dir = find_last_pathname_separator(progfile_dir);
if (! (progfile_last_dir && strncmp(progfile_last_dir + 1, "extcap", sizeof("extcap")) == 0)) {
return;
}
*progfile_last_dir = '\0';
char *extcap_progfile_dir = progfile_dir;
progfile_dir = g_strdup(extcap_progfile_dir);
g_free(extcap_progfile_dir);
}
/*
* Get the pathname of the directory from which the executable came,
* and save it for future use. Returns NULL on success, and a
@ -558,6 +572,7 @@ configuration_init(
*/
progfile_dir = g_path_get_dirname(prog_pathname);
if (progfile_dir != NULL) {
trim_progfile_dir();
return NULL; /* we succeeded */
} else {
/*
@ -812,6 +827,7 @@ configuration_init(
* OK, we have the path we want.
*/
progfile_dir = prog_pathname;
trim_progfile_dir();
return NULL;
} else {
/*

View File

@ -53,7 +53,11 @@ WS_DLL_PUBLIC const char *get_configuration_namespace(void);
WS_DLL_PUBLIC bool is_packet_configuration_namespace(void);
/*
* Get the directory in which the program resides.
* Get the directory in which the main (Wireshark, TShark, Logray, etc)
* program resides.
* Extcaps should use get_extcap_dir() to get their path.
*
* @return The main program file directory.
*/
WS_DLL_PUBLIC const char *get_progfile_dir(void);