Annotation of embedaddon/istgt/src/istgt_misc.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2008-2010 Daisuke Aoyama <aoyama@peach.ne.jp>.
        !             3:  * All rights reserved.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  *
        !            14:  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            15:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            16:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            17:  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
        !            18:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            19:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            20:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            21:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            22:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            23:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            24:  * SUCH DAMAGE.
        !            25:  *
        !            26:  */
        !            27: 
        !            28: #ifndef ISTGT_MISC_H
        !            29: #define ISTGT_MISC_H
        !            30: 
        !            31: #include <stdint.h>
        !            32: #include <stddef.h>
        !            33: #include <stdio.h>
        !            34: 
        !            35: #define ISTGT_USE_MACRO_EXPAND
        !            36: 
        !            37: #ifdef ISTGT_USE_MACRO_EXPAND
        !            38: #define DSET8(B,D)  (*((uint8_t *)(B)) = (uint8_t)(D))
        !            39: #define DSET16(B,D)                                                                                                    \
        !            40:        (((*((uint8_t *)(B)+0)) = (uint8_t)((uint16_t)(D) >> 8)),               \
        !            41:         ((*((uint8_t *)(B)+1)) = (uint8_t)((uint16_t)(D) >> 0)))
        !            42: #define DSET24(B,D)                                                                                                    \
        !            43:        (((*((uint8_t *)(B)+0)) = (uint8_t)((uint32_t)(D) >> 16)),              \
        !            44:         ((*((uint8_t *)(B)+1)) = (uint8_t)((uint32_t)(D) >> 8)),               \
        !            45:         ((*((uint8_t *)(B)+2)) = (uint8_t)((uint32_t)(D) >> 0)))
        !            46: #define DSET32(B,D)                                                                                                    \
        !            47:        (((*((uint8_t *)(B)+0)) = (uint8_t)((uint32_t)(D) >> 24)),              \
        !            48:         ((*((uint8_t *)(B)+1)) = (uint8_t)((uint32_t)(D) >> 16)),              \
        !            49:         ((*((uint8_t *)(B)+2)) = (uint8_t)((uint32_t)(D) >> 8)),               \
        !            50:         ((*((uint8_t *)(B)+3)) = (uint8_t)((uint32_t)(D) >> 0)))
        !            51: #define DSET48(B,D)                                                                                                    \
        !            52:        (((*((uint8_t *)(B)+0)) = (uint8_t)((uint64_t)(D) >> 40)),              \
        !            53:         ((*((uint8_t *)(B)+1)) = (uint8_t)((uint64_t)(D) >> 32)),              \
        !            54:         ((*((uint8_t *)(B)+2)) = (uint8_t)((uint64_t)(D) >> 24)),              \
        !            55:         ((*((uint8_t *)(B)+3)) = (uint8_t)((uint64_t)(D) >> 16)),              \
        !            56:         ((*((uint8_t *)(B)+4)) = (uint8_t)((uint64_t)(D) >> 8)),               \
        !            57:         ((*((uint8_t *)(B)+5)) = (uint8_t)((uint64_t)(D) >> 0)))
        !            58: #define DSET64(B,D)                                                                                                    \
        !            59:        (((*((uint8_t *)(B)+0)) = (uint8_t)((uint64_t)(D) >> 56)),              \
        !            60:         ((*((uint8_t *)(B)+1)) = (uint8_t)((uint64_t)(D) >> 48)),              \
        !            61:         ((*((uint8_t *)(B)+2)) = (uint8_t)((uint64_t)(D) >> 40)),              \
        !            62:         ((*((uint8_t *)(B)+3)) = (uint8_t)((uint64_t)(D) >> 32)),              \
        !            63:         ((*((uint8_t *)(B)+4)) = (uint8_t)((uint64_t)(D) >> 24)),              \
        !            64:         ((*((uint8_t *)(B)+5)) = (uint8_t)((uint64_t)(D) >> 16)),              \
        !            65:         ((*((uint8_t *)(B)+6)) = (uint8_t)((uint64_t)(D) >> 8)),               \
        !            66:         ((*((uint8_t *)(B)+7)) = (uint8_t)((uint64_t)(D) >> 0)))
        !            67: #define DGET8(B)    (*((uint8_t *)(B)))
        !            68: #define DGET16(B)                                                                                      \
        !            69:        (((  (uint16_t) *((uint8_t *)(B)+0)) << 8)                              \
        !            70:         | (((uint16_t) *((uint8_t *)(B)+1)) << 0))
        !            71: #define DGET24(B)                                                                                      \
        !            72:        (((  (uint32_t) *((uint8_t *)(B)+0)) << 16)                             \
        !            73:         | (((uint32_t) *((uint8_t *)(B)+1)) << 8)                              \
        !            74:         | (((uint32_t) *((uint8_t *)(B)+2)) << 0))
        !            75: #define DGET32(B)                                                                                      \
        !            76:        (((  (uint32_t) *((uint8_t *)(B)+0)) << 24)                             \
        !            77:         | (((uint32_t) *((uint8_t *)(B)+1)) << 16)                             \
        !            78:         | (((uint32_t) *((uint8_t *)(B)+2)) << 8)                              \
        !            79:         | (((uint32_t) *((uint8_t *)(B)+3)) << 0))
        !            80: #define DGET48(B)                                                                                      \
        !            81:        (((  (uint64_t) *((uint8_t *)(B)+0)) << 40)                             \
        !            82:         | (((uint64_t) *((uint8_t *)(B)+1)) << 32)                             \
        !            83:         | (((uint64_t) *((uint8_t *)(B)+2)) << 24)                             \
        !            84:         | (((uint64_t) *((uint8_t *)(B)+3)) << 16)                             \
        !            85:         | (((uint64_t) *((uint8_t *)(B)+4)) << 8)                              \
        !            86:         | (((uint64_t) *((uint8_t *)(B)+5)) << 0))
        !            87: #define DGET64(B)                                                                                      \
        !            88:        (((  (uint64_t) *((uint8_t *)(B)+0)) << 56)                             \
        !            89:         | (((uint64_t) *((uint8_t *)(B)+1)) << 48)                             \
        !            90:         | (((uint64_t) *((uint8_t *)(B)+2)) << 40)                             \
        !            91:         | (((uint64_t) *((uint8_t *)(B)+3)) << 32)                             \
        !            92:         | (((uint64_t) *((uint8_t *)(B)+4)) << 24)                             \
        !            93:         | (((uint64_t) *((uint8_t *)(B)+5)) << 16)                             \
        !            94:         | (((uint64_t) *((uint8_t *)(B)+6)) << 8)                              \
        !            95:         | (((uint64_t) *((uint8_t *)(B)+7)) << 0))
        !            96: #else /* ISTGT_USE_MACRO_EXPAND */
        !            97: //#define DSET8(B,D)  (istgt_dset8((B),(D)))
        !            98: #define DSET8(B,D)  (*((uint8_t *)(B)) = (uint8_t)(D))
        !            99: #define DSET16(B,D) (istgt_dset16((B),(D)))
        !           100: #define DSET24(B,D) (istgt_dset24((B),(D)))
        !           101: #define DSET32(B,D) (istgt_dset32((B),(D)))
        !           102: #define DSET48(B,D) (istgt_dset48((B),(D)))
        !           103: #define DSET64(B,D) (istgt_dset64((B),(D)))
        !           104: //#define DGET8(B)    (istgt_dget8((B)))
        !           105: #define DGET8(B)    (*((uint8_t *)(B)))
        !           106: #define DGET16(B)   (istgt_dget16((B)))
        !           107: #define DGET24(B)   (istgt_dget24((B)))
        !           108: #define DGET32(B)   (istgt_dget32((B)))
        !           109: #define DGET48(B)   (istgt_dget48((B)))
        !           110: #define DGET64(B)   (istgt_dget64((B)))
        !           111: #endif /* ISTGT_USE_MACRO_EXPAND */
        !           112: 
        !           113: #define DMIN8(A,B)  ((uint8_t)  ((A) > (B) ? (B) : (A)))
        !           114: #define DMIN16(A,B) ((uint16_t) ((A) > (B) ? (B) : (A)))
        !           115: #define DMIN24(A,B) ((uint32_t) ((A) > (B) ? (B) : (A)))
        !           116: #define DMIN32(A,B) ((uint32_t) ((A) > (B) ? (B) : (A)))
        !           117: #define DMIN48(A,B) ((uint64_t) ((A) > (B) ? (B) : (A)))
        !           118: #define DMIN64(A,B) ((uint64_t) ((A) > (B) ? (B) : (A)))
        !           119: #define DMAX8(A,B)  ((uint8_t)  ((A) > (B) ? (A) : (B)))
        !           120: #define DMAX16(A,B) ((uint16_t) ((A) > (B) ? (A) : (B)))
        !           121: #define DMAX24(A,B) ((uint32_t) ((A) > (B) ? (A) : (B)))
        !           122: #define DMAX32(A,B) ((uint32_t) ((A) > (B) ? (A) : (B)))
        !           123: #define DMAX48(A,B) ((uint64_t) ((A) > (B) ? (A) : (B)))
        !           124: #define DMAX64(A,B) ((uint64_t) ((A) > (B) ? (A) : (B)))
        !           125: 
        !           126: #define BSHIFTNW(N,W) (((W) > 0) ? (((N) > ((W)-1)) ? ((N) - ((W)-1)) : 0) : 0)
        !           127: #define BMASKW(W) (((W) > 0) ? (~((~0) << (W))) : 0)
        !           128: 
        !           129: #define BDSET8W(B,D,N,W) DSET8((B),(((D)&BMASKW((W)))<<BSHIFTNW((N),(W))))
        !           130: #define BDADD8W(B,D,N,W) DSET8((B),((DGET8((B)) & ~(BMASKW((W)) << BSHIFTNW((N),(W)))) | (uint8_t) (((D) & BMASKW((W))) << BSHIFTNW((N),(W)))))
        !           131: #define BSET8W(B,N,W) (*((uint8_t *)(B)) |= (uint8_t) (BMASKW((W))) << BSHIFTNW((N),(W)))
        !           132: #define BCLR8W(B,N,W) (*((uint8_t *)(B)) &= (uint8_t) (~(BMASKW((W))) << BSHIFTNW((N),(W))))
        !           133: #define BGET8W(B,N,W) ((*((uint8_t *)(B)) >> BSHIFTNW((N),(W))) & BMASKW((W)))
        !           134: 
        !           135: #define BDSET8(B,D,N) (BDSET8W((B),(D),(N),1))
        !           136: #define BDADD8(B,D,N) (BDADD8W((B),(D),(N),1))
        !           137: #define BSET8(B,N) (BSET8W((B),(N),1))
        !           138: #define BCLR8(B,N) (BCLR8W((B),(N),1))
        !           139: #define BGET8(B,N) (BGET8W((B),(N),1))
        !           140: 
        !           141: /* memory allocate */
        !           142: void *xmalloc(size_t size);
        !           143: void *xrealloc(void *p, size_t size);
        !           144: void xfree(void *p);
        !           145: char *xstrdup(const char *s);
        !           146: 
        !           147: /* string functions */
        !           148: char *strlwr(char *s);
        !           149: char *strupr(char *s);
        !           150: char *strsepq(char **stringp, const char *delim);
        !           151: char *trim_string(char *s);
        !           152: char *escape_string(const char *s);
        !           153: #ifndef HAVE_STRLCPY
        !           154: size_t strlcpy(char *dst, const char *src, size_t size);
        !           155: #endif /* HAVE_STRLCPY */
        !           156: 
        !           157: /* convert from/to LBA/MSF */
        !           158: uint32_t istgt_msf2lba(uint32_t msf);
        !           159: uint32_t istgt_lba2msf(uint32_t lba);
        !           160: 
        !           161: /* network byte order operation */
        !           162: uint8_t istgt_dget8(const uint8_t *data);
        !           163: void istgt_dset8(uint8_t *data, uint32_t value);
        !           164: uint16_t istgt_dget16(const uint8_t *data);
        !           165: void istgt_dset16(uint8_t *data, uint32_t value);
        !           166: uint32_t istgt_dget24(const uint8_t *data);
        !           167: void istgt_dset24(uint8_t *data, uint32_t value);
        !           168: uint32_t istgt_dget32(const uint8_t *data);
        !           169: void istgt_dset32(uint8_t *data, uint32_t value);
        !           170: uint64_t istgt_dget48(const uint8_t *data);
        !           171: void istgt_dset48(uint8_t *data, uint64_t value);
        !           172: uint64_t istgt_dget64(const uint8_t *data);
        !           173: void istgt_dset64(uint8_t *data, uint64_t value);
        !           174: 
        !           175: /* random value generation */
        !           176: void istgt_gen_random(uint8_t *buf, size_t len);
        !           177: #ifndef HAVE_SRANDOMDEV
        !           178: void srandomdev(void);
        !           179: #endif /* HAVE_SRANDOMDEV */
        !           180: #ifndef HAVE_ARC4RANDOM
        !           181: uint32_t arc4random(void);
        !           182: #endif /* HAVE_ARC4RANDOM */
        !           183: 
        !           184: /* convert from/to bin/hex */
        !           185: int istgt_bin2hex(char *buf, size_t len, const uint8_t *data, size_t data_len);
        !           186: int istgt_hex2bin(uint8_t *data, size_t data_len, const char *str);
        !           187: 
        !           188: /* other functions */
        !           189: void istgt_dump(const char *label, const uint8_t *buf, size_t len);
        !           190: void istgt_fdump(FILE *fp, const char *label, const uint8_t *buf, size_t len);
        !           191: void istgt_yield(void);
        !           192: 
        !           193: #endif /* ISTGT_MISC_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>