LCOV - code coverage report
Current view: top level - src/utils - wpabuf.h (source / functions) Hit Total Coverage
Test: wpa_supplicant/hostapd combined for hwsim test run 1426431149 Lines: 53 53 100.0 %
Date: 2015-03-15 Functions: 17 17 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_clear_free(struct wpabuf *buf);
      36             : void * wpabuf_put(struct wpabuf *buf, size_t len);
      37             : struct wpabuf * wpabuf_concat(struct wpabuf *a, struct wpabuf *b);
      38             : struct wpabuf * wpabuf_zeropad(struct wpabuf *buf, size_t len);
      39             : void wpabuf_printf(struct wpabuf *buf, char *fmt, ...) PRINTF_FORMAT(2, 3);
      40             : 
      41             : 
      42             : /**
      43             :  * wpabuf_size - Get the currently allocated size of a wpabuf buffer
      44             :  * @buf: wpabuf buffer
      45             :  * Returns: Currently allocated size of the buffer
      46             :  */
      47        1867 : static inline size_t wpabuf_size(const struct wpabuf *buf)
      48             : {
      49        1867 :         return buf->size;
      50             : }
      51             : 
      52             : /**
      53             :  * wpabuf_len - Get the current length of a wpabuf buffer data
      54             :  * @buf: wpabuf buffer
      55             :  * Returns: Currently used length of the buffer
      56             :  */
      57     1567093 : static inline size_t wpabuf_len(const struct wpabuf *buf)
      58             : {
      59     1567093 :         return buf->used;
      60             : }
      61             : 
      62             : /**
      63             :  * wpabuf_tailroom - Get size of available tail room in the end of the buffer
      64             :  * @buf: wpabuf buffer
      65             :  * Returns: Tail room (in bytes) of available space in the end of the buffer
      66             :  */
      67      141263 : static inline size_t wpabuf_tailroom(const struct wpabuf *buf)
      68             : {
      69      141263 :         return buf->size - buf->used;
      70             : }
      71             : 
      72             : /**
      73             :  * wpabuf_head - Get pointer to the head of the buffer data
      74             :  * @buf: wpabuf buffer
      75             :  * Returns: Pointer to the head of the buffer data
      76             :  */
      77      435429 : static inline const void * wpabuf_head(const struct wpabuf *buf)
      78             : {
      79      435429 :         return buf->buf;
      80             : }
      81             : 
      82      159302 : static inline const u8 * wpabuf_head_u8(const struct wpabuf *buf)
      83             : {
      84      159302 :         return wpabuf_head(buf);
      85             : }
      86             : 
      87             : /**
      88             :  * wpabuf_mhead - Get modifiable pointer to the head of the buffer data
      89             :  * @buf: wpabuf buffer
      90             :  * Returns: Pointer to the head of the buffer data
      91             :  */
      92     1565231 : static inline void * wpabuf_mhead(struct wpabuf *buf)
      93             : {
      94     1565231 :         return buf->buf;
      95             : }
      96             : 
      97     1550204 : static inline u8 * wpabuf_mhead_u8(struct wpabuf *buf)
      98             : {
      99     1550204 :         return wpabuf_mhead(buf);
     100             : }
     101             : 
     102      255336 : static inline void wpabuf_put_u8(struct wpabuf *buf, u8 data)
     103             : {
     104      255336 :         u8 *pos = wpabuf_put(buf, 1);
     105      255336 :         *pos = data;
     106      255336 : }
     107             : 
     108       21308 : static inline void wpabuf_put_le16(struct wpabuf *buf, u16 data)
     109             : {
     110       21308 :         u8 *pos = wpabuf_put(buf, 2);
     111       21308 :         WPA_PUT_LE16(pos, data);
     112       21308 : }
     113             : 
     114         136 : static inline void wpabuf_put_le32(struct wpabuf *buf, u32 data)
     115             : {
     116         136 :         u8 *pos = wpabuf_put(buf, 4);
     117         136 :         WPA_PUT_LE32(pos, data);
     118         136 : }
     119             : 
     120      288617 : static inline void wpabuf_put_be16(struct wpabuf *buf, u16 data)
     121             : {
     122      288617 :         u8 *pos = wpabuf_put(buf, 2);
     123      288617 :         WPA_PUT_BE16(pos, data);
     124      288617 : }
     125             : 
     126       16982 : static inline void wpabuf_put_be24(struct wpabuf *buf, u32 data)
     127             : {
     128       16982 :         u8 *pos = wpabuf_put(buf, 3);
     129       16982 :         WPA_PUT_BE24(pos, data);
     130       16982 : }
     131             : 
     132       26642 : static inline void wpabuf_put_be32(struct wpabuf *buf, u32 data)
     133             : {
     134       26642 :         u8 *pos = wpabuf_put(buf, 4);
     135       26642 :         WPA_PUT_BE32(pos, data);
     136       26642 : }
     137             : 
     138      264526 : static inline void wpabuf_put_data(struct wpabuf *buf, const void *data,
     139             :                                    size_t len)
     140             : {
     141      264526 :         if (data)
     142      262900 :                 os_memcpy(wpabuf_put(buf, len), data, len);
     143      264526 : }
     144             : 
     145       18918 : static inline void wpabuf_put_buf(struct wpabuf *dst,
     146             :                                   const struct wpabuf *src)
     147             : {
     148       18918 :         wpabuf_put_data(dst, wpabuf_head(src), wpabuf_len(src));
     149       18918 : }
     150             : 
     151        5691 : static inline void wpabuf_set(struct wpabuf *buf, const void *data, size_t len)
     152             : {
     153        5691 :         buf->buf = (u8 *) data;
     154        5691 :         buf->flags = WPABUF_FLAG_EXT_DATA;
     155        5691 :         buf->size = buf->used = len;
     156        5691 : }
     157             : 
     158       16516 : static inline void wpabuf_put_str(struct wpabuf *dst, const char *str)
     159             : {
     160       16516 :         wpabuf_put_data(dst, str, os_strlen(str));
     161       16516 : }
     162             : 
     163             : #endif /* WPABUF_H */

Generated by: LCOV version 1.10