/* Copyright (c) 2016 Google Inc. All rights reserved.
 *
 * This file defines kernel specific macros used by the Linux kernel's xz
 * library.
 *
 * Description from xz_private.h:
 * For userspace builds, use a separate header to define the required
 * macros and functions. This makes it easier to adapt the code into
 * different environments and avoids clutter in the Linux kernel tree.
 */

#ifndef XZ_CONFIG_H
#define XZ_CONFIG_H

#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>

#include "xz.h"

#define INIT /* empty */
#define memmove memmove

#define kmalloc(size, flags) malloc(size)
#define kfree(ptr) free(ptr)
#define vmalloc(size) malloc(size)
#define vfree(ptr) do { if (ptr != NULL) free(ptr); } while (0)
#define get_le32(p) (*(uint32_t*)(p))

#define min(x, y) ({                            \
            typeof(x) _min1 = (x);                      \
            typeof(y) _min2 = (y);                      \
            (void) (&_min1 == &_min2);          \
            _min1 < _min2 ? _min1 : _min2; })

#define max(x, y) ({                            \
            typeof(x) _max1 = (x);                      \
            typeof(y) _max2 = (y);                      \
            (void) (&_max1 == &_max2);          \
            _max1 > _max2 ? _max1 : _max2; })

#define min_t(type, x, y) ({                    \
            type __min1 = (x);                  \
            type __min2 = (y);                  \
            __min1 < __min2 ? __min1: __min2; })

#define max_t(type, x, y) ({                    \
            type __max1 = (x);                  \
            type __max2 = (y);                  \
            __max1 > __max2 ? __max1: __max2; })

#endif  // XZ_CONFIG_H
