From: Cristian Rodríguez Date: Mon, 1 Apr 2013 06:08:05 +0000 (-0300) Subject: Always use our own MAX/MIN definitions X-Git-Tag: v201~95 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=9607d9470eec07df817e58f64d312ccb5ac4cfcc Always use our own MAX/MIN definitions code in src/shared/macro.h only defined MAX/MIN in case they were not defined previously. however the MAX/MIN macros implemented in glibc are not of the "safe" kind but defined as: define MIN(a,b) (((a)<(b))?(a):(b)) define MAX(a,b) (((a)>(b))?(a):(b)) Avoid nasty side effects by using our own versions instead. Also fix the warnings derived from this change. [zj: - modify MAX3 macro to fix warning about _a shadowing _a, - do bootchart/svg.c too, - remove unused MIN3.] --- diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c index 0fb9fffd9..a4086c522 100644 --- a/src/bootchart/svg.c +++ b/src/bootchart/svg.c @@ -44,9 +44,6 @@ #define kb_to_graph(m) ((m) * arg_scale_y * 0.0001) #define to_color(n) (192.0 - ((n) * 192.0)) -#define max(x, y) (((x) > (y)) ? (x) : (y)) -#define min(x, y) (((x) < (y)) ? (x) : (y)) - static char str[8092]; #define svg(a...) do { snprintf(str, 8092, ## a); fputs(str, of); fflush(of); } while (0) @@ -441,8 +438,8 @@ static void svg_io_bi_bar(void) { int stop; double tot; - start = max(i - ((range / 2) - 1), 0); - stop = min(i + (range / 2), samples - 1); + start = MAX(i - ((range / 2) - 1), 0); + stop = MIN(i + (range / 2), samples - 1); tot = (double)(blockstat[stop].bi - blockstat[start].bi) / (stop - start); @@ -463,8 +460,8 @@ static void svg_io_bi_bar(void) { double tot; double pbi; - start = max(i - ((range / 2) - 1), 0); - stop = min(i + (range / 2), samples); + start = MAX(i - ((range / 2) - 1), 0); + stop = MIN(i + (range / 2), samples); tot = (double)(blockstat[stop].bi - blockstat[start].bi) / (stop - start); @@ -517,8 +514,8 @@ static void svg_io_bo_bar(void) { int stop; double tot; - start = max(i - ((range / 2) - 1), 0); - stop = min(i + (range / 2), samples - 1); + start = MAX(i - ((range / 2) - 1), 0); + stop = MIN(i + (range / 2), samples - 1); tot = (double)(blockstat[stop].bi - blockstat[start].bi) / (stop - start); @@ -539,8 +536,8 @@ static void svg_io_bo_bar(void) { double tot; double pbo; - start = max(i - ((range / 2) - 1), 0); - stop = min(i + (range / 2), samples); + start = MAX(i - ((range / 2) - 1), 0); + stop = MIN(i + (range / 2), samples); tot = (double)(blockstat[stop].bo - blockstat[start].bo) / (stop - start); diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c index 5b077be0d..a44e126c0 100644 --- a/src/journal/journal-file.c +++ b/src/journal/journal-file.c @@ -1325,7 +1325,7 @@ int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const st #endif /* alloca() can't take 0, hence let's allocate at least one */ - items = alloca(sizeof(EntryItem) * MAX(1, n_iovec)); + items = alloca(sizeof(EntryItem) * MAX(1u, n_iovec)); for (i = 0; i < n_iovec; i++) { uint64_t p; diff --git a/src/libsystemd-bus/bus-socket.c b/src/libsystemd-bus/bus-socket.c index 5b5a73123..c68c7bca6 100644 --- a/src/libsystemd-bus/bus-socket.c +++ b/src/libsystemd-bus/bus-socket.c @@ -455,7 +455,7 @@ static int bus_socket_read_auth(sd_bus *b) { if (r != 0) return r; - n = MAX(256, b->rbuffer_size * 2); + n = MAX(256u, b->rbuffer_size * 2); if (n > BUS_AUTH_SIZE_MAX) n = BUS_AUTH_SIZE_MAX; diff --git a/src/shared/macro.h b/src/shared/macro.h index 898784ac8..4e5d0f4f2 100644 --- a/src/shared/macro.h +++ b/src/shared/macro.h @@ -71,29 +71,27 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) { const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) -#ifndef MAX -#define MAX(a,b) \ - __extension__ ({ \ - typeof(a) _a = (a); \ - typeof(b) _b = (b); \ - _a > _b ? _a : _b; \ +#undef MAX +#define MAX(a,b) \ + __extension__ ({ \ + typeof(a) _a = (a); \ + typeof(b) _b = (b); \ + _a > _b ? _a : _b; \ }) -#endif -#define MAX3(a,b,c) \ - MAX(MAX(a,b),c) +#define MAX3(x,y,z) \ + __extension__ ({ \ + typeof(x) _c = MAX(x,y); \ + MAX(_c, z); \ + }) -#ifndef MIN +#undef MIN #define MIN(a,b) \ __extension__ ({ \ typeof(a) _a = (a); \ typeof(b) _b = (b); \ _a < _b ? _a : _b; \ }) -#endif - -#define MIN3(a,b,c) \ - MIN(MIN(a,b),c) #ifndef CLAMP #define CLAMP(x, low, high) \ diff --git a/src/shared/prioq.c b/src/shared/prioq.c index 64c44aef8..a2205719b 100644 --- a/src/shared/prioq.c +++ b/src/shared/prioq.c @@ -159,7 +159,7 @@ int prioq_put(Prioq *q, void *data, unsigned *idx) { unsigned n; struct prioq_item *j; - n = MAX((q->n_items+1) * 2, 16); + n = MAX((q->n_items+1) * 2, 16u); j = realloc(q->items, sizeof(struct prioq_item) * n); if (!j) return -ENOMEM; diff --git a/src/shared/util.c b/src/shared/util.c index b516b9b05..46c20bec9 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -5862,7 +5862,7 @@ void* greedy_realloc(void **p, size_t *allocated, size_t need) { if (*allocated >= need) return *p; - a = MAX(64, need * 2); + a = MAX(64u, need * 2); q = realloc(*p, a); if (!q) return NULL; diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 328b91bc3..6bd2e34f5 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -328,7 +328,7 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) { if (!arg_full) { unsigned basic_len; - id_len = MIN(max_id_len, 25); + id_len = MIN(max_id_len, 25u); basic_len = 5 + id_len + 5 + active_len + sub_len; if (job_count) basic_len += job_len + 1; @@ -337,7 +337,7 @@ static void output_units_list(const struct unit_info *unit_infos, unsigned c) { extra_len = columns() - basic_len; /* Either UNIT already got 25, or is fully satisfied. * Grant up to 25 to DESC now. */ - incr = MIN(extra_len, 25); + incr = MIN(extra_len, 25u); desc_len += incr; extra_len -= incr; /* split the remaining space between UNIT and DESC, @@ -463,7 +463,7 @@ static int get_unit_list(DBusConnection *bus, DBusMessage **reply, if (*c >= n_units) { struct unit_info *w; - n_units = MAX(2 * *c, 16); + n_units = MAX(2 * *c, 16u); w = realloc(*unit_infos, sizeof(struct unit_info) * n_units); if (!w) return log_oom(); @@ -543,7 +543,7 @@ static void output_unit_file_list(const UnitFileList *units, unsigned c) { if (!arg_full) { unsigned basic_cols; - id_cols = MIN(max_id_len, 25); + id_cols = MIN(max_id_len, 25u); basic_cols = 1 + id_cols + state_cols; if (basic_cols < (unsigned) columns()) id_cols += MIN(columns() - basic_cols, max_id_len - id_cols); @@ -657,7 +657,7 @@ static int list_unit_files(DBusConnection *bus, char **args) { if (c >= n_units) { UnitFileList *w; - n_units = MAX(2*c, 16); + n_units = MAX(2*c, 16u); w = realloc(units, sizeof(struct UnitFileList) * n_units); if (!w) return log_oom(); @@ -694,7 +694,7 @@ static int list_dependencies_print(const char *name, int level, unsigned int bra int i; _cleanup_free_ char *n = NULL; size_t len = 0; - size_t max_len = MAX(columns(),20); + size_t max_len = MAX(columns(),20u); for (i = level - 1; i >= 0; i--) { len += 2;