xref: /openbsd-src/gnu/llvm/clang/lib/Basic/MakeSupport.cpp (revision 12c855180aad702bbcca06e0398d774beeafb155)
1*12c85518Srobert //===-- MakeSuport.cpp --------------------------------------------------*-===//
2*12c85518Srobert //
3*12c85518Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*12c85518Srobert // See https://llvm.org/LICENSE.txt for license information.
5*12c85518Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*12c85518Srobert //
7*12c85518Srobert //===----------------------------------------------------------------------===//
8*12c85518Srobert 
9*12c85518Srobert #include "clang/Basic/MakeSupport.h"
10*12c85518Srobert 
quoteMakeTarget(StringRef Target,SmallVectorImpl<char> & Res)11*12c85518Srobert void clang::quoteMakeTarget(StringRef Target, SmallVectorImpl<char> &Res) {
12*12c85518Srobert   for (unsigned i = 0, e = Target.size(); i != e; ++i) {
13*12c85518Srobert     switch (Target[i]) {
14*12c85518Srobert     case ' ':
15*12c85518Srobert     case '\t':
16*12c85518Srobert       // Escape the preceding backslashes
17*12c85518Srobert       for (int j = i - 1; j >= 0 && Target[j] == '\\'; --j)
18*12c85518Srobert         Res.push_back('\\');
19*12c85518Srobert 
20*12c85518Srobert       // Escape the space/tab
21*12c85518Srobert       Res.push_back('\\');
22*12c85518Srobert       break;
23*12c85518Srobert     case '$':
24*12c85518Srobert       Res.push_back('$');
25*12c85518Srobert       break;
26*12c85518Srobert     case '#':
27*12c85518Srobert       Res.push_back('\\');
28*12c85518Srobert       break;
29*12c85518Srobert     default:
30*12c85518Srobert       break;
31*12c85518Srobert     }
32*12c85518Srobert 
33*12c85518Srobert     Res.push_back(Target[i]);
34*12c85518Srobert   }
35*12c85518Srobert }
36