]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/format-util.h
util: introduce format_bytes_full()
[thirdparty/systemd.git] / src / basic / format-util.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
6482f626
RC
2#pragma once
3
6482f626 4#include <inttypes.h>
7f686722 5#include <net/if.h>
aa892669 6#include <stdbool.h>
6482f626
RC
7
8#if SIZEOF_PID_T == 4
9# define PID_PRI PRIi32
10#elif SIZEOF_PID_T == 2
11# define PID_PRI PRIi16
12#else
13# error Unknown pid_t size
14#endif
15#define PID_FMT "%" PID_PRI
16
17#if SIZEOF_UID_T == 4
18# define UID_FMT "%" PRIu32
19#elif SIZEOF_UID_T == 2
20# define UID_FMT "%" PRIu16
21#else
22# error Unknown uid_t size
23#endif
24
25#if SIZEOF_GID_T == 4
26# define GID_FMT "%" PRIu32
27#elif SIZEOF_GID_T == 2
28# define GID_FMT "%" PRIu16
29#else
30# error Unknown gid_t size
31#endif
32
33#if SIZEOF_TIME_T == 8
34# define PRI_TIME PRIi64
35#elif SIZEOF_TIME_T == 4
6307c39b 36# define PRI_TIME "li"
6482f626
RC
37#else
38# error Unknown time_t size
39#endif
40
3bd7ef83
MS
41#if defined __x86_64__ && defined __ILP32__
42# define PRI_TIMEX PRIi64
43#else
44# define PRI_TIMEX "li"
45#endif
46
6482f626
RC
47#if SIZEOF_RLIM_T == 8
48# define RLIM_FMT "%" PRIu64
49#elif SIZEOF_RLIM_T == 4
50# define RLIM_FMT "%" PRIu32
51#else
52# error Unknown rlim_t size
53#endif
7bce046b
LP
54
55#if SIZEOF_DEV_T == 8
56# define DEV_FMT "%" PRIu64
57#elif SIZEOF_DEV_T == 4
58# define DEV_FMT "%" PRIu32
59#else
60# error Unknown dev_t size
61#endif
62
63#if SIZEOF_INO_T == 8
64# define INO_FMT "%" PRIu64
65#elif SIZEOF_INO_T == 4
66# define INO_FMT "%" PRIu32
67#else
68# error Unknown ino_t size
69#endif
7f686722
YW
70
71char *format_ifname(int ifindex, char buf[static IF_NAMESIZE + 1]);
aa892669
YW
72
73typedef enum {
74 FORMAT_BYTES_USE_IEC = 1 << 0,
75 FORMAT_BYTES_BELOW_POINT = 1 << 1,
76 FORMAT_BYTES_TRAILING_B = 1 << 2,
77} FormatBytesFlag;
78
79#define FORMAT_BYTES_MAX 8
80char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag);
81static inline char *format_bytes(char *buf, size_t l, uint64_t t) {
82 return format_bytes_full(buf, l, t, FORMAT_BYTES_USE_IEC | FORMAT_BYTES_BELOW_POINT | FORMAT_BYTES_TRAILING_B);
83}