| Index: third_party/psutil/psutil/arch/osx/process_info.c
 | 
| diff --git a/third_party/psutil/psutil/arch/osx/process_info.c b/third_party/psutil/psutil/arch/osx/process_info.c
 | 
| deleted file mode 100644
 | 
| index ae7d4071459cae959ba0b9947305d8b3c72b6042..0000000000000000000000000000000000000000
 | 
| --- a/third_party/psutil/psutil/arch/osx/process_info.c
 | 
| +++ /dev/null
 | 
| @@ -1,254 +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_osx
 | 
| - * module methods.
 | 
| - */
 | 
| -
 | 
| -#include <Python.h>
 | 
| -#include <assert.h>
 | 
| -#include <errno.h>
 | 
| -#include <limits.h>  /* for INT_MAX */
 | 
| -#include <stdbool.h>
 | 
| -#include <stdlib.h>
 | 
| -#include <stdio.h>
 | 
| -#include <signal.h>
 | 
| -#include <sys/sysctl.h>
 | 
| -
 | 
| -#include "process_info.h"
 | 
| -#include "../../_psutil_common.h"
 | 
| -
 | 
| -
 | 
| -/*
 | 
| - * Return 1 if PID exists in the current process list, else 0.
 | 
| - */
 | 
| -int
 | 
| -pid_exists(long pid)
 | 
| -{
 | 
| -    int kill_ret;
 | 
| -
 | 
| -    // save some time if it's an invalid PID
 | 
| -    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;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -
 | 
| -/*
 | 
| - * 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(kinfo_proc **procList, size_t *procCount)
 | 
| -{
 | 
| -    /* Declaring mib as const requires use of a cast since the
 | 
| -     * sysctl prototype doesn't include the const modifier. */
 | 
| -    static const int mib3[3] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL };
 | 
| -    size_t           size, size2;
 | 
| -    void            *ptr;
 | 
| -    int              err, lim = 8;  /* some limit */
 | 
| -
 | 
| -    assert( procList != NULL);
 | 
| -    assert(*procList == NULL);
 | 
| -    assert(procCount != NULL);
 | 
| -
 | 
| -    *procCount = 0;
 | 
| -
 | 
| -    /* We start by calling sysctl with ptr == NULL and size == 0.
 | 
| -     * That will succeed, and set size to the appropriate length.
 | 
| -     * We then allocate a buffer of at least that size and call
 | 
| -     * sysctl with that buffer.  If that succeeds, we're done.
 | 
| -     * If that call fails with ENOMEM, we throw the buffer away
 | 
| -     * and try again.
 | 
| -     * Note that the loop calls sysctl with NULL again.  This is
 | 
| -     * is necessary because the ENOMEM failure case sets size to
 | 
| -     * the amount of data returned, not the amount of data that
 | 
| -     * could have been returned.
 | 
| -     */
 | 
| -    while (lim-- > 0) {
 | 
| -        size = 0;
 | 
| -        if (sysctl((int *)mib3, 3, NULL, &size, NULL, 0) == -1) {
 | 
| -            return errno;
 | 
| -        }
 | 
| -
 | 
| -        size2 = size + (size >> 3);  /* add some */
 | 
| -        if (size2 > size) {
 | 
| -            ptr = malloc(size2);
 | 
| -            if (ptr == NULL) {
 | 
| -                ptr = malloc(size);
 | 
| -            } else {
 | 
| -                size = size2;
 | 
| -            }
 | 
| -        }
 | 
| -        else {
 | 
| -            ptr = malloc(size);
 | 
| -        }
 | 
| -        if (ptr == NULL) {
 | 
| -            return ENOMEM;
 | 
| -        }
 | 
| -
 | 
| -        if (sysctl((int *)mib3, 3, ptr, &size, NULL, 0) == -1) {
 | 
| -            err = errno;
 | 
| -            free(ptr);
 | 
| -            if (err != ENOMEM) {
 | 
| -                return err;
 | 
| -            }
 | 
| -
 | 
| -        } else {
 | 
| -            *procList = (kinfo_proc *)ptr;
 | 
| -            *procCount = size / sizeof(kinfo_proc);
 | 
| -            return 0;
 | 
| -        }
 | 
| -    }
 | 
| -    return ENOMEM;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/* Read the maximum argument size for processes */
 | 
| -int
 | 
| -get_argmax()
 | 
| -{
 | 
| -    int argmax;
 | 
| -    int mib[] = { CTL_KERN, KERN_ARGMAX };
 | 
| -    size_t size = sizeof(argmax);
 | 
| -
 | 
| -    if (sysctl(mib, 2, &argmax, &size, NULL, 0) == 0) {
 | 
| -        return argmax;
 | 
| -    }
 | 
| -    return 0;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -/* return process args as a python list */
 | 
| -PyObject*
 | 
| -get_arg_list(long pid)
 | 
| -{
 | 
| -    int mib[3];
 | 
| -    int nargs;
 | 
| -    int len;
 | 
| -    char *procargs;
 | 
| -    char *arg_ptr;
 | 
| -    char *arg_end;
 | 
| -    char *curr_arg;
 | 
| -    size_t argmax;
 | 
| -    PyObject *arg = NULL;
 | 
| -    PyObject *arglist = NULL;
 | 
| -
 | 
| -    //special case for PID 0 (kernel_task) where cmdline cannot be fetched
 | 
| -    if (pid == 0) {
 | 
| -        return Py_BuildValue("[]");
 | 
| -    }
 | 
| -
 | 
| -    /* read argmax and allocate memory for argument space. */
 | 
| -    argmax = get_argmax();
 | 
| -    if (! argmax) { return PyErr_SetFromErrno(PyExc_OSError); }
 | 
| -
 | 
| -    procargs = (char *)malloc(argmax);
 | 
| -    if (NULL == procargs) {
 | 
| -        return PyErr_SetFromErrno(PyExc_OSError);
 | 
| -    }
 | 
| -
 | 
| -    /* read argument space */
 | 
| -    mib[0] = CTL_KERN;
 | 
| -    mib[1] = KERN_PROCARGS2;
 | 
| -    mib[2] = pid;
 | 
| -    if (sysctl(mib, 3, procargs, &argmax, NULL, 0) < 0) {
 | 
| -        if (EINVAL == errno) { // invalid == access denied OR nonexistent PID
 | 
| -            if ( pid_exists(pid) ) {
 | 
| -                AccessDenied();
 | 
| -            } else {
 | 
| -                NoSuchProcess();
 | 
| -            }
 | 
| -        }
 | 
| -        free(procargs);
 | 
| -        return NULL;
 | 
| -    }
 | 
| -
 | 
| -    arg_end = &procargs[argmax];
 | 
| -    /* copy the number of arguments to nargs */
 | 
| -    memcpy(&nargs, procargs, sizeof(nargs));
 | 
| -
 | 
| -    arg_ptr = procargs + sizeof(nargs);
 | 
| -    len = strlen(arg_ptr);
 | 
| -    arg_ptr += len + 1;
 | 
| -
 | 
| -    if (arg_ptr == arg_end) {
 | 
| -        free(procargs);
 | 
| -        return Py_BuildValue("[]");
 | 
| -    }
 | 
| -
 | 
| -    // skip ahead to the first argument
 | 
| -    for (; arg_ptr < arg_end; arg_ptr++) {
 | 
| -        if (*arg_ptr != '\0') {
 | 
| -            break;
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    /* iterate through arguments */
 | 
| -    curr_arg = arg_ptr;
 | 
| -    arglist = Py_BuildValue("[]");
 | 
| -    while (arg_ptr < arg_end && nargs > 0) {
 | 
| -        if (*arg_ptr++ == '\0') {
 | 
| -            arg = Py_BuildValue("s", curr_arg);
 | 
| -            if (NULL == arg) {
 | 
| -                return NULL;
 | 
| -            }
 | 
| -            PyList_Append(arglist, arg);
 | 
| -            Py_DECREF(arg);
 | 
| -            // iterate to next arg and decrement # of args
 | 
| -            curr_arg = arg_ptr;
 | 
| -            nargs--;
 | 
| -        }
 | 
| -    }
 | 
| -
 | 
| -    free(procargs);
 | 
| -    return arglist;
 | 
| -}
 | 
| -
 | 
| -
 | 
| -int
 | 
| -get_kinfo_proc(pid_t pid, struct kinfo_proc *kp)
 | 
| -{
 | 
| -    int mib[4];
 | 
| -    size_t len;
 | 
| -    mib[0] = CTL_KERN;
 | 
| -    mib[1] = KERN_PROC;
 | 
| -    mib[2] = KERN_PROC_PID;
 | 
| -    mib[3] = pid;
 | 
| -
 | 
| -    // fetch the info with sysctl()
 | 
| -    len = sizeof(struct kinfo_proc);
 | 
| -
 | 
| -    // now read the data from sysctl
 | 
| -    if (sysctl(mib, 4, kp, &len, NULL, 0) == -1) {
 | 
| -        // raise an exception and throw errno as the error
 | 
| -        PyErr_SetFromErrno(PyExc_OSError);
 | 
| -    }
 | 
| -
 | 
| -    /*
 | 
| -     * sysctl succeeds but len is zero, happens when process has gone away
 | 
| -     */
 | 
| -    if (len == 0) {
 | 
| -        NoSuchProcess();
 | 
| -        return -1;
 | 
| -    }
 | 
| -    return 0;
 | 
| -}
 | 
| 
 |