]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
pluginlib: Add scan_parameter_str to replace some sscanf.
authorRadosław Korzeniewski <radoslaw@korzeniewski.net>
Mon, 23 Nov 2020 17:34:33 +0000 (18:34 +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 0982b19e8560bd2d54876d29971871c2f9dea89d..b1795610ffdab7bb5a80bff3f2ed6f6fbbe26918 100644 (file)
@@ -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 &param)
+{
+   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;
+}
index 16cc3203cb04fdc089045f36b102b4e25c24c583..78e42a6b26866808018a68871b8b886be5ae557c 100644 (file)
@@ -160,4 +160,6 @@ 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);
+
 #endif   /* _PLUGINLIB_H_ */
\ No newline at end of file
index 3b870aaf6e809febf2ac02b64e15037af8df1257..58f1a359814d1cb08a79c28707e41d2679a25160 100644 (file)
@@ -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();
 }