mirror of
https://github.com/systemd/systemd
synced 2024-09-16 06:43:18 +00:00
core/killall: use procfs_file_alloca
This commit is contained in:
parent
bdd29249a8
commit
31885cd5e3
|
@ -32,8 +32,7 @@
|
|||
#define TIMEOUT_USEC (10 * USEC_PER_SEC)
|
||||
|
||||
static bool ignore_proc(pid_t pid) {
|
||||
char buf[PATH_MAX];
|
||||
FILE *f;
|
||||
_cleanup_fclose_ FILE *f = NULL;
|
||||
char c;
|
||||
size_t count;
|
||||
uid_t uid;
|
||||
|
@ -51,15 +50,11 @@ static bool ignore_proc(pid_t pid) {
|
|||
if (uid != 0)
|
||||
return false;
|
||||
|
||||
snprintf(buf, sizeof(buf), "/proc/%lu/cmdline", (unsigned long) pid);
|
||||
char_array_0(buf);
|
||||
|
||||
f = fopen(buf, "re");
|
||||
f = fopen(procfs_file_alloca(pid, "cmdline"), "re");
|
||||
if (!f)
|
||||
return true; /* not really, but has the desired effect */
|
||||
|
||||
count = fread(&c, 1, 1, f);
|
||||
fclose(f);
|
||||
|
||||
/* Kernel threads have an empty cmdline */
|
||||
if (count <= 0)
|
||||
|
|
|
@ -80,15 +80,6 @@ char **saved_argv = NULL;
|
|||
static volatile unsigned cached_columns = 0;
|
||||
static volatile unsigned cached_lines = 0;
|
||||
|
||||
#define procfs_file_alloca(pid, field) \
|
||||
({ \
|
||||
pid_t _pid_ = (pid); \
|
||||
char *_r_; \
|
||||
_r_ = alloca(sizeof("/proc/") -1 + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
|
||||
sprintf(_r_, "/proc/%lu/" field, (unsigned long) _pid_); \
|
||||
_r_; \
|
||||
})
|
||||
|
||||
size_t page_size(void) {
|
||||
static __thread size_t pgsz = 0;
|
||||
long r;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <alloca.h>
|
||||
#include <inttypes.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
@ -696,3 +697,12 @@ int unlink_noerrno(const char *path);
|
|||
strcpy(stpcpy(_c_, _a_), _b_); \
|
||||
_c_; \
|
||||
})
|
||||
|
||||
#define procfs_file_alloca(pid, field) \
|
||||
({ \
|
||||
pid_t _pid_ = (pid); \
|
||||
char *_r_; \
|
||||
_r_ = alloca(sizeof("/proc/") -1 + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
|
||||
sprintf(_r_, "/proc/%lu/" field, (unsigned long) _pid_); \
|
||||
_r_; \
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue