The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/xz-embedded/userspace/xz_config.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Private includes and definitions for userspace use of XZ Embedded
    3  *
    4  * Author: Lasse Collin <lasse.collin@tukaani.org>
    5  *
    6  * This file has been put into the public domain.
    7  * You can do whatever you want with this file.
    8  */
    9 
   10 #ifndef XZ_CONFIG_H
   11 #define XZ_CONFIG_H
   12 
   13 /* Uncomment to enable building of xz_dec_catrun(). */
   14 /* #define XZ_DEC_CONCATENATED */
   15 
   16 /* Uncomment to enable CRC64 support. */
   17 /* #define XZ_USE_CRC64 */
   18 
   19 /* Uncomment as needed to enable BCJ filter decoders. */
   20 /* #define XZ_DEC_X86 */
   21 /* #define XZ_DEC_POWERPC */
   22 /* #define XZ_DEC_IA64 */
   23 /* #define XZ_DEC_ARM */
   24 /* #define XZ_DEC_ARMTHUMB */
   25 /* #define XZ_DEC_SPARC */
   26 
   27 /*
   28  * MSVC doesn't support modern C but XZ Embedded is mostly C89
   29  * so these are enough.
   30  */
   31 #ifdef _MSC_VER
   32 typedef unsigned char bool;
   33 #       define true 1
   34 #       define false 0
   35 #       define inline __inline
   36 #else
   37 #       include <stdbool.h>
   38 #endif
   39 
   40 #include <stdlib.h>
   41 #include <string.h>
   42 
   43 #include "xz.h"
   44 
   45 #define kmalloc(size, flags) malloc(size)
   46 #define kfree(ptr) free(ptr)
   47 #define vmalloc(size) malloc(size)
   48 #define vfree(ptr) free(ptr)
   49 
   50 #define memeq(a, b, size) (memcmp(a, b, size) == 0)
   51 #define memzero(buf, size) memset(buf, 0, size)
   52 
   53 #ifndef min
   54 #       define min(x, y) ((x) < (y) ? (x) : (y))
   55 #endif
   56 #define min_t(type, x, y) min(x, y)
   57 
   58 /*
   59  * Some functions have been marked with __always_inline to keep the
   60  * performance reasonable even when the compiler is optimizing for
   61  * small code size. You may be able to save a few bytes by #defining
   62  * __always_inline to plain inline, but don't complain if the code
   63  * becomes slow.
   64  *
   65  * NOTE: System headers on GNU/Linux may #define this macro already,
   66  * so if you want to change it, you need to #undef it first.
   67  */
   68 #ifndef __always_inline
   69 #       ifdef __GNUC__
   70 #               define __always_inline \
   71                         inline __attribute__((__always_inline__))
   72 #       else
   73 #               define __always_inline inline
   74 #       endif
   75 #endif
   76 
   77 /* Inline functions to access unaligned unsigned 32-bit integers */
   78 #ifndef get_unaligned_le32
   79 static inline uint32_t get_unaligned_le32(const uint8_t *buf)
   80 {
   81         return (uint32_t)buf[0]
   82                         | ((uint32_t)buf[1] << 8)
   83                         | ((uint32_t)buf[2] << 16)
   84                         | ((uint32_t)buf[3] << 24);
   85 }
   86 #endif
   87 
   88 #ifndef get_unaligned_be32
   89 static inline uint32_t get_unaligned_be32(const uint8_t *buf)
   90 {
   91         return (uint32_t)(buf[0] << 24)
   92                         | ((uint32_t)buf[1] << 16)
   93                         | ((uint32_t)buf[2] << 8)
   94                         | (uint32_t)buf[3];
   95 }
   96 #endif
   97 
   98 #ifndef put_unaligned_le32
   99 static inline void put_unaligned_le32(uint32_t val, uint8_t *buf)
  100 {
  101         buf[0] = (uint8_t)val;
  102         buf[1] = (uint8_t)(val >> 8);
  103         buf[2] = (uint8_t)(val >> 16);
  104         buf[3] = (uint8_t)(val >> 24);
  105 }
  106 #endif
  107 
  108 #ifndef put_unaligned_be32
  109 static inline void put_unaligned_be32(uint32_t val, uint8_t *buf)
  110 {
  111         buf[0] = (uint8_t)(val >> 24);
  112         buf[1] = (uint8_t)(val >> 16);
  113         buf[2] = (uint8_t)(val >> 8);
  114         buf[3] = (uint8_t)val;
  115 }
  116 #endif
  117 
  118 /*
  119  * Use get_unaligned_le32() also for aligned access for simplicity. On
  120  * little endian systems, #define get_le32(ptr) (*(const uint32_t *)(ptr))
  121  * could save a few bytes in code size.
  122  */
  123 #ifndef get_le32
  124 #       define get_le32 get_unaligned_le32
  125 #endif
  126 
  127 #endif

Cache object: 164e177377691e66ef198a05d42f6f2a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.