]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: remove incorrect use of std::includes() 47583/head
authorIlya Dryomov <idryomov@gmail.com>
Fri, 12 Aug 2022 09:10:45 +0000 (11:10 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Sun, 14 Aug 2022 16:29:25 +0000 (18:29 +0200)
- std::includes() requires sorted ranges but command specs aren't
  sorted
- std::includes() purpose is to check whether the second range is
  a subsequence of the first range but here the size of the second
  range is always equal to the size of the first range, which means
  that, had the ranges been sorted, std::includes() would have checked
  straight equality

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 1483e2a20237ad65fa3188b910e4e19f3ace9030)

src/tools/rbd/Shell.cc

index 9a544080e50fb21c874216ebf8c950d19da3a04f..05052ff98dd8b395bb6651ab6efbf3bdbfa51eb2 100644 (file)
@@ -311,10 +311,9 @@ Shell::Action *Shell::find_action(const CommandSpec &command_spec,
 
   for (Action *action : actions) {
     if (action->command_spec.size() <= command_spec.size()) {
-      if (std::includes(action->command_spec.begin(),
-                        action->command_spec.end(),
-                        command_spec.begin(),
-                        command_spec.begin() + action->command_spec.size())) {
+      if (std::equal(action->command_spec.begin(),
+                     action->command_spec.end(),
+                     command_spec.begin())) {
         if (matching_spec != NULL) {
           *matching_spec = &action->command_spec;
         }
@@ -324,11 +323,9 @@ Shell::Action *Shell::find_action(const CommandSpec &command_spec,
     }
     if (!action->alias_command_spec.empty() &&
         action->alias_command_spec.size() <= command_spec.size()) {
-      if (std::includes(action->alias_command_spec.begin(),
-                        action->alias_command_spec.end(),
-                        command_spec.begin(),
-                        command_spec.begin() +
-                          action->alias_command_spec.size())) {
+      if (std::equal(action->alias_command_spec.begin(),
+                     action->alias_command_spec.end(),
+                     command_spec.begin())) {
         if (matching_spec != NULL) {
           *matching_spec = &action->alias_command_spec;
         }