X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Ffind_pid_by_name.c;h=05f7f968f872cfb443166ea9a03bd7d8e3f49123;hb=35fb51272863c8723a40e59d2024c7f4c9ec8946;hp=b8490b7246473e4b6d1d3411d980a96d392d7365;hpb=9e48045e45df7e3e205575a4eb3dc39d634b05aa;p=oweals%2Fbusybox.git diff --git a/libbb/find_pid_by_name.c b/libbb/find_pid_by_name.c index b8490b724..05f7f968f 100644 --- a/libbb/find_pid_by_name.c +++ b/libbb/find_pid_by_name.c @@ -2,65 +2,54 @@ /* * Utility routines. * - * Copyright (C) 1999,2000,2001 by Erik Andersen + * Copyright (C) 1999-2004 by Erik Andersen * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ -#include -#include -#include -#include #include "libbb.h" /* find_pid_by_name() - * + * * Modified by Vladimir Oleynik for use with libbb/procps.c * This finds the pid of the specified process. - * Currently, it's implemented by rummaging through + * Currently, it's implemented by rummaging through * the proc filesystem. * * Returns a list of all matching PIDs + * It is the caller's duty to free the returned pidlist. */ -extern long* find_pid_by_name( const char* pidName) +pid_t* find_pid_by_name(const char* procName) { - long* pidList; - int i=0; - procps_status_t * p; + pid_t* pidList; + int i = 0; + procps_status_t* p; - pidList = xmalloc(sizeof(long)); -#ifdef CONFIG_SELINUX - while ((p = procps_scan(0, 0, NULL)) != 0) { -#else + pidList = xmalloc(sizeof(*pidList)); while ((p = procps_scan(0)) != 0) { -#endif - if (strcmp(p->short_cmd, pidName) == 0) { - pidList=xrealloc( pidList, sizeof(long) * (i+2)); - pidList[i++]=p->pid; + if (strncmp(p->short_cmd, procName, COMM_LEN-1) == 0) { + pidList = xrealloc(pidList, sizeof(*pidList) * (i+2)); + pidList[i++] = p->pid; } } - pidList[i] = i==0 ? -1 : 0; + pidList[i] = 0; return pidList; } -/* END CODE */ -/* -Local Variables: -c-file-style: "linux" -c-basic-offset: 4 -tab-width: 4 -End: -*/ +pid_t *pidlist_reverse(pid_t *pidList) +{ + int i = 0; + while (pidList[i]) + i++; + if (--i >= 0) { + pid_t k; + int j; + for (j = 0; i > j; i--, j++) { + k = pidList[i]; + pidList[i] = pidList[j]; + pidList[j] = k; + } + } + return pidList; +}