mirror of
https://github.com/bellard/quickjs.git
synced 2025-11-16 02:32:15 +03:00
faster and safer dbuf functions (#443)
This commit is contained in:
46
cutils.h
46
cutils.h
@@ -264,24 +264,58 @@ typedef struct DynBuf {
|
||||
|
||||
void dbuf_init(DynBuf *s);
|
||||
void dbuf_init2(DynBuf *s, void *opaque, DynBufReallocFunc *realloc_func);
|
||||
int dbuf_realloc(DynBuf *s, size_t new_size);
|
||||
int dbuf_write(DynBuf *s, size_t offset, const uint8_t *data, size_t len);
|
||||
int dbuf_claim(DynBuf *s, size_t len);
|
||||
int dbuf_put(DynBuf *s, const uint8_t *data, size_t len);
|
||||
int dbuf_put_self(DynBuf *s, size_t offset, size_t len);
|
||||
int dbuf_putc(DynBuf *s, uint8_t c);
|
||||
int dbuf_putstr(DynBuf *s, const char *str);
|
||||
int __dbuf_putc(DynBuf *s, uint8_t c);
|
||||
int __dbuf_put_u16(DynBuf *s, uint16_t val);
|
||||
int __dbuf_put_u32(DynBuf *s, uint32_t val);
|
||||
int __dbuf_put_u64(DynBuf *s, uint64_t val);
|
||||
|
||||
static inline int dbuf_putc(DynBuf *s, uint8_t val)
|
||||
{
|
||||
if (unlikely((s->allocated_size - s->size) < 1)) {
|
||||
return __dbuf_putc(s, val);
|
||||
} else {
|
||||
s->buf[s->size++] = val;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int dbuf_put_u16(DynBuf *s, uint16_t val)
|
||||
{
|
||||
return dbuf_put(s, (uint8_t *)&val, 2);
|
||||
if (unlikely((s->allocated_size - s->size) < 2)) {
|
||||
return __dbuf_put_u16(s, val);
|
||||
} else {
|
||||
put_u16(s->buf + s->size, val);
|
||||
s->size += 2;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int dbuf_put_u32(DynBuf *s, uint32_t val)
|
||||
{
|
||||
return dbuf_put(s, (uint8_t *)&val, 4);
|
||||
if (unlikely((s->allocated_size - s->size) < 4)) {
|
||||
return __dbuf_put_u32(s, val);
|
||||
} else {
|
||||
put_u32(s->buf + s->size, val);
|
||||
s->size += 4;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int dbuf_put_u64(DynBuf *s, uint64_t val)
|
||||
{
|
||||
return dbuf_put(s, (uint8_t *)&val, 8);
|
||||
if (unlikely((s->allocated_size - s->size) < 8)) {
|
||||
return __dbuf_put_u64(s, val);
|
||||
} else {
|
||||
put_u64(s->buf + s->size, val);
|
||||
s->size += 8;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int __attribute__((format(printf, 2, 3))) dbuf_printf(DynBuf *s,
|
||||
const char *fmt, ...);
|
||||
void dbuf_free(DynBuf *s);
|
||||
|
||||
Reference in New Issue
Block a user