mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-26 23:05:05 +03:00
0154018363
* FBT: cdefines to env, libs order * API: strtod, modf, itoa, calloc * Apps: elk js * Apps: mjs * JS: scripts as assets * mjs: composite resolver * mjs: stack trace * ELK JS example removed * MJS thread, MJS lib modified to support script interruption * JS console UI * Module system, BadUSB bindings rework * JS notifications, simple dialog, BadUSB demo * Custom dialogs, dialog demo * MJS as system library, some dirty hacks to make it compile * Plugin-based js modules * js_uart(BadUART) module * js_uart: support for byte array arguments * Script icon and various fixes * File browser: multiple extensions filter, running js scripts from app loader * Running js scripts from archive browser * JS Runner as system app * Example scripts moved to /ext/apps/Scripts * JS bytecode listing generation * MJS builtin printf cleanup * JS examples cleanup * mbedtls version fix * Unused lib cleanup * Making PVS happy & TODOs cleanup * TODOs cleanup #2 * MJS: initial typed arrays support * JS: fix mem leak in uart destructor Co-authored-by: SG <who.just.the.doctor@gmail.com> Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
112 lines
3.0 KiB
C
112 lines
3.0 KiB
C
/*
|
|
* Copyright (c) 2014-2018 Cesanta Software Limited
|
|
* All rights reserved
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the ""License"");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an ""AS IS"" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/*
|
|
* Mbufs are mutable/growing memory buffers, like C++ strings.
|
|
* Mbuf can append data to the end of a buffer or insert data into arbitrary
|
|
* position in the middle of a buffer. The buffer grows automatically when
|
|
* needed.
|
|
*/
|
|
|
|
#ifndef CS_COMMON_MBUF_H_
|
|
#define CS_COMMON_MBUF_H_
|
|
|
|
#include <stdlib.h>
|
|
#include "platform.h"
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef MBUF_SIZE_MULTIPLIER
|
|
#define MBUF_SIZE_MULTIPLIER 1.5
|
|
#endif
|
|
|
|
#ifndef MBUF_SIZE_MAX_HEADROOM
|
|
#ifdef BUFSIZ
|
|
#define MBUF_SIZE_MAX_HEADROOM BUFSIZ
|
|
#else
|
|
#define MBUF_SIZE_MAX_HEADROOM 1024
|
|
#endif
|
|
#endif
|
|
|
|
/* Memory buffer descriptor */
|
|
struct mbuf {
|
|
char *buf; /* Buffer pointer */
|
|
size_t len; /* Data length. Data is located between offset 0 and len. */
|
|
size_t size; /* Buffer size allocated by realloc(1). Must be >= len */
|
|
};
|
|
|
|
/*
|
|
* Initialises an Mbuf.
|
|
* `initial_capacity` specifies the initial capacity of the mbuf.
|
|
*/
|
|
void mbuf_init(struct mbuf *, size_t initial_capacity);
|
|
|
|
/* Frees the space allocated for the mbuffer and resets the mbuf structure. */
|
|
void mbuf_free(struct mbuf *);
|
|
|
|
/*
|
|
* Appends data to the Mbuf.
|
|
*
|
|
* Returns the number of bytes appended or 0 if out of memory.
|
|
*/
|
|
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.
|
|
*
|
|
* Existing data will be shifted forwards and the buffer will
|
|
* be grown if necessary.
|
|
* Returns the number of bytes inserted.
|
|
*/
|
|
size_t mbuf_insert(struct mbuf *, size_t, const void *, size_t);
|
|
|
|
/* Removes `data_size` bytes from the beginning of the buffer. */
|
|
void mbuf_remove(struct mbuf *, size_t data_size);
|
|
|
|
/*
|
|
* Resizes an Mbuf.
|
|
*
|
|
* If `new_size` is smaller than buffer's `len`, the
|
|
* resize is not performed.
|
|
*/
|
|
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). */
|
|
void mbuf_clear(struct mbuf *);
|
|
|
|
/* Shrinks an Mbuf by resizing its `size` to `len`. */
|
|
void mbuf_trim(struct mbuf *);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* CS_COMMON_MBUF_H_ */
|