LCOV - code coverage report
Current view: top level - utils - wpabuf.h (source / functions) Hit Total Coverage
Test: hostapd hwsim test run 1412854115 Lines: 49 49 100.0 %
Date: 2014-10-09 Functions: 16 16 100.0 %

          Line data    Source code
       1             : /*
       2             :  * Dynamic data buffer
       3             :  * Copyright (c) 2007-2012, Jouni Malinen <j@w1.fi>
       4             :  *
       5             :  * This software may be distributed under the terms of the BSD license.
       6             :  * See README for more details.
       7             :  */
       8             : 
       9             : #ifndef WPABUF_H
      10             : #define WPABUF_H
      11             : 
      12             : /* wpabuf::buf is a pointer to external data */
      13             : #define WPABUF_FLAG_EXT_DATA BIT(0)
      14             : 
      15             : /*
      16             :  * Internal data structure for wpabuf. Please do not touch this directly from
      17             :  * elsewhere. This is only defined in header file to allow inline functions
      18             :  * from this file to access data.
      19             :  */
      20             : struct wpabuf {
      21             :         size_t size; /* total size of the allocated buffer */
      22             :         size_t used; /* length of data in the buffer */
      23             :         u8 *buf; /* pointer to the head of the buffer */
      24             :         unsigned int flags;
      25             :         /* optionally followed by the allocated buffer */
      26             : };
      27             : 
      28             : 
      29             : int wpabuf_resize(struct wpabuf **buf, size_t add_len);
      30             : struct wpabuf * wpabuf_alloc(size_t len);
      31             : struct wpabuf * wpabuf_alloc_ext_data(u8 *data, size_t len);
      32             : struct wpabuf * wpabuf_alloc_copy(const void *data, size_t len);
      33             : struct wpabuf * wpabuf_dup(const struct wpabuf *src);
      34             : void wpabuf_free(struct wpabuf *buf);
      35             : void * wpabuf_put(struct wpabuf *buf, size_t len);
      36             : struct wpabuf * wpabuf_concat(struct wpabuf *a, struct wpabuf *b);
      37             : struct wpabuf * wpabuf_zeropad(struct wpabuf *buf, size_t len);
      38             : void wpabuf_printf(struct wpabuf *buf, char *fmt, ...) PRINTF_FORMAT(2, 3);
      39             : 
      40             : 
      41             : /**
      42             :  * wpabuf_size - Get the currently allocated size of a wpabuf buffer
      43             :  * @buf: wpabuf buffer
      44             :  * Returns: Currently allocated size of the buffer
      45             :  */
      46          65 : static inline size_t wpabuf_size(const struct wpabuf *buf)
      47             : {
      48          65 :         return buf->size;
      49             : }
      50             : 
      51             : /**
      52             :  * wpabuf_len - Get the current length of a wpabuf buffer data
      53             :  * @buf: wpabuf buffer
      54             :  * Returns: Currently used length of the buffer
      55             :  */
      56      254184 : static inline size_t wpabuf_len(const struct wpabuf *buf)
      57             : {
      58      254184 :         return buf->used;
      59             : }
      60             : 
      61             : /**
      62             :  * wpabuf_tailroom - Get size of available tail room in the end of the buffer
      63             :  * @buf: wpabuf buffer
      64             :  * Returns: Tail room (in bytes) of available space in the end of the buffer
      65             :  */
      66       36869 : static inline size_t wpabuf_tailroom(const struct wpabuf *buf)
      67             : {
      68       36869 :         return buf->size - buf->used;
      69             : }
      70             : 
      71             : /**
      72             :  * wpabuf_head - Get pointer to the head of the buffer data
      73             :  * @buf: wpabuf buffer
      74             :  * Returns: Pointer to the head of the buffer data
      75             :  */
      76      103238 : static inline const void * wpabuf_head(const struct wpabuf *buf)
      77             : {
      78      103238 :         return buf->buf;
      79             : }
      80             : 
      81       47324 : static inline const u8 * wpabuf_head_u8(const struct wpabuf *buf)
      82             : {
      83       47324 :         return wpabuf_head(buf);
      84             : }
      85             : 
      86             : /**
      87             :  * wpabuf_mhead - Get modifiable pointer to the head of the buffer data
      88             :  * @buf: wpabuf buffer
      89             :  * Returns: Pointer to the head of the buffer data
      90             :  */
      91      261442 : static inline void * wpabuf_mhead(struct wpabuf *buf)
      92             : {
      93      261442 :         return buf->buf;
      94             : }
      95             : 
      96      258764 : static inline u8 * wpabuf_mhead_u8(struct wpabuf *buf)
      97             : {
      98      258764 :         return wpabuf_mhead(buf);
      99             : }
     100             : 
     101       19931 : static inline void wpabuf_put_u8(struct wpabuf *buf, u8 data)
     102             : {
     103       19931 :         u8 *pos = wpabuf_put(buf, 1);
     104       19931 :         *pos = data;
     105       19931 : }
     106             : 
     107        2778 : static inline void wpabuf_put_le16(struct wpabuf *buf, u16 data)
     108             : {
     109        2778 :         u8 *pos = wpabuf_put(buf, 2);
     110        2778 :         WPA_PUT_LE16(pos, data);
     111        2778 : }
     112             : 
     113             : static inline void wpabuf_put_le32(struct wpabuf *buf, u32 data)
     114             : {
     115             :         u8 *pos = wpabuf_put(buf, 4);
     116             :         WPA_PUT_LE32(pos, data);
     117             : }
     118             : 
     119       18760 : static inline void wpabuf_put_be16(struct wpabuf *buf, u16 data)
     120             : {
     121       18760 :         u8 *pos = wpabuf_put(buf, 2);
     122       18760 :         WPA_PUT_BE16(pos, data);
     123       18760 : }
     124             : 
     125        1937 : static inline void wpabuf_put_be24(struct wpabuf *buf, u32 data)
     126             : {
     127        1937 :         u8 *pos = wpabuf_put(buf, 3);
     128        1937 :         WPA_PUT_BE24(pos, data);
     129        1937 : }
     130             : 
     131        1495 : static inline void wpabuf_put_be32(struct wpabuf *buf, u32 data)
     132             : {
     133        1495 :         u8 *pos = wpabuf_put(buf, 4);
     134        1495 :         WPA_PUT_BE32(pos, data);
     135        1495 : }
     136             : 
     137       66399 : static inline void wpabuf_put_data(struct wpabuf *buf, const void *data,
     138             :                                    size_t len)
     139             : {
     140       66399 :         if (data)
     141       65682 :                 os_memcpy(wpabuf_put(buf, len), data, len);
     142       66399 : }
     143             : 
     144        1354 : static inline void wpabuf_put_buf(struct wpabuf *dst,
     145             :                                   const struct wpabuf *src)
     146             : {
     147        1354 :         wpabuf_put_data(dst, wpabuf_head(src), wpabuf_len(src));
     148        1354 : }
     149             : 
     150         480 : static inline void wpabuf_set(struct wpabuf *buf, const void *data, size_t len)
     151             : {
     152         480 :         buf->buf = (u8 *) data;
     153         480 :         buf->flags = WPABUF_FLAG_EXT_DATA;
     154         480 :         buf->size = buf->used = len;
     155         480 : }
     156             : 
     157        5939 : static inline void wpabuf_put_str(struct wpabuf *dst, const char *str)
     158             : {
     159        5939 :         wpabuf_put_data(dst, str, os_strlen(str));
     160        5939 : }
     161             : 
     162             : #endif /* WPABUF_H */

Generated by: LCOV version 1.10