| // Copyright 2019 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 <stdlib.h> | 
 | #include <iostream> | 
 | #include <string> | 
 |  | 
 | namespace { | 
 |  | 
 | // Returns the current user username. | 
 | std::string Username() { | 
 |   const char* username = getenv("USER"); | 
 |   return username ? std::string(username) : std::string(); | 
 | } | 
 |  | 
 | // Writes |string| to |stream| while escaping all C escape sequences. | 
 | void EscapeString(std::ostream* stream, const std::string& string) { | 
 |   for (char c : string) { | 
 |     switch (c) { | 
 |       case 0: | 
 |         *stream << "\\0"; | 
 |         break; | 
 |       case '\a': | 
 |         *stream << "\\a"; | 
 |         break; | 
 |       case '\b': | 
 |         *stream << "\\b"; | 
 |         break; | 
 |       case '\e': | 
 |         *stream << "\\e"; | 
 |         break; | 
 |       case '\f': | 
 |         *stream << "\\f"; | 
 |         break; | 
 |       case '\n': | 
 |         *stream << "\\n"; | 
 |         break; | 
 |       case '\r': | 
 |         *stream << "\\r"; | 
 |         break; | 
 |       case '\t': | 
 |         *stream << "\\t"; | 
 |         break; | 
 |       case '\v': | 
 |         *stream << "\\v"; | 
 |         break; | 
 |       case '\\': | 
 |         *stream << "\\\\"; | 
 |         break; | 
 |       case '\"': | 
 |         *stream << "\\\""; | 
 |         break; | 
 |       default: | 
 |         *stream << c; | 
 |         break; | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace | 
 |  | 
 | int main(int argc, char** argv) { | 
 |   std::string username = Username(); | 
 |  | 
 |   std::cout << "{\"username\": \""; | 
 |   EscapeString(&std::cout, username); | 
 |   std::cout << "\"}" << std::endl; | 
 |  | 
 |   return 0; | 
 | } |