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 1401264779 Lines: 53 53 100.0 %
Date: 2014-05-28 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_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        1421 : static inline size_t wpabuf_size(const struct wpabuf *buf)
      47             : {
      48        1421 :         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      882315 : static inline size_t wpabuf_len(const struct wpabuf *buf)
      57             : {
      58      882315 :         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       69967 : static inline size_t wpabuf_tailroom(const struct wpabuf *buf)
      67             : {
      68       69967 :         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      223252 : static inline const void * wpabuf_head(const struct wpabuf *buf)
      77             : {
      78      223252 :         return buf->buf;
      79             : }
      80             : 
      81       67683 : static inline const u8 * wpabuf_head_u8(const struct wpabuf *buf)
      82             : {
      83       67683 :         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      820596 : static inline void * wpabuf_mhead(struct wpabuf *buf)
      92             : {
      93      820596 :         return buf->buf;
      94             : }
      95             : 
      96      811766 : static inline u8 * wpabuf_mhead_u8(struct wpabuf *buf)
      97             : {
      98      811766 :         return wpabuf_mhead(buf);
      99             : }
     100             : 
     101      155928 : static inline void wpabuf_put_u8(struct wpabuf *buf, u8 data)
     102             : {
     103      155928 :         u8 *pos = wpabuf_put(buf, 1);
     104      155928 :         *pos = data;
     105      155928 : }
     106             : 
     107       13109 : static inline void wpabuf_put_le16(struct wpabuf *buf, u16 data)
     108             : {
     109       13109 :         u8 *pos = wpabuf_put(buf, 2);
     110       13109 :         WPA_PUT_LE16(pos, data);
     111       13109 : }
     112             : 
     113           3 : static inline void wpabuf_put_le32(struct wpabuf *buf, u32 data)
     114             : {
     115           3 :         u8 *pos = wpabuf_put(buf, 4);
     116           3 :         WPA_PUT_LE32(pos, data);
     117           3 : }
     118             : 
     119      182189 : static inline void wpabuf_put_be16(struct wpabuf *buf, u16 data)
     120             : {
     121      182189 :         u8 *pos = wpabuf_put(buf, 2);
     122      182189 :         WPA_PUT_BE16(pos, data);
     123      182189 : }
     124             : 
     125       10988 : static inline void wpabuf_put_be24(struct wpabuf *buf, u32 data)
     126             : {
     127       10988 :         u8 *pos = wpabuf_put(buf, 3);
     128       10988 :         WPA_PUT_BE24(pos, data);
     129       10988 : }
     130             : 
     131       16306 : static inline void wpabuf_put_be32(struct wpabuf *buf, u32 data)
     132             : {
     133       16306 :         u8 *pos = wpabuf_put(buf, 4);
     134       16306 :         WPA_PUT_BE32(pos, data);
     135       16306 : }
     136             : 
     137      136230 : static inline void wpabuf_put_data(struct wpabuf *buf, const void *data,
     138             :                                    size_t len)
     139             : {
     140      136230 :         if (data)
     141      135504 :                 os_memcpy(wpabuf_put(buf, len), data, len);
     142      136230 : }
     143             : 
     144       11621 : static inline void wpabuf_put_buf(struct wpabuf *dst,
     145             :                                   const struct wpabuf *src)
     146             : {
     147       11621 :         wpabuf_put_data(dst, wpabuf_head(src), wpabuf_len(src));
     148       11621 : }
     149             : 
     150        4016 : static inline void wpabuf_set(struct wpabuf *buf, const void *data, size_t len)
     151             : {
     152        4016 :         buf->buf = (u8 *) data;
     153        4016 :         buf->flags = WPABUF_FLAG_EXT_DATA;
     154        4016 :         buf->size = buf->used = len;
     155        4016 : }
     156             : 
     157        6716 : static inline void wpabuf_put_str(struct wpabuf *dst, const char *str)
     158             : {
     159        6716 :         wpabuf_put_data(dst, str, os_strlen(str));
     160        6716 : }
     161             : 
     162             : #endif /* WPABUF_H */

Generated by: LCOV version 1.10