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