199ca880aSopenharmony_ci#pragma once 299ca880aSopenharmony_ci 399ca880aSopenharmony_ci/*** 499ca880aSopenharmony_ci This file is part of systemd. 599ca880aSopenharmony_ci 699ca880aSopenharmony_ci Copyright 2010 Lennart Poettering 799ca880aSopenharmony_ci 899ca880aSopenharmony_ci systemd is free software; you can redistribute it and/or modify it 999ca880aSopenharmony_ci under the terms of the GNU Lesser General Public License as published by 1099ca880aSopenharmony_ci the Free Software Foundation; either version 2.1 of the License, or 1199ca880aSopenharmony_ci (at your option) any later version. 1299ca880aSopenharmony_ci 1399ca880aSopenharmony_ci systemd is distributed in the hope that it will be useful, but 1499ca880aSopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 1599ca880aSopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1699ca880aSopenharmony_ci Lesser General Public License for more details. 1799ca880aSopenharmony_ci 1899ca880aSopenharmony_ci You should have received a copy of the GNU Lesser General Public License 1999ca880aSopenharmony_ci along with systemd; If not, see <http://www.gnu.org/licenses/>. 2099ca880aSopenharmony_ci***/ 2199ca880aSopenharmony_ci 2299ca880aSopenharmony_ci#include <stdbool.h> 2399ca880aSopenharmony_ci#include <sys/types.h> 2499ca880aSopenharmony_ci#include <alloca.h> 2599ca880aSopenharmony_ci#include <stdio.h> 2699ca880aSopenharmony_ci#include <string.h> 2799ca880aSopenharmony_ci#include <signal.h> 2899ca880aSopenharmony_ci 2999ca880aSopenharmony_ci#include "formats-util.h" 3099ca880aSopenharmony_ci 3199ca880aSopenharmony_ci#define procfs_file_alloca(pid, field) \ 3299ca880aSopenharmony_ci ({ \ 3399ca880aSopenharmony_ci pid_t _pid_ = (pid); \ 3499ca880aSopenharmony_ci const char *_r_; \ 3599ca880aSopenharmony_ci if (_pid_ == 0) { \ 3699ca880aSopenharmony_ci _r_ = ("/proc/self/" field); \ 3799ca880aSopenharmony_ci } else { \ 3899ca880aSopenharmony_ci _r_ = alloca(strlen("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \ 3999ca880aSopenharmony_ci sprintf((char*) _r_, "/proc/"PID_FMT"/" field, _pid_); \ 4099ca880aSopenharmony_ci } \ 4199ca880aSopenharmony_ci _r_; \ 4299ca880aSopenharmony_ci }) 4399ca880aSopenharmony_ci 4499ca880aSopenharmony_ciint get_process_comm(pid_t pid, char **name); 4599ca880aSopenharmony_ciint get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line); 4699ca880aSopenharmony_ciint get_process_environ(pid_t pid, char **environ); 47