• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef BASE_LINUX_UTIL_H_
6 #define BASE_LINUX_UTIL_H_
7 #pragma once
8 
9 #include <stdint.h>
10 #include <sys/types.h>
11 
12 #include <string>
13 
14 namespace base {
15 
16 static const char kFindInodeSwitch[] = "--find-inode";
17 
18 // This is declared here so the crash reporter can access the memory directly
19 // in compromised context without going through the standard library.
20 extern char g_linux_distro[];
21 
22 // Get the Linux Distro if we can, or return "Unknown".
23 std::string GetLinuxDistro();
24 
25 // Set the Linux Distro string.
26 void SetLinuxDistro(const std::string& distro);
27 
28 // Return the inode number for the UNIX domain socket |fd|.
29 bool FileDescriptorGetInode(ino_t* inode_out, int fd);
30 
31 // Find the process which holds the given socket, named by inode number. If
32 // multiple processes hold the socket, this function returns false.
33 bool FindProcessHoldingSocket(pid_t* pid_out, ino_t socket_inode);
34 
35 // For a given process |pid|, look through all its threads and find the first
36 // thread with /proc/[pid]/task/[thread_id]/syscall whose first N bytes matches
37 // |expected_data|, where N is the length of |expected_data|.
38 // Returns the thread id or -1 on error.
39 pid_t FindThreadIDWithSyscall(pid_t pid, const std::string& expected_data);
40 
41 }  // namespace base
42 
43 #endif  // BASE_LINUX_UTIL_H_
44