From: RadosÅ‚aw Korzeniewski Date: Mon, 23 Nov 2020 17:34:33 +0000 (+0100) Subject: pluginlib: Add scan_parameter_str to replace some sscanf. X-Git-Tag: Release-11.3.2~750 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f0d0a0986700944a2ffe4023529f39cea63b1b9;p=thirdparty%2Fbacula.git pluginlib: Add scan_parameter_str to replace some sscanf. --- diff --git a/bacula/src/plugins/fd/pluginlib/pluginlib.cpp b/bacula/src/plugins/fd/pluginlib/pluginlib.cpp index 0982b19e8..b1795610f 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib.cpp +++ b/bacula/src/plugins/fd/pluginlib/pluginlib.cpp @@ -497,3 +497,27 @@ bool add_param_str(alist **list, const char *pname, const char *name, char *valu } return false; } + +/** + * @brief + * + * @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) +{ + if (prefix != NULL){ + int len = strlen(prefix); + if (strncmp(cmd.c_str(), prefix, len) == 0) + { + // prefix match, extract param + pm_strcpy(param, cmd.c_str() + len); + strip_trailing_newline(param.c_str()); + return true; + } + } + + return false; +} diff --git a/bacula/src/plugins/fd/pluginlib/pluginlib.h b/bacula/src/plugins/fd/pluginlib/pluginlib.h index 16cc3203c..78e42a6b2 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib.h +++ b/bacula/src/plugins/fd/pluginlib/pluginlib.h @@ -160,4 +160,6 @@ 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); + #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 3b870aaf6..58f1a3598 100644 --- a/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp +++ b/bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp @@ -71,5 +71,23 @@ int main() ok(strcmp((char*)list->next(), "Kern") == 0, "check element Kern"); delete list; + POOL_MEM cmd(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"); + ok(bstrcmp(param.c_str(), fname1) , "check scan parameter str param"); + nok(scan_parameter_str(cmd, "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"); + ok(bstrcmp(param.c_str(), fname2) , "check scan parameter str with spaces param"); + return report(); }