From 23c5a3fbecee2d64689fdc4e560d5bd797554c60 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Tue, 22 Oct 2013 17:56:55 +0000 Subject: [PATCH] [PECOFF] /manifestuac option is case insensitive. llvm-svn: 193173 --- lld/lib/Driver/WinLinkDriver.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lld/lib/Driver/WinLinkDriver.cpp b/lld/lib/Driver/WinLinkDriver.cpp index 74f730c6739e..637e6f40eea5 100644 --- a/lld/lib/Driver/WinLinkDriver.cpp +++ b/lld/lib/Driver/WinLinkDriver.cpp @@ -161,6 +161,13 @@ bool parseManifest(StringRef option, bool &enable, bool &embed, int &id) { return true; } +// Returns true if \p str starts with \p prefix, ignoring case. +bool startswith_lower(StringRef str, StringRef prefix) { + if (str.size() < prefix.size()) + return false; + return str.substr(0, prefix.size()).equals_lower(prefix); +} + // Parse /manifestuac:(level=|uiAccess=). // // The arguments will be embedded to the manifest XML file with no error check, @@ -172,15 +179,15 @@ bool parseManifestUac(StringRef option, llvm::Optional &level, option = option.ltrim(); if (option.empty()) return true; - if (option.startswith("level=")) { + if (startswith_lower(option, "level=")) { option = option.substr(strlen("level=")); StringRef value; llvm::tie(value, option) = option.split(" "); level = value.str(); continue; } - if (option.startswith("uiAccess=")) { - option = option.substr(strlen("uiAccess=")); + if (startswith_lower(option, "uiaccess=")) { + option = option.substr(strlen("uiaccess=")); StringRef value; llvm::tie(value, option) = option.split(" "); uiAccess = value.str();