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 1475438200 Lines: 53 53 100.0 %
Date: 2016-10-02 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             : struct wpabuf * wpabuf_parse_bin(const char *buf);
      41             : 
      42             : 
      43             : /**
      44             :  * wpabuf_size - Get the currently allocated size of a wpabuf buffer
      45             :  * @buf: wpabuf buffer
      46             :  * Returns: Currently allocated size of the buffer
      47             :  */
      48        5114 : static inline size_t wpabuf_size(const struct wpabuf *buf)
      49             : {
      50        5114 :         return buf->size;
      51             : }
      52             : 
      53             : /**
      54             :  * wpabuf_len - Get the current length of a wpabuf buffer data
      55             :  * @buf: wpabuf buffer
      56             :  * Returns: Currently used length of the buffer
      57             :  */
      58     2996469 : static inline size_t wpabuf_len(const struct wpabuf *buf)
      59             : {
      60     2996469 :         return buf->used;
      61             : }
      62             : 
      63             : /**
      64             :  * wpabuf_tailroom - Get size of available tail room in the end of the buffer
      65             :  * @buf: wpabuf buffer
      66             :  * Returns: Tail room (in bytes) of available space in the end of the buffer
      67             :  */
      68      260650 : static inline size_t wpabuf_tailroom(const struct wpabuf *buf)
      69             : {
      70      260650 :         return buf->size - buf->used;
      71             : }
      72             : 
      73             : /**
      74             :  * wpabuf_head - Get pointer to the head of the buffer data
      75             :  * @buf: wpabuf buffer
      76             :  * Returns: Pointer to the head of the buffer data
      77             :  */
      78      926562 : static inline const void * wpabuf_head(const struct wpabuf *buf)
      79             : {
      80      926562 :         return buf->buf;
      81             : }
      82             : 
      83      349767 : static inline const u8 * wpabuf_head_u8(const struct wpabuf *buf)
      84             : {
      85      349767 :         return (const u8 *) wpabuf_head(buf);
      86             : }
      87             : 
      88             : /**
      89             :  * wpabuf_mhead - Get modifiable pointer to the head of the buffer data
      90             :  * @buf: wpabuf buffer
      91             :  * Returns: Pointer to the head of the buffer data
      92             :  */
      93     3112172 : static inline void * wpabuf_mhead(struct wpabuf *buf)
      94             : {
      95     3112172 :         return buf->buf;
      96             : }
      97             : 
      98     3075191 : static inline u8 * wpabuf_mhead_u8(struct wpabuf *buf)
      99             : {
     100     3075191 :         return (u8 *) wpabuf_mhead(buf);
     101             : }
     102             : 
     103      468463 : static inline void wpabuf_put_u8(struct wpabuf *buf, u8 data)
     104             : {
     105      468463 :         u8 *pos = (u8 *) wpabuf_put(buf, 1);
     106      468463 :         *pos = data;
     107      468463 : }
     108             : 
     109       36138 : static inline void wpabuf_put_le16(struct wpabuf *buf, u16 data)
     110             : {
     111       36138 :         u8 *pos = (u8 *) wpabuf_put(buf, 2);
     112       36138 :         WPA_PUT_LE16(pos, data);
     113       36138 : }
     114             : 
     115         374 : static inline void wpabuf_put_le32(struct wpabuf *buf, u32 data)
     116             : {
     117         374 :         u8 *pos = (u8 *) wpabuf_put(buf, 4);
     118         374 :         WPA_PUT_LE32(pos, data);
     119         374 : }
     120             : 
     121      473054 : static inline void wpabuf_put_be16(struct wpabuf *buf, u16 data)
     122             : {
     123      473054 :         u8 *pos = (u8 *) wpabuf_put(buf, 2);
     124      473054 :         WPA_PUT_BE16(pos, data);
     125      473054 : }
     126             : 
     127       34548 : static inline void wpabuf_put_be24(struct wpabuf *buf, u32 data)
     128             : {
     129       34548 :         u8 *pos = (u8 *) wpabuf_put(buf, 3);
     130       34548 :         WPA_PUT_BE24(pos, data);
     131       34548 : }
     132             : 
     133       42487 : static inline void wpabuf_put_be32(struct wpabuf *buf, u32 data)
     134             : {
     135       42487 :         u8 *pos = (u8 *) wpabuf_put(buf, 4);
     136       42487 :         WPA_PUT_BE32(pos, data);
     137       42487 : }
     138             : 
     139      531775 : static inline void wpabuf_put_data(struct wpabuf *buf, const void *data,
     140             :                                    size_t len)
     141             : {
     142      531775 :         if (data)
     143      528090 :                 os_memcpy(wpabuf_put(buf, len), data, len);
     144      531775 : }
     145             : 
     146       35831 : static inline void wpabuf_put_buf(struct wpabuf *dst,
     147             :                                   const struct wpabuf *src)
     148             : {
     149       35831 :         wpabuf_put_data(dst, wpabuf_head(src), wpabuf_len(src));
     150       35831 : }
     151             : 
     152       11580 : static inline void wpabuf_set(struct wpabuf *buf, const void *data, size_t len)
     153             : {
     154       11580 :         buf->buf = (u8 *) data;
     155       11580 :         buf->flags = WPABUF_FLAG_EXT_DATA;
     156       11580 :         buf->size = buf->used = len;
     157       11580 : }
     158             : 
     159       33936 : static inline void wpabuf_put_str(struct wpabuf *dst, const char *str)
     160             : {
     161       33936 :         wpabuf_put_data(dst, str, os_strlen(str));
     162       33936 : }
     163             : 
     164             : #endif /* WPABUF_H */

Generated by: LCOV version 1.10