From: RadosÅ‚aw Korzeniewski Date: Tue, 24 Nov 2020 08:39:41 +0000 (+0100) Subject: pluginlib: Extend scan_parameter_str for char*. X-Git-Tag: Release-11.3.2~749 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ce18d50ebf3816165809c2859cabcf594130bbf;p=thirdparty%2Fbacula.git pluginlib: Extend scan_parameter_str for char*. --- 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(); }