// Copyright 2015 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 <stdint.h>

#include "base/logging.h"
#include "base/process/process_handle.h"
#include "build/build_config.h"

namespace base {

namespace {
bool g_have_unique_id = false;
uint32_t g_unique_id;

// The process which set |g_unique_id|.
ProcessId g_procid;

// Mangle IDs so that they are not accidentally used as PIDs, e.g. as an
// argument to kill or waitpid.
uint32_t MangleProcessId(ProcessId process_id) {
  // Add a large power of 10 so that the pid is still the pid is still readable
  // inside the mangled id.
  return static_cast<uint32_t>(process_id) + 1000000000U;
}

}  // namespace

uint32_t GetUniqueIdForProcess() {
  if (!g_have_unique_id) {
    return MangleProcessId(GetCurrentProcId());
  }

  // Make sure we are the same process that set |g_procid|. This check may have
  // false negatives (if a process ID was reused) but should have no false
  // positives.
  DCHECK_EQ(GetCurrentProcId(), g_procid);
  return g_unique_id;
}

#if defined(OS_LINUX)

void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
  g_unique_id = MangleProcessId(pid_outside_of_namespace);
  g_procid = GetCurrentProcId();
  g_have_unique_id = true;
}

#endif

}  // namespace base
