summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-04-16 05:04:53 +0200
committerLennart Poettering <lennart@poettering.net>2013-04-16 05:04:53 +0200
commit82da66fb750c91f06e713ff23a5e5c57ff05c2a8 (patch)
treed36730ca6eaca931106b96a90bced84651ce0bf5 /src
parentd8d3d8a781031d6b1ee4e5f57ec21f16c20a4cf2 (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.c13
-rw-r--r--src/shared/util.h26
-rw-r--r--src/systemctl/systemctl.c2
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));