Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lldb/include/lldb/Host/Host.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,8 @@ class Host {
const FileSpec &file_spec,
uint32_t line_no);

static llvm::Error OpenURL(llvm::StringRef url);

/// Check if we're running in an interactive graphical session.
///
/// \return
Expand Down
32 changes: 32 additions & 0 deletions lldb/source/Host/macosx/objcxx/Host.mm
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,38 @@ repeat with the_window in (get windows)\n\
#endif // TARGET_OS_OSX
}

llvm::Error Host::OpenURL(llvm::StringRef url) {
#if !TARGET_OS_OSX
return llvm::errorCodeToError(
std::error_code(ENOTSUP, std::system_category()));
#else // !TARGET_OS_OSX
if (url.empty())
return llvm::createStringError("Cannot open empty URL.");

LLDB_LOG(GetLog(LLDBLog::Host), "Opening URL: {0}", url);

CFCString url_cfstr(url.data(), kCFStringEncodingUTF8);
CFCReleaser<CFURLRef> cfurl = ::CFURLCreateWithString(
/*allocator=*/NULL,
/*URLString*/ url_cfstr.get(),
/*baseURL=*/NULL);

if (!cfurl.get())
return llvm::createStringError(
llvm::formatv("could not create CFURL from URL \"{0}\"", url));

OSStatus error = ::LSOpenCFURLRef(
/*inURL=*/cfurl.get(),
/*outLaunchedURL=*/NULL);

if (error != noErr)
return llvm::createStringError(
llvm::formatv("LSOpenCFURLRef failed: error {0:x}", error));

return llvm::Error::success();
#endif // TARGET_OS_OSX
}

bool Host::IsInteractiveGraphicSession() {
#if !TARGET_OS_OSX
return false;
Expand Down