This patch makes adjustments to header file includes in lldbUtility based on recommendations by the iwyu tool (include-what-you-use). The goal here is to make sure that all files include the exact set of headers which are needed for that file only, to eliminate cases of dead includes (e.g. someone deleted some code but forgot to delete the header includes that that code necessitated), and to eliminate the case where header includes are picked up transitively. llvm-svn: 299676
74 lines
2.0 KiB
C++
74 lines
2.0 KiB
C++
//===-- UriParser.cpp -------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Utility/UriParser.h"
|
|
|
|
#include <string>
|
|
|
|
#include <stdint.h>
|
|
#include <tuple>
|
|
|
|
using namespace lldb_private;
|
|
|
|
//----------------------------------------------------------------------
|
|
// UriParser::Parse
|
|
//----------------------------------------------------------------------
|
|
bool UriParser::Parse(llvm::StringRef uri, llvm::StringRef &scheme,
|
|
llvm::StringRef &hostname, int &port,
|
|
llvm::StringRef &path) {
|
|
llvm::StringRef tmp_scheme, tmp_hostname, tmp_port, tmp_path;
|
|
|
|
const llvm::StringRef kSchemeSep("://");
|
|
auto pos = uri.find(kSchemeSep);
|
|
if (pos == std::string::npos)
|
|
return false;
|
|
|
|
// Extract path.
|
|
tmp_scheme = uri.substr(0, pos);
|
|
auto host_pos = pos + kSchemeSep.size();
|
|
auto path_pos = uri.find('/', host_pos);
|
|
if (path_pos != std::string::npos)
|
|
tmp_path = uri.substr(path_pos);
|
|
else
|
|
tmp_path = "/";
|
|
|
|
auto host_port = uri.substr(
|
|
host_pos,
|
|
((path_pos != std::string::npos) ? path_pos : uri.size()) - host_pos);
|
|
|
|
// Extract hostname
|
|
if (host_port[0] == '[') {
|
|
// hostname is enclosed with square brackets.
|
|
pos = host_port.find(']');
|
|
if (pos == std::string::npos)
|
|
return false;
|
|
|
|
tmp_hostname = host_port.substr(1, pos - 1);
|
|
host_port = host_port.drop_front(pos + 1);
|
|
if (!host_port.empty() && !host_port.consume_front(":"))
|
|
return false;
|
|
} else {
|
|
std::tie(tmp_hostname, host_port) = host_port.split(':');
|
|
}
|
|
|
|
// Extract port
|
|
if (!host_port.empty()) {
|
|
uint16_t port_value = 0;
|
|
if (host_port.getAsInteger(0, port_value))
|
|
return false;
|
|
port = port_value;
|
|
} else
|
|
port = -1;
|
|
|
|
scheme = tmp_scheme;
|
|
hostname = tmp_hostname;
|
|
path = tmp_path;
|
|
return true;
|
|
}
|