Index: third_party/psutil/psutil/arch/bsd/process_info.c |
diff --git a/third_party/psutil/psutil/arch/bsd/process_info.c b/third_party/psutil/psutil/arch/bsd/process_info.c |
deleted file mode 100644 |
index d3006461db7226da8f19425529d3919dcfe9ba3b..0000000000000000000000000000000000000000 |
--- a/third_party/psutil/psutil/arch/bsd/process_info.c |
+++ /dev/null |
@@ -1,270 +0,0 @@ |
-/* |
- * $Id: process_info.c 1142 2011-10-05 18:45:49Z g.rodola $ |
- * |
- * Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved. |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- * |
- * Helper functions related to fetching process information. Used by _psutil_bsd |
- * module methods. |
- */ |
- |
-#include <Python.h> |
-#include <assert.h> |
-#include <errno.h> |
-#include <stdlib.h> |
-#include <stdio.h> |
-#include <string.h> |
-#include <sys/types.h> |
-#include <sys/sysctl.h> |
-#include <sys/param.h> |
-#include <sys/user.h> |
-#include <sys/proc.h> |
- |
-#include "process_info.h" |
- |
- |
-/* |
- * Returns a list of all BSD processes on the system. This routine |
- * allocates the list and puts it in *procList and a count of the |
- * number of entries in *procCount. You are responsible for freeing |
- * this list (use "free" from System framework). |
- * On success, the function returns 0. |
- * On error, the function returns a BSD errno value. |
- */ |
-int |
-get_proc_list(struct kinfo_proc **procList, size_t *procCount) |
-{ |
- int err; |
- struct kinfo_proc * result; |
- int done; |
- static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_PROC, 0 }; |
- // Declaring name as const requires us to cast it when passing it to |
- // sysctl because the prototype doesn't include the const modifier. |
- size_t length; |
- |
- assert( procList != NULL); |
- assert(*procList == NULL); |
- assert(procCount != NULL); |
- |
- *procCount = 0; |
- |
- /* |
- * We start by calling sysctl with result == NULL and length == 0. |
- * That will succeed, and set length to the appropriate length. |
- * We then allocate a buffer of that size and call sysctl again |
- * with that buffer. If that succeeds, we're done. If that fails |
- * with ENOMEM, we have to throw away our buffer and loop. Note |
- * that the loop causes use to call sysctl with NULL again; this |
- * is necessary because the ENOMEM failure case sets length to |
- * the amount of data returned, not the amount of data that |
- * could have been returned. |
- */ |
- result = NULL; |
- done = 0; |
- do { |
- assert(result == NULL); |
- // Call sysctl with a NULL buffer. |
- length = 0; |
- err = sysctl((int *)name, (sizeof(name) / sizeof(*name)) - 1, |
- NULL, &length, NULL, 0); |
- if (err == -1) |
- err = errno; |
- |
- // Allocate an appropriately sized buffer based on the results |
- // from the previous call. |
- if (err == 0) { |
- result = malloc(length); |
- if (result == NULL) |
- err = ENOMEM; |
- } |
- |
- // Call sysctl again with the new buffer. If we get an ENOMEM |
- // error, toss away our buffer and start again. |
- if (err == 0) { |
- err = sysctl((int *) name, (sizeof(name) / sizeof(*name)) - 1, |
- result, &length, NULL, 0); |
- if (err == -1) |
- err = errno; |
- if (err == 0) { |
- done = 1; |
- } |
- else if (err == ENOMEM) { |
- assert(result != NULL); |
- free(result); |
- result = NULL; |
- err = 0; |
- } |
- } |
- } while (err == 0 && ! done); |
- |
- // Clean up and establish post conditions. |
- if (err != 0 && result != NULL) { |
- free(result); |
- result = NULL; |
- } |
- |
- *procList = result; |
- *procCount = length / sizeof(struct kinfo_proc); |
- |
- assert((err == 0) == (*procList != NULL)); |
- return err; |
-} |
- |
- |
-char |
-*getcmdpath(long pid, size_t *pathsize) |
-{ |
- int mib[4]; |
- char *path; |
- size_t size = 0; |
- |
- /* |
- * Make a sysctl() call to get the raw argument space of the process. |
- */ |
- mib[0] = CTL_KERN; |
- mib[1] = KERN_PROC; |
- mib[2] = KERN_PROC_PATHNAME; |
- mib[3] = pid; |
- |
- // call with a null buffer first to determine if we need a buffer |
- if (sysctl(mib, 4, NULL, &size, NULL, 0) == -1) { |
- return NULL; |
- } |
- |
- path = malloc(size); |
- if (path == NULL) |
- return NULL; |
- |
- *pathsize = size; |
- if (sysctl(mib, 4, path, &size, NULL, 0) == -1) { |
- free(path); |
- return NULL; /* Insufficient privileges */ |
- } |
- |
- return path; |
-} |
- |
- |
- |
-/* |
- * Borrowed from psi Python System Information project |
- * |
- * Get command arguments and environment variables. |
- * |
- * Based on code from ps. |
- * |
- * Returns: |
- * 0 for success; |
- * -1 for failure (Exception raised); |
- * 1 for insufficient privileges. |
- */ |
-char |
-*getcmdargs(long pid, size_t *argsize) |
-{ |
- int mib[4]; |
- size_t size, argmax; |
- char *procargs = NULL; |
- |
- /* Get the maximum process arguments size. */ |
- mib[0] = CTL_KERN; |
- mib[1] = KERN_ARGMAX; |
- |
- size = sizeof(argmax); |
- if (sysctl(mib, 2, &argmax, &size, NULL, 0) == -1) |
- return NULL; |
- |
- /* Allocate space for the arguments. */ |
- procargs = (char *)malloc(argmax); |
- if (procargs == NULL) |
- return NULL; |
- |
- /* |
- * Make a sysctl() call to get the raw argument space of the process. |
- */ |
- mib[0] = CTL_KERN; |
- mib[1] = KERN_PROC; |
- mib[2] = KERN_PROC_ARGS; |
- mib[3] = pid; |
- |
- size = argmax; |
- if (sysctl(mib, 4, procargs, &size, NULL, 0) == -1) { |
- free(procargs); |
- return NULL; /* Insufficient privileges */ |
- } |
- |
- // return string and set the length of arguments |
- *argsize = size; |
- return procargs; |
-} |
- |
- |
-/* returns the command line as a python list object */ |
-PyObject* |
-get_arg_list(long pid) |
-{ |
- char *argstr = NULL; |
- int pos = 0; |
- size_t argsize = 0; |
- PyObject *retlist = Py_BuildValue("[]"); |
- PyObject *item = NULL; |
- |
- if (pid < 0) { |
- return retlist; |
- } |
- |
- // XXX - this leaks memory (grrr) |
- argstr = getcmdargs(pid, &argsize); |
- |
- if (NULL == argstr) { |
- if (ESRCH == errno) { |
- PyErr_Format(PyExc_RuntimeError, |
- "getcmdargs() failed - no process found with pid %lu", pid); |
- return NULL; |
- } |
- |
- // ignore other errors for now, since we don't want to bail on |
- // get_process_info() if cmdline is the only thing we couldn't get. |
- // In that case, we just return an empty list return |
- // PyErr_Format(PyExc_RuntimeError, "getcmdargs() failed for pid %lu", pid); |
- return retlist; |
- } |
- |
- // args are returned as a flattened string with \0 separators between |
- // arguments add each string to the list then step forward to the next |
- // separator |
- if (argsize > 0) { |
- while(pos < argsize) { |
- item = Py_BuildValue("s", &argstr[pos]); |
- PyList_Append(retlist, item); |
- Py_DECREF(item); |
- pos = pos + strlen(&argstr[pos]) + 1; |
- } |
- } |
- |
- free(argstr); |
- return retlist; |
-} |
- |
- |
-/* |
- * Return 1 if PID exists in the current process list, else 0. |
- */ |
-int |
-pid_exists(long pid) |
-{ |
- int kill_ret; |
- if (pid < 0) { |
- return 0; |
- } |
- |
- // if kill returns success of permission denied we know it's a valid PID |
- kill_ret = kill(pid , 0); |
- if ((0 == kill_ret) || (EPERM == errno)) { |
- return 1; |
- } |
- |
- // otherwise return 0 for PID not found |
- return 0; |
-} |
- |