diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-04-16 05:04:53 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-04-16 05:04:53 +0200 |
commit | 82da66fb750c91f06e713ff23a5e5c57ff05c2a8 (patch) | |
tree | d36730ca6eaca931106b96a90bced84651ce0bf5 /src | |
parent | d8d3d8a781031d6b1ee4e5f57ec21f16c20a4cf2 (diff) |
util: replace decimal_str_max() by a typesafe macro DECIMAL_STR_WIDTH()
DECIMAL_STR_WIDTH() now works on any numeric type, and is easier to
distingish from DECIMAL_STR_MAX().
This also replaces another manual implementaiton of ulog10 by this macro.
Diffstat (limited to 'src')
-rw-r--r-- | src/shared/cgroup-show.c | 13 | ||||
-rw-r--r-- | src/shared/util.h | 26 | ||||
-rw-r--r-- | src/systemctl/systemctl.c | 2 |
3 files changed, 16 insertions, 25 deletions
diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index 9ee532ca22..0e82375ea9 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -40,17 +40,6 @@ static int compare(const void *a, const void *b) { return 0; } -static unsigned ilog10(unsigned long ul) { - int n = 0; - - while (ul > 0) { - n++; - ul /= 10; - } - - return n; -} - static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads, OutputFlags flags) { unsigned i, m, pid_width; pid_t biggest = 0; @@ -71,7 +60,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi pids[m++] = pids[i]; } n_pids = m; - pid_width = ilog10(biggest); + pid_width = DECIMAL_STR_WIDTH(biggest); /* And sort */ qsort(pids, n_pids, sizeof(pid_t), compare); diff --git a/src/shared/util.h b/src/shared/util.h index b33fdb5b7a..683ff5a4fe 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -649,19 +649,21 @@ static inline bool logind_running(void) { return access("/run/systemd/seats/", F_OK) >= 0; } -static inline unsigned decimal_str_max(unsigned x) { - unsigned ans = 1; - while (x /= 10) - ans ++; - return ans; -} +#define DECIMAL_STR_WIDTH(x) \ + ({ \ + typeof(x) _x_ = (x); \ + unsigned ans = 1; \ + while (_x_ /= 10) \ + ans++; \ + ans; \ + }) int unlink_noerrno(const char *path); -#define alloca0(n) \ - ({ \ - char *__new; \ - size_t __len = n; \ - __new = alloca(__len); \ - (void *) memset(__new, 0, __len); \ +#define alloca0(n) \ + ({ \ + char *_new_; \ + size_t _len_ = n; \ + _new_ = alloca(_len_); \ + (void *) memset(_new_, 0, _len_); \ }) diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 36567224f8..2f43052f9a 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -1178,7 +1178,7 @@ static void list_jobs_print(struct job_info* jobs, size_t n) { for (i = 0, j = jobs; i < n; i++, j++) { assert(j->name && j->type && j->state); - l0 = MAX(l0, decimal_str_max(j->id)); + l0 = MAX(l0, DECIMAL_STR_WIDTH(j->id)); l1 = MAX(l1, strlen(j->name)); l2 = MAX(l2, strlen(j->type)); l3 = MAX(l3, strlen(j->state)); |