mirror of
https://github.com/cesanta/mongoose.git
synced 2025-08-01 02:16:14 +08:00
Add mbuf_append_and_free() and mbuf_move()
CL: Add mbuf_append_and_free() and mbuf_move() PUBLISHED_FROM=bdf73906dd93b2ebeace160596508e15480b54b4
This commit is contained in:
parent
53e1c469a2
commit
9a70abef24
@ -4,10 +4,12 @@ symbol_kind: "intro"
|
|||||||
decl_name: "mbuf.h"
|
decl_name: "mbuf.h"
|
||||||
items:
|
items:
|
||||||
- { name: mbuf_append.md }
|
- { name: mbuf_append.md }
|
||||||
|
- { name: mbuf_append_and_free.md }
|
||||||
- { name: mbuf_clear.md }
|
- { name: mbuf_clear.md }
|
||||||
- { name: mbuf_free.md }
|
- { name: mbuf_free.md }
|
||||||
- { name: mbuf_init.md }
|
- { name: mbuf_init.md }
|
||||||
- { name: mbuf_insert.md }
|
- { name: mbuf_insert.md }
|
||||||
|
- { name: mbuf_move.md }
|
||||||
- { name: mbuf_remove.md }
|
- { name: mbuf_remove.md }
|
||||||
- { name: mbuf_resize.md }
|
- { name: mbuf_resize.md }
|
||||||
- { name: mbuf_trim.md }
|
- { name: mbuf_trim.md }
|
||||||
|
13
docs/c-api/mbuf.h/mbuf_append_and_free.md
Normal file
13
docs/c-api/mbuf.h/mbuf_append_and_free.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: "mbuf_append_and_free()"
|
||||||
|
decl_name: "mbuf_append_and_free"
|
||||||
|
symbol_kind: "func"
|
||||||
|
signature: |
|
||||||
|
size_t mbuf_append_and_free(struct mbuf *, void *data, size_t data_size);
|
||||||
|
---
|
||||||
|
|
||||||
|
Appends data to the Mbuf and frees it (data must be heap-allocated).
|
||||||
|
|
||||||
|
Returns the number of bytes appended or 0 if out of memory.
|
||||||
|
data is freed irrespective of return value.
|
||||||
|
|
10
docs/c-api/mbuf.h/mbuf_move.md
Normal file
10
docs/c-api/mbuf.h/mbuf_move.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "mbuf_move()"
|
||||||
|
decl_name: "mbuf_move"
|
||||||
|
symbol_kind: "func"
|
||||||
|
signature: |
|
||||||
|
void mbuf_move(struct mbuf *from, struct mbuf *to);
|
||||||
|
---
|
||||||
|
|
||||||
|
Moves the state from one mbuf to the other.
|
||||||
|
|
22
mongoose.c
22
mongoose.c
@ -1612,6 +1612,22 @@ size_t mbuf_append(struct mbuf *a, const void *buf, size_t len) {
|
|||||||
return mbuf_insert(a, a->len, buf, len);
|
return mbuf_insert(a, a->len, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t mbuf_append_and_free(struct mbuf *a, void *buf, size_t len) WEAK;
|
||||||
|
size_t mbuf_append_and_free(struct mbuf *a, void *data, size_t len) {
|
||||||
|
size_t ret;
|
||||||
|
/* Optimization: if the buffer is currently empty,
|
||||||
|
* take over the user-provided buffer. */
|
||||||
|
if (a->len == 0) {
|
||||||
|
if (a->buf != NULL) free(a->buf);
|
||||||
|
a->buf = (char *) data;
|
||||||
|
a->len = a->size = len;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
ret = mbuf_insert(a, a->len, data, len);
|
||||||
|
free(data);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
void mbuf_remove(struct mbuf *mb, size_t n) WEAK;
|
void mbuf_remove(struct mbuf *mb, size_t n) WEAK;
|
||||||
void mbuf_remove(struct mbuf *mb, size_t n) {
|
void mbuf_remove(struct mbuf *mb, size_t n) {
|
||||||
if (n > 0 && n <= mb->len) {
|
if (n > 0 && n <= mb->len) {
|
||||||
@ -1625,6 +1641,12 @@ void mbuf_clear(struct mbuf *mb) {
|
|||||||
mb->len = 0;
|
mb->len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mbuf_move(struct mbuf *from, struct mbuf *to) WEAK;
|
||||||
|
void mbuf_move(struct mbuf *from, struct mbuf *to) {
|
||||||
|
memcpy(to, from, sizeof(*to));
|
||||||
|
memset(from, 0, sizeof(*from));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* EXCLUDE_COMMON */
|
#endif /* EXCLUDE_COMMON */
|
||||||
#ifdef MG_MODULE_LINES
|
#ifdef MG_MODULE_LINES
|
||||||
#line 1 "common/mg_str.c"
|
#line 1 "common/mg_str.c"
|
||||||
|
11
mongoose.h
11
mongoose.h
@ -2368,6 +2368,14 @@ void mbuf_free(struct mbuf *);
|
|||||||
*/
|
*/
|
||||||
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size);
|
size_t mbuf_append(struct mbuf *, const void *data, size_t data_size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Appends data to the Mbuf and frees it (data must be heap-allocated).
|
||||||
|
*
|
||||||
|
* Returns the number of bytes appended or 0 if out of memory.
|
||||||
|
* data is freed irrespective of return value.
|
||||||
|
*/
|
||||||
|
size_t mbuf_append_and_free(struct mbuf *, void *data, size_t data_size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Inserts data at a specified offset in the Mbuf.
|
* Inserts data at a specified offset in the Mbuf.
|
||||||
*
|
*
|
||||||
@ -2388,6 +2396,9 @@ void mbuf_remove(struct mbuf *, size_t data_size);
|
|||||||
*/
|
*/
|
||||||
void mbuf_resize(struct mbuf *, size_t new_size);
|
void mbuf_resize(struct mbuf *, size_t new_size);
|
||||||
|
|
||||||
|
/* Moves the state from one mbuf to the other. */
|
||||||
|
void mbuf_move(struct mbuf *from, struct mbuf *to);
|
||||||
|
|
||||||
/* Removes all the data from mbuf (if any). */
|
/* Removes all the data from mbuf (if any). */
|
||||||
void mbuf_clear(struct mbuf *);
|
void mbuf_clear(struct mbuf *);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user