diff options
Diffstat (limited to 'remoting/host/username.cc')
-rw-r--r-- | remoting/host/username.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/remoting/host/username.cc b/remoting/host/username.cc new file mode 100644 index 0000000..e737425 --- /dev/null +++ b/remoting/host/username.cc @@ -0,0 +1,36 @@ +// Copyright 2013 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 "remoting/host/username.h" + +#include <vector> + +#include "base/logging.h" + +#if defined(OS_POSIX) +#include <pwd.h> +#include <sys/types.h> +#include <unistd.h> +#endif // defined(OS_POSIX) + +namespace remoting { + +std::string GetUsername() { +#if defined(OS_POSIX) + long buf_size = sysconf(_SC_GETPW_R_SIZE_MAX); + if (buf_size <= 0) + return std::string(); + + std::vector<char> buf(buf_size); + struct passwd passwd; + struct passwd* passwd_result = NULL; + getpwuid_r(getuid(), &passwd, &(buf[0]), buf_size, &passwd_result); + return passwd_result ? passwd_result->pw_name : std::string(); +#else // !defined(OS_POSIX) + NOTIMPLEMENTED(); + return std::string(); +#endif // defined(OS_POSIX) +} + +} // namespace remoting |