Remove dead code related to WDS setup
[wpasupplicant] / src / utils / wpabuf.c
index 5b50b30..c544179 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Dynamic data buffer
- * Copyright (c) 2007, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2007-2009, Jouni Malinen <j@w1.fi>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -123,3 +123,90 @@ void * wpabuf_put(struct wpabuf *buf, size_t len)
        }
        return tmp;
 }
+
+
+/**
+ * wpabuf_concat - Concatenate two buffers into a newly allocated one
+ * @a: First buffer
+ * @b: Second buffer
+ * Returns: wpabuf with concatenated a + b data or %NULL on failure
+ *
+ * Both buffers a and b will be freed regardless of the return value. Input
+ * buffers can be %NULL which is interpreted as an empty buffer.
+ */
+struct wpabuf * wpabuf_concat(struct wpabuf *a, struct wpabuf *b)
+{
+       struct wpabuf *n = NULL;
+       size_t len = 0;
+
+       if (b == NULL)
+               return a;
+
+       if (a)
+               len += wpabuf_len(a);
+       if (b)
+               len += wpabuf_len(b);
+
+       n = wpabuf_alloc(len);
+       if (n) {
+               if (a)
+                       wpabuf_put_buf(n, a);
+               if (b)
+                       wpabuf_put_buf(n, b);
+       }
+
+       wpabuf_free(a);
+       wpabuf_free(b);
+
+       return n;
+}
+
+
+/**
+ * wpabuf_zeropad - Pad buffer with 0x00 octets (prefix) to specified length
+ * @buf: Buffer to be padded
+ * @len: Length for the padded buffer
+ * Returns: wpabuf padded to len octets or %NULL on failure
+ *
+ * If buf is longer than len octets or of same size, it will be returned as-is.
+ * Otherwise a new buffer is allocated and prefixed with 0x00 octets followed
+ * by the source data. The source buffer will be freed on error, i.e., caller
+ * will only be responsible on freeing the returned buffer. If buf is %NULL,
+ * %NULL will be returned.
+ */
+struct wpabuf * wpabuf_zeropad(struct wpabuf *buf, size_t len)
+{
+       struct wpabuf *ret;
+       size_t blen;
+
+       if (buf == NULL)
+               return NULL;
+
+       blen = wpabuf_len(buf);
+       if (blen >= len)
+               return buf;
+
+       ret = wpabuf_alloc(len);
+       if (ret) {
+               os_memset(wpabuf_put(ret, len - blen), 0, len - blen);
+               wpabuf_put_buf(ret, buf);
+       }
+       wpabuf_free(buf);
+
+       return ret;
+}
+
+
+void wpabuf_printf(struct wpabuf *buf, char *fmt, ...)
+{
+       va_list ap;
+       void *tmp = wpabuf_mhead_u8(buf) + wpabuf_len(buf);
+       int res;
+
+       va_start(ap, fmt);
+       res = vsnprintf(tmp, buf->size - buf->used, fmt, ap);
+       va_end(ap);
+       if (res < 0 || (size_t) res >= buf->size - buf->used)
+               wpabuf_overflow(buf, res);
+       buf->used += res;
+}