aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2017-05-23 15:48:26 -0500
committerRob Landley <rob@landley.net>2017-05-23 15:48:26 -0500
commit5a159cceb35fe08e444bd5a1771f8059888b03ff (patch)
treede7fc8d4809d0515e972eb507ca53db27f6b74ee
parent77f9c7700604127f9e9f46d44764ca3db978f706 (diff)
downloadtoybox-5a159cceb35fe08e444bd5a1771f8059888b03ff.tar.gz
Add minof/maxof macros that autodetect type. Make xzcat use them.
-rw-r--r--lib/lib.h3
-rw-r--r--toys/pending/xzcat.c18
2 files changed, 8 insertions, 13 deletions
diff --git a/lib/lib.h b/lib/lib.h
index 5d2bb4df..effba9b4 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -341,5 +341,8 @@ pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid);
// Wrapper that discards true/false "did it exit" value.
#define NOEXIT(x) WOULD_EXIT(_noexit_res, x)
+#define minof(a, b) ({typeof(a) aa = (a); typeof(b) bb = (b); aa<bb ? aa : bb;})
+#define maxof(a, b) ({typeof(a) aa = (a); typeof(b) bb = (b); aa>bb ? aa : bb;})
+
// Functions in need of further review/cleanup
#include "lib/pending.h"
diff --git a/toys/pending/xzcat.c b/toys/pending/xzcat.c
index 951ead00..55e0a051 100644
--- a/toys/pending/xzcat.c
+++ b/toys/pending/xzcat.c
@@ -319,12 +319,6 @@ void xzcat_main(void)
#define memeq(a, b, size) (memcmp(a, b, size) == 0)
-#ifndef min
-# define min(x, y) ((x) < (y) ? (x) : (y))
-#endif
-#define min_t(type, x, y) min(x, y)
-
-
/* Inline functions to access unaligned unsigned 32-bit integers */
#ifndef get_unaligned_le32
static inline uint32_t get_unaligned_le32(const uint8_t *buf)
@@ -817,7 +811,7 @@ static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b)
{
size_t copy_size;
- copy_size = min_t(size_t, s->temp.filtered, b->out_size - b->out_pos);
+ copy_size = minof(s->temp.filtered, b->out_size - b->out_pos);
memcpy(b->out + b->out_pos, s->temp.buf, copy_size);
b->out_pos += copy_size;
@@ -1504,7 +1498,7 @@ static int dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist)
if (dist >= dict->full || dist >= dict->size) return 0;
- left = min_t(size_t, dict->limit - dict->pos, *len);
+ left = minof(dict->limit - dict->pos, *len);
*len -= left;
back = dict->pos - dist - 1;
@@ -1531,7 +1525,7 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b,
while (*left > 0 && b->in_pos < b->in_size
&& b->out_pos < b->out_size) {
- copy_size = min(b->in_size - b->in_pos,
+ copy_size = minof(b->in_size - b->in_pos,
b->out_size - b->out_pos);
if (copy_size > dict->end - dict->pos)
copy_size = dict->end - dict->pos;
@@ -2210,8 +2204,7 @@ enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s,
* the output buffer yet, we may run this loop
* multiple times without changing s->lzma2.sequence.
*/
- dict_limit(&s->dict, min_t(size_t,
- b->out_size - b->out_pos,
+ dict_limit(&s->dict, minof(b->out_size - b->out_pos,
s->lzma2.uncompressed));
if (!lzma2_lzma(s, b))
return XZ_DATA_ERROR;
@@ -2490,8 +2483,7 @@ static const uint8_t check_sizes[16] = {
*/
static int fill_temp(struct xz_dec *s, struct xz_buf *b)
{
- size_t copy_size = min_t(size_t,
- b->in_size - b->in_pos, s->temp.size - s->temp.pos);
+ size_t copy_size = minof(b->in_size - b->in_pos, s->temp.size - s->temp.pos);
memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size);
b->in_pos += copy_size;