// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "dbus/string_util.h"

#include "base/strings/string_util.h"

namespace dbus {

bool IsValidObjectPath(const std::string& value) {
  // This implementation is based upon D-Bus Specification Version 0.19.

  const bool kCaseSensitive = true;

  // A valid object path begins with '/'.
  if (!StartsWithASCII(value, "/", kCaseSensitive))
    return false;

  // Elements are pieces delimited by '/'. For instance, "org", "chromium",
  // "Foo" are elements of "/org/chromium/Foo".
  int element_length = 0;
  for (size_t i = 1; i < value.size(); ++i) {
    const char c = value[i];
    if (c == '/') {
      // No element may be the empty string.
      if (element_length == 0)
        return false;
      element_length = 0;
    } else {
      // Each element must only contain "[A-Z][a-z][0-9]_".
      const bool is_valid_character =
          ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') ||
          ('0' <= c && c <= '9') || c == '_';
      if (!is_valid_character)
        return false;
      element_length++;
    }
  }

  // A trailing '/' character is not allowed unless the path is the root path.
  if (value.size() > 1 && EndsWith(value, "/", kCaseSensitive))
    return false;

  return true;
}

}  // namespace dbus
