summaryrefslogtreecommitdiff
path: root/src/procenv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/procenv.h')
-rw-r--r--src/procenv.h915
1 files changed, 109 insertions, 806 deletions
diff --git a/src/procenv.h b/src/procenv.h
index 501fa08..4d3f905 100644
--- a/src/procenv.h
+++ b/src/procenv.h
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------
- * Copyright © 2012-2015 James Hunt <jamesodhunt@ubuntu.com>.
+ * Copyright © 2012-2016 James Hunt <jamesodhunt@ubuntu.com>.
*
* 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
@@ -50,6 +50,10 @@
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
+
+/* XXX: must come before sched.h on Minix! */
+#include <pthread.h>
+
#include <sched.h>
#include <termios.h>
#include <getopt.h>
@@ -59,38 +63,52 @@
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
-#include <link.h>
#include <fenv.h>
#include <sys/utsname.h>
#include <locale.h>
-#include <pthread.h>
-#include <netdb.h>
#include <sys/socket.h>
+#include <netdb.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/msg.h>
+#include <sys/param.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include "util.h"
+#include "string-util.h"
+#include "pr_list.h"
+#include "output.h"
+#include "platform.h"
-#include <pr_list.h>
+#include "platform-headers.h"
+
+/*********************************************************************/
+// FIXME: ANDROID - need to auto-generate values!!
+
+#if defined PROCENV_PLATFORM_ANDROID
-/* FIXME: Android testing */
-#if 1
#ifndef PACKAGE_NAME
#define PACKAGE_NAME "procenv"
#endif
-/* FIXME: ugh */
#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "0.28"
+#define PACKAGE_VERSION "0.24"
#endif
#ifndef PACKAGE_STRING
#define PACKAGE_STRING PACKAGE_NAME
#endif
-#endif /* FIXME */
+/* major(3) / minor(3) */
+#include <sys/sysmacros.h>
+
+#endif /* PROCENV_PLATFORM_ANDROID */
+
+/*********************************************************************/
/**
* PROCENV_FORMAT_VERSION:
@@ -133,422 +151,52 @@
* - Added --namespaces.
* VERSION 12:
* - Change format of --namespaces output.
+ * VERSION 13:
+ * - Added I/O priority to --cpu.
+ * VERSION 14:
+ * - Added driver to --meta.
+ * VERION 15:
+ * - Renamed "linux security module" to "security" module in --misc.
+ * - Added procenv driver details to --meta.
+ * VERSION 16:
+ * - Sort feature-test macros.
+ * VERSION 17:
+ * - Added 'vm' to --misc output.
**/
-#define PROCENV_FORMAT_VERSION 12
-
-#define PROCENV_DEFAULT_TEXT_SEPARATOR ": "
-
-#define PROCENV_DEFAULT_CRUMB_SEPARATOR ":"
-
-#if defined (__FreeBSD__) \
- || defined (__NetBSD__) \
- || defined (__OpenBSD__)
-#define PROCENV_BSD
-#endif
-
-#ifdef __linux__
-#define PROCENV_LINUX
-#endif
-
-#if defined (PROCENV_LINUX) && defined (__BIONIC__)
-#define PROCENV_ANDROID
-#endif
-
-#if defined (__FreeBSD_kernel__) && defined (__GNUC__)
-/* Debian kFreeBSD (GNU userland + BSD kernel) */
-#define PROCENV_GNU_BSD
-#endif
-
-#ifdef __GNU__
-#define PROCENV_HURD
-#endif
-
-#if defined (__i386__) || defined (__x86_64__)
-#define PROCENV_ARCH_X86
-#endif
-
-#if defined PROCENV_ANDROID
-#ifndef PACKAGE_NAME
-#define PACKAGE_NAME "procenv"
-#endif
-
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "0.24"
-#endif
-
-#ifndef PACKAGE_STRING
-#define PACKAGE_STRING PACKAGE_NAME
-#endif
-
-/* major(3) / minor(3) */
-#include <sys/sysmacros.h>
-#endif
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_HURD)
-#include <mntent.h>
-#include <sys/vfs.h>
-#include <sys/statvfs.h>
-#endif
-
-#if defined (PROCENV_LINUX)
-#include <linux/if.h>
-
-#include <sys/inotify.h>
-#include <sys/prctl.h>
-#include <sys/personality.h>
-
-#include <linux/prctl.h>
-#include <linux/version.h>
-
-#if defined (HAVE_NUMA_H)
-
-#include <numa.h>
-#include <numaif.h>
-
-#if LIBNUMA_API_VERSION == 2
-#define PROCENV_NUMA_BITMASK_ISSET(mask, node) numa_bitmask_isbitset ((mask), (node))
-#else
-#define PROCENV_NUMA_BITMASK_ISSET(mask, node) nodemask_isset (&(mask), (node))
-int procenv_getcpu (void);
-#endif
-#endif /* HAVE_NUMA_H */
-
-#if ! defined(HAVE_SCHED_GETCPU)
-size_t split_fields (const char *string, char delimiter, int compress, char ***array);
-#endif
-
-/* Lucid provides prctl.h, but not securebits.h */
-#if defined (PR_GET_SECUREBITS) && defined (HAVE_LINUX_SECUREBITS_H)
-#include <linux/securebits.h>
-#endif
-
-#include <linux/capability.h>
-#include <linux/vt.h>
-
-#if defined (HAVE_SYS_APPARMOR_H)
-#include <sys/apparmor.h>
-#endif
+#define PROCENV_FORMAT_VERSION 17
-#if defined (HAVE_SELINUX_SELINUX_H)
-#include <selinux/selinux.h>
-#endif
-
-/**
- * show_capability:
- * @caps: cap_t,
- * @cap: capability.
- *
- * Display specified capability, or NOT_DEFINED_STR if value is
- * unknown.
- **/
-#ifdef PR_CAPBSET_READ
-#define show_capability(caps, cap) \
- _show_capability (caps, cap, #cap)
-#define _show_capability(caps, cap, name) \
-{ \
- int bound; \
- int effective; \
- int inheritable; \
- int permitted; \
- \
- bound = cap_get_bound (cap); \
- \
- effective = get_capability_by_flag_type (caps, CAP_EFFECTIVE, cap); \
- inheritable = get_capability_by_flag_type (caps, CAP_INHERITABLE, cap); \
- permitted = get_capability_by_flag_type (caps, CAP_PERMITTED, cap); \
- \
- section_open (name); \
- \
- entry ("number", "%d", cap); \
- \
- entry ("supported", "%s", \
- CAP_IS_SUPPORTED (cap) \
- ? YES_STR : NO_STR); \
- \
- entry ("in bounding set", "%s", \
- bound < 0 \
- ? UNKNOWN_STR \
- : bound \
- ? YES_STR \
- : NO_STR); \
- \
- entry ("effective", "%s", \
- effective < 0 \
- ? NOT_DEFINED_STR \
- : effective == CAP_SET \
- ? YES_STR \
- : NO_STR); \
- \
- entry ("inheritable", "%s", \
- inheritable < 0 \
- ? NOT_DEFINED_STR \
- : inheritable == CAP_SET \
- ? YES_STR \
- : NO_STR); \
- \
- entry ("permitted", "%s", \
- permitted < 0 \
- ? NOT_DEFINED_STR \
- : permitted == CAP_SET \
- ? YES_STR \
- : NO_STR); \
- \
- section_close (); \
-}
-#else
-#define show_capability(caps, cap)
-#endif
-
-/**
- * LINUX_KERNEL_M:
- * @major: Linux major kernel version number.
- *
- * Returns: TRUE if running Linux kernel is atleast at version
- * specified by @major else FALSE.
- **/
-#define LINUX_KERNEL_M(major) \
- (linux_kernel_version (major, -1, -1))
-
-/**
- * LINUX_KERNEL_MM:
- * @major: Linux major kernel version number,
- * @minor: Linux minor kernel version number.
- *
- * Returns: TRUE if running Linux kernel is atleast at version
- * specified by (@major, @minor) else FALSE.
- **/
-#define LINUX_KERNEL_MM(major, minor) \
- (linux_kernel_version (major, minor, -1))
-
-/**
- * LINUX_KERNEL_MMR:
- * @major: Linux major kernel version number,
- * @minor: Linux minor kernel version number,
- * @revision: kernel revision version.
- *
- * Returns: TRUE if running Linux kernel is atleast at version
- * specified by (@major, @minor, @revision) else FALSE.
- **/
-#define LINUX_KERNEL_MMR(major, minor, revision) \
- (linux_kernel_version (major, minor, revision))
-
-#endif
-
-#include <sys/ioctl.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
-#include <kvm.h>
-#include <sys/sysctl.h>
-#include <sys/user.h>
-#include <sys/ucred.h>
-#include <net/if.h>
-#include <net/if_dl.h>
-#include <netinet/in.h>
-#include <sys/consio.h>
-#endif
-
-#if defined (PROCENV_HURD)
-#include <net/if.h>
-#endif
-
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
-#include <sys/mount.h>
-#endif
-
-#if defined (PROCENV_BSD)
-#define PROCENV_CPU_SET_TYPE cpuset_t
-#include <pthread_np.h>
-
-#if defined (HAVE_SYS_CAPABILITY_H)
-#include <sys/capability.h>
-
-#if defined (PROCENV_BSD) && __FreeBSD__ == 9
-/* FreeBSD 9 introduced optional capabilities. FreeBSD enabled them by
- * default, changing some of the system calls in the process, so handle
- * the name changes.
- */
-#define cap_rights_get(fd, rightsp) cap_getrights (fd, (rightsp))
-#define cap_rights_is_set(rightsp, cap) ((*rightsp) & (cap))
-#endif /* PROCENV_BSD && __FreeBSD__ == 9 */
-
-#define show_capsicum_cap(rights, cap) \
- entry (#cap, "%s", cap_rights_is_set ((&rights), cap) ? YES_STR : NO_STR)
-#endif /* HAVE_SYS_CAPABILITY_H */
-
-#elif defined (PROCENV_LINUX) || defined (PROCENV_GNU_BSD) || defined (PROCENV_HURD)
-
-#if defined (HAVE_SYS_CAPABILITY_H)
-#include <sys/capability.h>
-#endif
+#if defined (PROCENV_PLATFORM_LINUX) || defined (PROCENV_PLATFORM_HURD)
#if ! defined (_LINUX_CAPABILITY_VERSION_3) && ! defined (CAP_LAST_CAP)
/* Ugh */
#define CAP_LAST_CAP 30
#endif
-#define PROCENV_CPU_SET_TYPE cpu_set_t
-
-#endif /* PROCENV_LINUX || PROCENV_GNU_BSD || PROCENV_HURD */
-
-#if defined (PROCENV_LINUX)
-#if defined (HAVE_SYS_CAPABILITY_H)
-#ifndef CAP_IS_SUPPORTED
-int cap_get_bound (cap_value_t cap);
-#define CAP_IS_SUPPORTED(cap) (cap_get_bound (cap) >= 0)
-#define PROCENV_NEED_LOCAL_CAP_GET_BOUND
-#endif
-#endif
-#endif
-
-
-/* Horrid hack for Hurd... :-( */
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
+#endif /* PROCENV_PLATFORM_LINUX || PROCENV_PLATFORM_HURD */
/* Environment Variables */
#define PROCENV_OUTPUT_ENV "PROCENV_OUTPUT"
#define PROCENV_FORMAT_ENV "PROCENV_FORMAT"
#define PROCENV_FILE_ENV "PROCENV_FILE"
+#define PROCENV_FILE_APPEND_ENV "PROCENV_FILE_APPEND"
#define PROCENV_EXEC_ENV "PROCENV_EXEC"
#define PROCENV_INDENT_ENV "PROCENV_INDENT"
#define PROCENV_INDENT_CHAR_ENV "PROCENV_INDENT_CHAR"
#define PROCENV_SEPARATOR_ENV "PROCENV_SEPARATOR"
#define PROCENV_CRUMB_SEPARATOR_ENV "PROCENV_CRUMB_SEPARATOR"
-#define CTIME_BUFFER 32
-#define PROCENV_BUFFER 1024
-#define DEFAULT_ALLOC_GUESS_SIZE 8
-#define MOUNTS "/proc/mounts"
-#define ROOT_PATH "/proc/self/root"
+#define PROCENV_BUFFER 1024
-#ifndef TRUE
-#define TRUE 1
-#endif
+/* FIXME: explain! */
+#define CTIME_BUFFER 32
-#ifndef FALSE
-#define FALSE (!TRUE)
-#endif
-
-/* Network family for entries containing link-level interface
- * details. These entries will be cached to allow MAC addresses
- * to be extracted from them when displaying the corresponding
- * higher-level network family entries for the interface in
- * question.
- */
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
-#define PROCENV_LINK_LEVEL_FAMILY AF_LINK
-#elif defined (PROCENV_LINUX)
-#define PROCENV_LINK_LEVEL_FAMILY AF_PACKET
-#endif
-
-#if defined (PROCENV_BSD)
-#define statfs_int_type uint64_t
-#define statfs_int_fmt PRIu64
-#elif defined (PROCENV_GNU_BSD)
-#define statfs_int_type uint64_t
-#define statfs_int_fmt "lu"
-#endif
-
-/* FIXME: gettext */
-#define _(str) str
-
-#define YES_STR _("yes")
-#define NO_STR _("no")
-#define NON_STR _("non")
-#define NA_STR _("n/a")
-#define UNKNOWN_STR _("unknown")
-#define MAX_STR _(" (max)")
-#define DEFINED_STR _("defined")
-#define NOT_DEFINED_STR _("not defined")
-#define NOT_IMPLEMENTED_STR _("[not implemented]")
-#define BIG_STR _("big")
-#define LITTLE_STR _("little")
-#define PRIVILEGED_STR _("privileged")
-#define SUPPRESSED_STR _("[suppressed]")
-#define BUILD_TYPE_STD_STR _("standard")
-#define BUILD_TYPE_REPRODUCIBLE_STR _("reproducible")
-
-#if defined (PROCENV_BSD)
- /* SIGTHL is hidden by default */
-#define NUM_SIGNALS 31
-#else
-#define NUM_SIGNALS 32
-#endif
+#include "messages.h"
/* Size of blocks we will show the user (as df(1) does) */
#define DF_BLOCK_SIZE 1024
-/* Default character to use for indent */
-#define DEFAULT_INDENT_CHAR " "
-
-/* If an indent is required, use this many INDENT_CHARs by default */
-#define DEFAULT_INDENT_AMOUNT 2
-
#define PROGRAM_AUTHORS "James Hunt <jamesodhunt@ubuntu.com>"
-#define show(...) _show ("", indent, __VA_ARGS__)
-
-/**
- * showi:
- *
- * @_indent: additional indent amount,
- * @fmt: printf-style format and optional arguments.
- *
- * Write indented message to appropriate output location.
- **/
-#define showi(_indent, ...) _show ("", indent+_indent, __VA_ARGS__)
-
-/**
- * _message:
- * @prefix: Fixed message prefix,
- * @fmt: printf-style format and optional arguments.
- *
- * Write unindented message to appropriate output location.
- **/
-#define _message(prefix, ...) _show (prefix, 0, __VA_ARGS__)
-
-#define warn(...) \
-{ \
- _message ("WARNING", __VA_ARGS__); \
-}
-
-#ifdef DEBUG
-/* for when running under GDB */
-#define die_finalise() raise (SIGUSR1)
-#else
-#define die_finalise() exit (EXIT_FAILURE)
-#endif
-
-#define bug(...) \
-{ \
- _show ("BUG", 0, __VA_ARGS__); \
- exit (EXIT_FAILURE); \
-}
-
-#define POINTER_SIZE (sizeof (void *))
-
-#define die(...) \
-{ \
- output = OUTPUT_STDERR; \
- _message ("ERROR", __VA_ARGS__); \
- cleanup (); \
- die_finalise (); \
-}
-
-#define common_assert() \
- assert (doc); \
- assert (indent >= 0)
-
-#define assert_not_reached() \
- do { \
- die ("%s:%d: Not reached assertion failed in %s", \
- __FILE__, __LINE__, __func__); \
- } while (0)
-
#define type_hex_width(type) \
(sizeof (type) * 2)
@@ -564,9 +212,9 @@ int cap_get_bound (cap_value_t cap);
}
#define show_const(t, flag, constant) \
- object_open (FALSE); \
+ object_open (false); \
entry (#constant, "%d", !!(t.flag & constant)); \
- object_close (FALSE)
+ object_close (false)
/**
* Show a terminal special characters attribute.
@@ -624,26 +272,27 @@ int cap_get_bound (cap_value_t cap);
\
errno = 0; \
len = confstr(s, NULL, 0); \
- assert (len && errno == 0); \
- \
- buffer = calloc (1, len); \
- if (! buffer) { \
- die ("failed to allocate space for confstr"); \
+ if (len && errno == 0) { \
+ \
+ buffer = calloc (1, len); \
+ if (! buffer) { \
+ die ("failed to allocate space for confstr"); \
+ } \
+ \
+ assert (confstr (s, buffer, len) == len); \
+ \
+ /* Convert multi-line values to multi-field */ \
+ for (size_t i = 0; i < len; i++) { \
+ if (buffer[i] == '\n') buffer[i] = ' '; \
+ } \
+ \
+ entry (name, "%s%s%s", \
+ buffer && buffer[0] ? "'" : "", \
+ buffer && buffer[0] ? buffer : NA_STR, \
+ buffer && buffer[0] ? "'" : ""); \
+ \
+ free (buffer); \
} \
- \
- assert (confstr (s, buffer, len) == len); \
- \
- /* Convert multi-line values to multi-field */ \
- for (size_t i = 0; i < len; i++) { \
- if (buffer[i] == '\n') buffer[i] = ' '; \
- } \
- \
- entry (name, "%s%s%s", \
- buffer && buffer[0] ? "'" : "", \
- buffer && buffer[0] ? buffer : NA_STR, \
- buffer && buffer[0] ? "'" : ""); \
- \
- free (buffer); \
}
/* Note: param is ignored */
@@ -693,406 +342,60 @@ int cap_get_bound (cap_value_t cap);
(unsigned long int)sizeof (type), \
sizeof (type) == 1 ? "" : "s")
-/**
- * @buf: string,
- * @len: number of _characters_ (*NOT* bytes!) in @buf,
- * @size: allocated size of @buf in bytes.
- **/
-typedef struct procenv_string {
- wchar_t *buf;
- size_t len;
- size_t size;
-} pstring;
-
-typedef enum {
- SHOW_ALL,
- SHOW_MOUNTS,
- SHOW_PATHCONF
-} ShowMountType;
-
-typedef enum {
- OUTPUT_FORMAT_TEXT,
- OUTPUT_FORMAT_CRUMB,
- OUTPUT_FORMAT_JSON,
- OUTPUT_FORMAT_XML
-} OutputFormat;
-
-typedef struct translate_map_entry {
- wchar_t from;
- wchar_t *to;
-} TranslateMapEntry;
-
-typedef enum element_type {
- ELEMENT_TYPE_ENTRY,
- ELEMENT_TYPE_SECTION_OPEN,
- ELEMENT_TYPE_SECTION_CLOSE,
- ELEMENT_TYPE_CONTAINER_OPEN,
- ELEMENT_TYPE_CONTAINER_CLOSE,
- ELEMENT_TYPE_OBJECT_OPEN,
- ELEMENT_TYPE_OBJECT_CLOSE,
- ELEMENT_TYPE_NONE = -1
-} ElementType;
-
-typedef struct element {
- ElementType type;
-
- char *name;
- char *value;
-
- /* Optional array of name/value pairs associated with @name */
- char **attributes;
-} Element;
-
-/*
- * XXX: Gross magic number must equal the maximum number of entries in
- * any particular OutputFormats translation table.
- *
- * This must be updated to reflect the maximum values in any
- * TranslateMapEntry, plus 1.
- */
-#define TRANSLATE_MAP_ENTRIES (5+1)
-
#define free_if_set(ptr) \
if (ptr) free (ptr)
-typedef struct translate_table {
- OutputFormat output_format;
- TranslateMapEntry map[TRANSLATE_MAP_ENTRIES];
-} TranslateTable;
-
-struct procenv_map {
- int num;
- char *name;
-};
-
-typedef enum procenv_output {
- OUTPUT_FILE,
- OUTPUT_STDERR,
- OUTPUT_STDOUT,
- OUTPUT_SYSLOG,
- OUTPUT_TERM
-} Output;
-
-struct baud_speed
-{
- speed_t speed;
- char *name;
-};
-
-struct procenv_user {
- pid_t pid;
- pid_t ppid;
- pid_t sid;
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_HURD)
- char proc_name[16];
-#endif
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
- char proc_name[COMMLEN+1];
-#endif
-
- pid_t pgroup;
- pid_t fg_pgroup;
- pid_t pgid_sid;
- char ctrl_terminal[L_ctermid];
- int tty_fd;
-
- uid_t uid;
- uid_t euid;
- uid_t suid;
-
- char *login;
-
- gid_t gid;
- gid_t egid;
- gid_t sgid;
-
- struct passwd passwd;
-};
-
-struct procenv_misc {
- char cwd[PATH_MAX];
- char root[PATH_MAX];
- mode_t umask_value;
- int cpu;
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
- int in_jail;
-#endif
-};
-
-struct procenv_priority {
- int process;
- int pgrp;
- int user;
-};
-
-struct network_map {
- struct ifaddrs ifaddr;
- char *mac_address;
-
- struct network_map *next;
- struct network_map *prev;
-};
-
-pstring *pstring_new (void);
-pstring *pstring_create (const wchar_t *str);
-void pstring_free (pstring *str);
-pstring *char_to_pstring (const char *str);
-wchar_t *char_to_wchar (const char *str);
-char *wchar_to_char (const wchar_t *wstr);
-char *pstring_to_char (const pstring *str);
-
-void master_header (pstring **doc);
-void master_footer (pstring **doc);
-
-void header (const char *name);
-void footer (void);
-
-void object_open (int retain);
-void object_close (int retain);
-void section_open (const char *name);
-void section_close (void);
-
-void container_open (const char *name);
-void container_close (void);
-
-void entry (const char *name, const char *fmt, ...);
-void _show (const char *prefix, int indent, const char *fmt, ...);
-void _show_output (const char *str);
-void _show_output_pstring (const pstring *pstr);
-
-/* operate on multi-bytes */
-void append (char **dest, const char *src);
-void appendn (char **dest, const char *src, size_t len);
-void appendf (char **dest, const char *fmt, ...);
-void appendva (char **dest, const char *fmt, va_list ap);
-
-/* operate on pure wide-characters */
-void wappend (pstring **dest, const wchar_t *src);
-void wappendn (pstring **dest, const wchar_t *src, size_t len);
-void wappendf (pstring **dest, const wchar_t *fmt, ...);
-void wappendva (pstring **dest, const wchar_t *fmt, va_list ap);
-
-/* operate on wide-characters, but using multi-byte formats */
-void wmappend (pstring **dest, const char *src);
-void wmappendn (pstring **dest, const char *src, size_t len);
-void wmappendf (pstring **dest, const char *fmt, ...);
-void wmappendva (pstring **dest, const char *fmt, va_list ap);
-
-void pappend (pstring **dest, const pstring *src);
-
-int get_indent (void);
-void inc_indent (void);
-void dec_indent (void);
-void add_indent (pstring **doc);
-
-void change_element (ElementType new);
-void format_element (void);
-void format_text_element (void);
-void format_json_element (void);
-void format_xml_element (void);
-
-int encode_string (pstring **pstr);
-pstring *translate (const pstring *pstr);
-void compress (pstring **wstr, wchar_t remove_char);
-void chomp (pstring *str);
-
-void show_version (void);
-void save_locale (void);
-void restore_locale (void);
-void handle_indent_char (void);
-void init (void);
-void cleanup (void);
-bool in_chroot (void);
-const char *container_type (void);
-bool is_process_group_leader (void);
-bool is_session_leader (void);
-void assert_cwd (void);
-void assert_chroot (void);
-void assert_user (void);
-void dump_options (void);
-void show_proc (void);
-void show_misc (void);
-void show_env (void);
-void show_rlimits (void);
-void show_rusage (void);
-void show_sysconf (void);
-char *get_user_name (gid_t gid);
-char *get_group_name (gid_t gid);
-char *pid_to_name (pid_t pid);
-
-#ifndef PROCENV_ANDROID
-void show_confstrs (void);
-#endif
-
-void show_priorities (void);
-void show_shared_mem (void);
-void show_semaphores (void);
-void show_msg_queues (void);
-void dump_priorities (void);
-void show_mounts (ShowMountType what);
-void get_user_info (void);
-void get_priorities (void);
-void format_time (const time_t *t, char *buffer, size_t len);
-char *format_perms (mode_t mode);
-void get_config (void);
-void get_config_from_env (void);
-void check_config (void);
-void show_proc_branch (void);
-void show_tty_attrs (void);
-const char *get_speed (speed_t speed);
+char *get_path (const char *argv0);
+char *get_personality_flags (unsigned int flags);
+const char *get_arch (void);
+const char *get_group_name (gid_t gid);
+const char *get_os (void);
+const char *get_personality_name (unsigned int domain);
const char *get_signal_name (int signum);
-void show_arguments (void);
-void show_meta (void);
-char *get_os (void);
-char *get_arch (void);
-void show_platform (void);
-
-#ifndef PROCENV_ANDROID
-int libs_callback (struct dl_phdr_info *info, size_t size, void *data);
-void show_libs (void);
-#endif
+const char *get_thread_scheduler_name (int sched);
+const char *get_user_name (gid_t gid);
+int get_major_minor (const char *path, unsigned int *_major, unsigned int *_minor);
+long get_kernel_bits (void);
+void get_priorities (void);
+void get_uname (void);
+void show_all_groups (void);
+void show_capabilities (void);
+void show_cgroups (void);
void show_clocks (void);
-void show_timezone (void);
-void show_time (void);
-void show_signals (void);
-void show_pathconfs (ShowMountType what, const char *dir);
-void show_sizeof (void);
-void show_ranges (void);
void show_compiler (void);
+void show_confstrs (void);
+void show_data_model (void);
void show_libc (void);
-void get_uname (void);
-void show_uname (void);
-void show_all_groups (void);
-void show_fds (void);
-void show_namespaces (void);
-void show_fds_generic (void);
-
-#if !defined (PROCENV_HURD)
-int is_console (int fd);
-#endif
-
-long get_kernel_bits (void);
-bool has_ctty (void);
-void show_cpu (void);
-void show_cpu_affinities (void);
-void show_memory (void);
-void show_threads (void);
-void check_envvars (void);
-int get_output_value (const char *name);
-int get_output_format (const char *name);
-const char *get_output_format_name (void);
-void show_stat (void);
+void show_libs (void);
void show_locale (void);
-int get_major_minor (const char *path, unsigned int *_major, unsigned int *_minor);
-bool uid_match (uid_t uid);
-char *get_path (const char *argv0);
-bool is_big_endian (void);
-const char *get_thread_scheduler_name (int sched);
-int qsort_compar (const void *a, const void *b);
-void show_data_model (void);
-const char *get_net_family_name (sa_family_t family);
+void show_mounts (ShowMountType what);
+void show_misc (void);
+void show_msg_queues (void);
void show_network (void);
-void show_network_if (const struct ifaddrs *ifa, const char *mac_address);
-void get_network_name (const struct sockaddr *address, int family, char *name);
-const char *get_ipv6_scope_name (uint32_t scope);
-char *get_mac_address (const struct ifaddrs *ifaddr);
-int get_mtu (const struct ifaddrs *ifaddr);
-void set_breadcrumb (const char *name);
-void add_breadcrumb (const char *name);
-void remove_breadcrumb (void);
-void clear_breadcrumbs (void);
-void show_cgroups (void);
void show_oom (void);
-void show_capabilities (void);
-
-#if defined (PROCENV_LINUX)
-
-void decode_if_flags (unsigned int flags);
-void decode_extended_if_flags (const char *interface, unsigned short *flags);
-int get_canonical (const char *path, char *canonical, size_t len);
-void get_tty_locked_status (struct termios *lock_status);
-void show_fds_linux (void);
-void show_namespaces_linux (void);
-void show_cgroups_linux (void);
-void show_oom_linux (void);
-void show_timezone_linux (void);
-
-#if defined (HAVE_SYS_CAPABILITY_H)
-int get_capability_by_flag_type (cap_t cap_p, cap_flag_t type, cap_value_t cap);
-#endif /* HAVE_SYS_CAPABILITY_H */
-
-void show_capabilities_linux (void);
-void show_security_module_linux (void);
-void show_security_module_context_linux (void);
-void show_prctl_linux (void);
-void show_cpu_linux (void);
-char *get_scheduler_name (int sched);
-bool linux_kernel_version (int major, int minor, int revision);
-
-void show_numa_memory (void);
-
-#if defined (HAVE_NUMA_H)
-const char *get_numa_policy (int policy);
-#endif /* HAVE_NUMA_H */
-
-const char *get_personality_name (unsigned int domain);
-char *get_personality_flags (unsigned int flags);
-
-#else /* ! PROCENV_LINUX */
-
-void show_cgroups_stub (void);
-void show_oom_stub (void);
-void show_capabilities_stub (void);
-void show_timezone_stub (void);
-void show_shared_mem_stub (void);
-void show_semaphores_stub ();
-void show_msg_queues_stub (void);
-void show_namespaces_stub (void);
-
-#endif /* PROCENV_LINUX */
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_GNU_BSD)
-void show_proc_branch_linux (void);
-#endif /* PROCENV_LINUX || PROCENV_GNU_BSD */
-
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_HURD)
-void show_shared_mem_linux (void);
-void show_semaphores_linux (void);
-void show_msg_queues_linux (void);
-#endif /* PROCENV_LINUX || PROCENV_HURD */
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_HURD)
-void show_mounts_linux (ShowMountType what);
-#endif
-
-#if defined (PROCENV_BSD) || defined (PROCENV_GNU_BSD)
-char *get_mount_opts_bsd (uint64_t flags);
-void show_mounts_bsd (ShowMountType what);
-void show_network_bsd (void);
-void get_misc_bsd (void);
-void show_proc_branch_bsd (void);
-void show_cpu_bsd (void);
-#endif /* PROCENV_BSD + PROCENV_GNU_BSD */
-
-#if defined (PROCENV_BSD) && defined (HAVE_SYS_CAPABILITY_H)
-void show_capabilities_bsd (int fd);
-#endif /* (PROCENV_BSD) && defined (HAVE_SYS_CAPABILITY_H) */
-
-#if defined (PROCENV_LINUX) || defined (PROCENV_HURD)
-/* semctl(2) on Linux tells us _we_ must define this */
+void show_ranges (void);
+void show_rlimits (void);
+void show_semaphores (void);
+void show_shared_mem (void);
+void show_sizeof (void);
+void show_threads (void);
+void show_time (void);
+void show_timezone (void);
+void show_tty_attrs (void);
+void show_uname (void);
+void show_version (void);
-union semun {
- int val;
- struct semid_ds *buf;
- unsigned short int *array;
- struct seminfo *__buf;
-};
+void handle_proc_branch (void);
-#endif
+char *format_perms (mode_t mode);
+void format_time (const time_t *t, char *buffer, size_t len);
+void restore_locale (void);
+int qsort_compar (const void *a, const void *b);
extern char **environ;
+extern Output output;
+extern pstring *doc;
+
#endif /* PROCENV_H */