]>
git.proxmox.com Git - ceph.git/blob - ceph/src/civetweb/src/third_party/duktape-1.3.0/src-separate/duk_debug_fixedbuffer.c
2 * Fixed buffer helper useful for debugging, requires no allocation
3 * which is critical for debugging.
6 #include "duk_internal.h"
10 DUK_INTERNAL
void duk_fb_put_bytes(duk_fixedbuffer
*fb
, duk_uint8_t
*buffer
, duk_size_t length
) {
14 avail
= (fb
->offset
>= fb
->length
? (duk_size_t
) 0 : (duk_size_t
) (fb
->length
- fb
->offset
));
21 DUK_MEMCPY(fb
->buffer
+ fb
->offset
, buffer
, copylen
);
22 fb
->offset
+= copylen
;
25 DUK_INTERNAL
void duk_fb_put_byte(duk_fixedbuffer
*fb
, duk_uint8_t x
) {
26 duk_fb_put_bytes(fb
, &x
, 1);
29 DUK_INTERNAL
void duk_fb_put_cstring(duk_fixedbuffer
*fb
, const char *x
) {
30 duk_fb_put_bytes(fb
, (duk_uint8_t
*) x
, (duk_size_t
) DUK_STRLEN(x
));
33 DUK_INTERNAL
void duk_fb_sprintf(duk_fixedbuffer
*fb
, const char *fmt
, ...) {
38 avail
= (fb
->offset
>= fb
->length
? (duk_size_t
) 0 : (duk_size_t
) (fb
->length
- fb
->offset
));
40 duk_int_t res
= (duk_int_t
) DUK_VSNPRINTF((char *) (fb
->buffer
+ fb
->offset
), avail
, fmt
, ap
);
43 } else if ((duk_size_t
) res
>= avail
) {
44 /* (maybe) truncated */
46 if ((duk_size_t
) res
> avail
) {
47 /* actual chars dropped (not just NUL term) */
58 DUK_INTERNAL
void duk_fb_put_funcptr(duk_fixedbuffer
*fb
, duk_uint8_t
*fptr
, duk_size_t fptr_size
) {
60 duk_debug_format_funcptr(buf
, sizeof(buf
), fptr
, fptr_size
);
61 buf
[sizeof(buf
) - 1] = (char) 0;
62 duk_fb_put_cstring(fb
, buf
);
65 DUK_INTERNAL duk_bool_t
duk_fb_is_full(duk_fixedbuffer
*fb
) {
66 return (fb
->offset
>= fb
->length
);
69 #endif /* DUK_USE_DEBUG */