tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

usage.cc (2356B)


      1 //
      2 // Copyright 2019 The Abseil Authors.
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      https://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 #include "absl/flags/usage.h"
     16 
     17 #include <stdlib.h>
     18 
     19 #include <string>
     20 
     21 #include "absl/base/attributes.h"
     22 #include "absl/base/config.h"
     23 #include "absl/base/const_init.h"
     24 #include "absl/base/internal/raw_logging.h"
     25 #include "absl/base/thread_annotations.h"
     26 #include "absl/flags/internal/usage.h"
     27 #include "absl/strings/string_view.h"
     28 #include "absl/synchronization/mutex.h"
     29 
     30 namespace absl {
     31 ABSL_NAMESPACE_BEGIN
     32 namespace flags_internal {
     33 namespace {
     34 ABSL_CONST_INIT absl::Mutex usage_message_guard(absl::kConstInit);
     35 ABSL_CONST_INIT std::string* program_usage_message
     36    ABSL_GUARDED_BY(usage_message_guard) = nullptr;
     37 }  // namespace
     38 }  // namespace flags_internal
     39 
     40 // --------------------------------------------------------------------
     41 // Sets the "usage" message to be used by help reporting routines.
     42 void SetProgramUsageMessage(absl::string_view new_usage_message) {
     43  absl::MutexLock l(&flags_internal::usage_message_guard);
     44 
     45  if (flags_internal::program_usage_message != nullptr) {
     46    ABSL_INTERNAL_LOG(FATAL, "SetProgramUsageMessage() called twice.");
     47    std::exit(1);
     48  }
     49 
     50  flags_internal::program_usage_message = new std::string(new_usage_message);
     51 }
     52 
     53 // --------------------------------------------------------------------
     54 // Returns the usage message set by SetProgramUsageMessage().
     55 // Note: We able to return string_view here only because calling
     56 // SetProgramUsageMessage twice is prohibited.
     57 absl::string_view ProgramUsageMessage() {
     58  absl::MutexLock l(&flags_internal::usage_message_guard);
     59 
     60  return flags_internal::program_usage_message != nullptr
     61             ? absl::string_view(*flags_internal::program_usage_message)
     62             : "Warning: SetProgramUsageMessage() never called";
     63 }
     64 
     65 ABSL_NAMESPACE_END
     66 }  // namespace absl