File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / miniupnpd / miniupnpc-libuv / codelength.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Sep 27 11:25:11 2023 UTC (9 months ago) by misho
Branches: miniupnpd, MAIN
CVS tags: v2_3_3p0, HEAD
Version 2.3.3p0

    1: /* $Id: codelength.h,v 1.1.1.1 2023/09/27 11:25:11 misho Exp $ */
    2: /* Project : miniupnp
    3:  * Author : Thomas BERNARD
    4:  * copyright (c) 2005-2015 Thomas Bernard
    5:  * This software is subjet to the conditions detailed in the
    6:  * provided LICENCE file. */
    7: #ifndef CODELENGTH_H_INCLUDED
    8: #define CODELENGTH_H_INCLUDED
    9: 
   10: /* Encode length by using 7bit per Byte :
   11:  * Most significant bit of each byte specifies that the
   12:  * following byte is part of the code */
   13: 
   14: /* n : unsigned
   15:  * p : unsigned char *
   16:  */
   17: #define DECODELENGTH(n, p) n = 0; \
   18:                            do { n = (n << 7) | (*p & 0x7f); } \
   19:                            while((*(p++)&0x80) && (n<(1<<25)));
   20: 
   21: /* n :    unsigned
   22:  * READ : function/macro to read one byte (unsigned char)
   23:  */
   24: #define DECODELENGTH_READ(n, READ) \
   25: 	n = 0; \
   26: 	do { \
   27: 		unsigned char c; \
   28: 		READ(c); \
   29: 		n = (n << 7) | (c & 0x07f); \
   30: 		if(!(c&0x80)) break; \
   31: 	} while(n<(1<<25));
   32: 
   33: /* n :       unsigned
   34:  * p :       unsigned char *
   35:  * p_limit : unsigned char *
   36:  */
   37: #define DECODELENGTH_CHECKLIMIT(n, p, p_limit) \
   38: 	n = 0; \
   39: 	do { \
   40: 		if((p) >= (p_limit)) break; \
   41: 		n = (n << 7) | (*(p) & 0x7f); \
   42: 	} while((*((p)++)&0x80) && (n<(1<<25)));
   43: 
   44: 
   45: /* n : unsigned
   46:  * p : unsigned char *
   47:  */
   48: #define CODELENGTH(n, p) if(n>=268435456) *(p++) = (n >> 28) | 0x80; \
   49:                          if(n>=2097152) *(p++) = (n >> 21) | 0x80; \
   50:                          if(n>=16384) *(p++) = (n >> 14) | 0x80; \
   51:                          if(n>=128) *(p++) = (n >> 7) | 0x80; \
   52:                          *(p++) = n & 0x7f;
   53: 
   54: #endif /* CODELENGTH_H_INCLUDED */

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