From 3ce18d50ebf3816165809c2859cabcf594130bbf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Korzeniewski?= Date: Tue, 24 Nov 2020 09:39:41 +0100 Subject: [PATCH] pluginlib: Extend scan_parameter_str for char*. --- bacula/src/plugins/fd/pluginlib/pluginlib.cpp | 9 ++++--- bacula/src/plugins/fd/pluginlib/pluginlib.h | 3 ++- .../plugins/fd/pluginlib/pluginlib_test.cpp | 26 ++++++++++++------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/bacula/src/plugins/fd/pluginlib/pluginlib.cpp b/bacula/src/plugins/fd/pluginlib/pluginlib.cpp index b1795610f..599502bb9 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib.cpp +++ b/bacula/src/plugins/fd/pluginlib/pluginlib.cpp @@ -499,21 +499,22 @@ bool add_param_str(alist **list, const char *pname, const char *name, char *valu } /** - * @brief + * @brief Scans for `prefix` in `cmd`, when match copy remaining to `param`. + * * * @param cmd * @param param * @return true - when prefix match in the command * @return false - when not */ -bool scan_parameter_str(const POOL_MEM &cmd, const char *prefix, POOL_MEM ¶m) +bool scan_parameter_str(const char * cmd, const char *prefix, POOL_MEM ¶m) { if (prefix != NULL){ int len = strlen(prefix); - if (strncmp(cmd.c_str(), prefix, len) == 0) + if (strncmp(cmd, prefix, len) == 0) { // prefix match, extract param - pm_strcpy(param, cmd.c_str() + len); + pm_strcpy(param, cmd + len); strip_trailing_newline(param.c_str()); return true; } diff --git a/bacula/src/plugins/fd/pluginlib/pluginlib.h b/bacula/src/plugins/fd/pluginlib/pluginlib.h index 78e42a6b2..84ca5897b 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib.h +++ b/bacula/src/plugins/fd/pluginlib/pluginlib.h @@ -160,6 +160,7 @@ bool parse_param(int ¶m, const char *pname, const char *name, char *value, b bool parse_param(POOL_MEM ¶m, const char *pname, const char *name, char *value); bool add_param_str(alist **list, const char *pname, const char *name, char *value); -bool scan_parameter_str(const POOL_MEM &cmd, const char *prefix, POOL_MEM ¶m); +bool scan_parameter_str(const char * cmd, const char *prefix, POOL_MEM ¶m); +inline bool scan_parameter_str(const POOL_MEM &cmd, const char *prefix, POOL_MEM ¶m) { return scan_parameter_str(cmd.c_str(), prefix, param); } #endif /* _PLUGINLIB_H_ */ \ No newline at end of file diff --git a/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp b/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp index 58f1a3598..38eab1829 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp +++ b/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp @@ -71,23 +71,29 @@ int main() ok(strcmp((char*)list->next(), "Kern") == 0, "check element Kern"); delete list; - POOL_MEM cmd(PM_NAME); + POOL_MEM cmd1(PM_NAME); POOL_MEM param(PM_NAME); const char *prefix = "FNAME:"; const char *fname1 = "/etc/passwd"; - pm_strcpy(cmd, prefix); - pm_strcat(cmd, fname1); - pm_strcat(cmd, "\n"); - ok(scan_parameter_str(cmd, prefix, param), "check scan parameter str match"); + pm_strcpy(cmd1, prefix); + pm_strcat(cmd1, fname1); + pm_strcat(cmd1, "\n"); + ok(scan_parameter_str(cmd1, prefix, param), "check scan parameter str match"); ok(bstrcmp(param.c_str(), fname1) , "check scan parameter str param"); - nok(scan_parameter_str(cmd, "prefix", param), "check scan parameter str not match"); + nok(scan_parameter_str(cmd1, "prefix", param), "check scan parameter str not match"); const char *fname2 = "/home/this is a filename with spaces which /are hard to/ manage.com"; - pm_strcpy(cmd, prefix); - pm_strcat(cmd, fname2); - pm_strcat(cmd, "\n"); - ok(scan_parameter_str(cmd, prefix, param), "check scan parameter str with spaces match"); + pm_strcpy(cmd1, prefix); + pm_strcat(cmd1, fname2); + pm_strcat(cmd1, "\n"); + ok(scan_parameter_str(cmd1, prefix, param), "check scan parameter str with spaces match"); ok(bstrcmp(param.c_str(), fname2) , "check scan parameter str with spaces param"); + char cmd2[256]; + snprintf(cmd2, 256, "%s%s\n", prefix, fname1); + ok(scan_parameter_str(cmd2, prefix, param), "check scan parameter for char* str match"); + ok(bstrcmp(param.c_str(), fname1) , "check scan parameter for char* str param"); + nok(scan_parameter_str(cmd2, "prefix", param), "check scan parameter for char* str not match"); + return report(); } -- 2.47.3