Diff for /libelwix/src/pack.c between versions 1.6 and 1.6.2.4

version 1.6, 2014/02/11 01:06:21 version 1.6.2.4, 2014/02/21 13:28:38
Line 100  rpack_destroy(rpack_t ** __restrict rp) Line 100  rpack_destroy(rpack_t ** __restrict rp)
 }  }
   
 /*  /*
    * rpack_attach() - Attach dynamic allocating buffer at packet
    *
    * @rp = raw packet;
    * @len = allocate bytes
    * return: -1 error or 0 ok, should be detached with rpack_detach() 
    *                              before call rpack_destroy() after use!
    */
   int
   rpack_attach(rpack_t * __restrict rp, size_t len)
   {
           if (!rp)
                   return -1;
   
           rp->r_buf = e_malloc(len);
           if (!rp->r_buf) {
                   RPACK_FREE(rp);
                   return -1;
           } else
                   rp->r_len = len;
           rp->r_next = rp->r_buf;
   
           return 0;
   }
   
   /*
    * rpack_resize() - Resize dynamic allocated buffer at packet
    *
    * @rp = raw packet
    * @newlen = resize buffer to bytes
    * return: -1 error or 0 ok, should be detached with rpack_detach() 
    *                              before call rpack_destroy() after use!
    */
   int
   rpack_resize(rpack_t * __restrict rp, size_t newlen)
   {
           void *buf = NULL;
   
           if (!rp)
                   return -1;
   
           buf = e_realloc(rp->r_buf, newlen);
           if (!buf)
                   return -1;
           else {
                   rp->r_buf = buf;
                   rp->r_len = newlen;
           }
   
           if (rp->r_next > (rp->r_buf + rp->r_len))
                   rp->r_next = rp->r_buf;
   
           return 0;
   }
   
   /*
    * rpack_detach() - Detach and free dynamic allocated buffer from packet
    *
    * @rp = raw packet
    * return: none
    */
   void
   rpack_detach(rpack_t * __restrict rp)
   {
           if (!rp)
                   return;
   
           e_free(rp->r_buf);
           RPACK_FREE(rp);
   }
   
   /*
  * rpack_align_and_reserve() - Align & reserve space   * rpack_align_and_reserve() - Align & reserve space
  *   *
  * @rp = raw buffer   * @rp = raw buffer
Line 154  rpack_uint8(rpack_t * __restrict rp, uint8_t * __restr Line 225  rpack_uint8(rpack_t * __restrict rp, uint8_t * __restr
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint16_t  uint16_t
Line 169  rpack_uint16(rpack_t * __restrict rp, uint16_t * __res Line 240  rpack_uint16(rpack_t * __restrict rp, uint16_t * __res
         if (!(next = rpack_align_and_reserve(rp, sizeof(uint16_t))))          if (!(next = rpack_align_and_reserve(rp, sizeof(uint16_t))))
                 return (uint16_t) -1;                  return (uint16_t) -1;
   
        u = be ? EXTRACT_BE_16(next) : EXTRACT_LE_16(next);        if (be < 0)
                 u = EXTRACT_LE_16(next);
         else if (be > 0)
                 u = EXTRACT_BE_16(next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_16(next);
 #else
                 u = EXTRACT_LE_16(next);
 #endif
         if (n)          if (n)
                 RPACK_SET_16(next, n);                  RPACK_SET_16(next, n);
   
Line 182  rpack_uint16(rpack_t * __restrict rp, uint16_t * __res Line 262  rpack_uint16(rpack_t * __restrict rp, uint16_t * __res
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint32_t  uint32_t
Line 197  rpack_uint24(rpack_t * __restrict rp, uint32_t * __res Line 277  rpack_uint24(rpack_t * __restrict rp, uint32_t * __res
         if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t))))          if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t))))
                 return (uint32_t) -1;                  return (uint32_t) -1;
   
        u = be ? EXTRACT_BE_24(next) : EXTRACT_LE_24(next);        if (be < 0)
                 u = EXTRACT_LE_24(next);
         else if (be > 0)
                 u = EXTRACT_BE_24(next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_24(next);
 #else
                 u = EXTRACT_LE_24(next);
 #endif
         if (n)          if (n)
                 RPACK_SET_24(next, n);                  RPACK_SET_24(next, n);
   
Line 210  rpack_uint24(rpack_t * __restrict rp, uint32_t * __res Line 299  rpack_uint24(rpack_t * __restrict rp, uint32_t * __res
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint32_t  uint32_t
Line 225  rpack_uint32(rpack_t * __restrict rp, uint32_t * __res Line 314  rpack_uint32(rpack_t * __restrict rp, uint32_t * __res
         if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t))))          if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t))))
                 return (uint32_t) -1;                  return (uint32_t) -1;
   
        u = be ? EXTRACT_BE_32(next) : EXTRACT_LE_32(next);        if (be < 0)
                 u = EXTRACT_LE_32(next);
         else if (be > 0)
                 u = EXTRACT_BE_32(next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_32(next);
 #else
                 u = EXTRACT_LE_32(next);
 #endif
         if (n)          if (n)
                 RPACK_SET_32(next, n);                  RPACK_SET_32(next, n);
   
Line 238  rpack_uint32(rpack_t * __restrict rp, uint32_t * __res Line 336  rpack_uint32(rpack_t * __restrict rp, uint32_t * __res
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint64_t  uint64_t
Line 253  rpack_uint64(rpack_t * __restrict rp, uint64_t * __res Line 351  rpack_uint64(rpack_t * __restrict rp, uint64_t * __res
         if (!(next = rpack_align_and_reserve(rp, sizeof(uint64_t))))          if (!(next = rpack_align_and_reserve(rp, sizeof(uint64_t))))
                 return (uint64_t) -1;                  return (uint64_t) -1;
   
        u = be ? EXTRACT_BE_64(next) : EXTRACT_LE_64(next);        if (be < 0)
                 u = EXTRACT_LE_64(next);
         else if (be > 0)
                 u = EXTRACT_BE_64(next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_64(next);
 #else
                 u = EXTRACT_LE_64(next);
 #endif
         if (n)          if (n)
                 RPACK_SET_64(next, n);                  RPACK_SET_64(next, n);
   
Line 331  rpack_rdata(rpack_t * __restrict rp, void * __restrict Line 438  rpack_rdata(rpack_t * __restrict rp, void * __restrict
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint16_t  uint16_t
Line 345  rpack_ruint16(rpack_t * __restrict rp, uint16_t * __re Line 452  rpack_ruint16(rpack_t * __restrict rp, uint16_t * __re
         if (sizeof(uint16_t) + rp->r_next - rp->r_buf > rp->r_len)          if (sizeof(uint16_t) + rp->r_next - rp->r_buf > rp->r_len)
                 return (uint16_t) -1;                  return (uint16_t) -1;
   
        u = be ? EXTRACT_BE_16(rp->r_next) : EXTRACT_LE_16(rp->r_next);        if (be < 0)
                 u = EXTRACT_LE_16(rp->r_next);
         else if (be > 0)
                 u = EXTRACT_BE_16(rp->r_next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_16(rp->r_next);
 #else
                 u = EXTRACT_LE_16(rp->r_next);
 #endif
         if (n)          if (n)
                 RPACK_SET_16(rp->r_next, n);                  RPACK_SET_16(rp->r_next, n);
   
Line 358  rpack_ruint16(rpack_t * __restrict rp, uint16_t * __re Line 474  rpack_ruint16(rpack_t * __restrict rp, uint16_t * __re
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint32_t  uint32_t
Line 372  rpack_ruint24(rpack_t * __restrict rp, uint32_t * __re Line 488  rpack_ruint24(rpack_t * __restrict rp, uint32_t * __re
         if (sizeof(uint32_t) + rp->r_next - rp->r_buf > rp->r_len)          if (sizeof(uint32_t) + rp->r_next - rp->r_buf > rp->r_len)
                 return (uint32_t) -1;                  return (uint32_t) -1;
   
        u = be ? EXTRACT_BE_24(rp->r_next) : EXTRACT_LE_24(rp->r_next);        if (be < 0)
                 u = EXTRACT_LE_24(rp->r_next);
         else if (be > 0)
                 u = EXTRACT_BE_24(rp->r_next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_24(rp->r_next);
 #else
                 u = EXTRACT_LE_24(rp->r_next);
 #endif
         if (n)          if (n)
                 RPACK_SET_24(rp->r_next, n);                  RPACK_SET_24(rp->r_next, n);
   
Line 385  rpack_ruint24(rpack_t * __restrict rp, uint32_t * __re Line 510  rpack_ruint24(rpack_t * __restrict rp, uint32_t * __re
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint32_t  uint32_t
Line 399  rpack_ruint32(rpack_t * __restrict rp, uint32_t * __re Line 524  rpack_ruint32(rpack_t * __restrict rp, uint32_t * __re
         if (sizeof(uint32_t) + rp->r_next - rp->r_buf > rp->r_len)          if (sizeof(uint32_t) + rp->r_next - rp->r_buf > rp->r_len)
                 return (uint32_t) -1;                  return (uint32_t) -1;
   
        u = be ? EXTRACT_BE_32(rp->r_next) : EXTRACT_LE_32(rp->r_next);        if (be < 0)
                 u = EXTRACT_LE_32(rp->r_next);
         else if (be > 0)
                 u = EXTRACT_BE_32(rp->r_next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_32(rp->r_next);
 #else
                 u = EXTRACT_LE_32(rp->r_next);
 #endif
         if (n)          if (n)
                 RPACK_SET_32(rp->r_next, n);                  RPACK_SET_32(rp->r_next, n);
   
Line 412  rpack_ruint32(rpack_t * __restrict rp, uint32_t * __re Line 546  rpack_ruint32(rpack_t * __restrict rp, uint32_t * __re
  *   *
  * @rp = raw buffer   * @rp = raw buffer
  * @n = set value if !=NULL   * @n = set value if !=NULL
 * @be = extract in big-endian * @be = byte order [-1 little endian, 1 big endian and 0 host order]
  * return: -1 error or get value   * return: -1 error or get value
  */   */
 uint64_t  uint64_t
Line 426  rpack_ruint64(rpack_t * __restrict rp, uint64_t * __re Line 560  rpack_ruint64(rpack_t * __restrict rp, uint64_t * __re
         if (sizeof(uint64_t) + rp->r_next - rp->r_buf > rp->r_len)          if (sizeof(uint64_t) + rp->r_next - rp->r_buf > rp->r_len)
                 return (uint64_t) -1;                  return (uint64_t) -1;
   
        u = be ? EXTRACT_BE_64(rp->r_next) : EXTRACT_LE_64(rp->r_next);        if (be < 0)
                 u = EXTRACT_LE_64(rp->r_next);
         else if (be > 0)
                 u = EXTRACT_BE_64(rp->r_next);
         else
 #if BYTE_ORDER == BIG_ENDIAN
                 u = EXTRACT_BE_64(rp->r_next);
 #else
                 u = EXTRACT_LE_64(rp->r_next);
 #endif
         if (n)          if (n)
                 RPACK_SET_64(rp->r_next, n);                  RPACK_SET_64(rp->r_next, n);
   
         rp->r_next += sizeof(uint64_t);          rp->r_next += sizeof(uint64_t);
         return u;          return u;
   }
   
   /*
    * rpack_next() - Get and set current position
    *
    * @rp = raw packet
    * @after_len = move aligned current position after length
    * return: NULL error or current position
    */
   uint8_t *
   rpack_next(rpack_t * __restrict rp, size_t after_len)
   {
           uint8_t *cur = NULL, *next = NULL;
   
           if (!RPACK_SANITY(rp))
                   return NULL;
           /* No space left */
           if (!(next = rpack_align_and_reserve(rp, after_len)))
                   return NULL;
   
           cur = rp->r_next;
   
           rp->r_next = next + after_len;
           return cur;
   }
   
   /*
    * rpack_rnext() - Get and set raw current position
    *
    * @rp = raw packet
    * @after_len = !=0 move current position after length
    * return: NULL error or raw current position
    */
   uint8_t *
   rpack_rnext(rpack_t * __restrict rp, size_t after_len)
   {
           uint8_t *next = NULL;
   
           if (!RPACK_SANITY(rp))
                   return NULL;
           /* No space left */
           if (after_len + rp->r_next - rp->r_buf > rp->r_len)
                   return NULL;
   
           next = rp->r_next;
   
           rp->r_next += after_len;
           return next;
 }  }

Removed from v.1.6  
changed lines
  Added in v.1.6.2.4


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