]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
pluginlib: Extend scan_parameter_str for char*.
authorRadosław Korzeniewski <radoslaw@korzeniewski.net>
Tue, 24 Nov 2020 08:39:41 +0000 (09:39 +0100)
committerEric Bollengier <eric@baculasystems.com>
Thu, 24 Mar 2022 08:02:59 +0000 (09:02 +0100)
bacula/src/plugins/fd/pluginlib/pluginlib.cpp
bacula/src/plugins/fd/pluginlib/pluginlib.h
bacula/src/plugins/fd/pluginlib/pluginlib_test.cpp

index b1795610ffdab7bb5a80bff3f2ed6f6fbbe26918..599502bb9d3732267999b0d3a5c421f2dbb2562e 100644 (file)
@@ -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 &param)
+bool scan_parameter_str(const char * cmd, const char *prefix, POOL_MEM &param)
 {
    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;
       }
index 78e42a6b26866808018a68871b8b886be5ae557c..84ca5897b53a0c59da9b3f17634021f3a7721849 100644 (file)
@@ -160,6 +160,7 @@ bool parse_param(int &param, const char *pname, const char *name, char *value, b
 bool parse_param(POOL_MEM &param, 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 &param);
+bool scan_parameter_str(const char * cmd, const char *prefix, POOL_MEM &param);
+inline bool scan_parameter_str(const POOL_MEM &cmd, const char *prefix, POOL_MEM &param) { return scan_parameter_str(cmd.c_str(), prefix, param); }
 
 #endif   /* _PLUGINLIB_H_ */
\ No newline at end of file
index 58f1a359814d1cb08a79c28707e41d2679a25160..38eab18291308c51a34dd9963b869ba29059092d 100644 (file)
@@ -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();
 }