rizin/librz/include/rz_util/rz_strbuf.h
Giovanni 144b47d455
Move RzBreakpoint into RzDebug (#5124)
- Move trap/sw breakpoint into RzArch
- Remove RzBreakpointPlugin & RzBreakpointArch
- Add get_sw_breakpoint_at/get_sw_breakpoint_size_at binds
- Remove `dbh-`
- Change `dbh` to just list supported archs for sw breakpoints
- Implement correct PPC traps
- Add missing x86 breakpoint callback
2025-05-13 01:57:37 +08:00

47 lines
2 KiB
C

#ifndef RZ_STRBUF_H
#define RZ_STRBUF_H
#include <rz_types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
char buf[32];
size_t len; // string length in chars or binary buffer size
char *ptr; // ptr replacing buf in case strlen > sizeof(buf)
size_t ptrlen; // string length + 1 or binary buffer size
} RzStrBuf;
#define RZ_STRBUF_SAFEGET(sb) (rz_strbuf_get(sb) ? rz_strbuf_get(sb) : "")
RZ_API RzStrBuf *rz_strbuf_new(const char *s);
RZ_API const char *rz_strbuf_set(RzStrBuf *sb, const char *s); // return = the string or NULL on fail
RZ_API bool rz_strbuf_slice(RZ_NONNULL RzStrBuf *sb, size_t from, size_t len);
RZ_API bool rz_strbuf_setbin(RzStrBuf *sb, const ut8 *s, size_t len);
RZ_API ut8 *rz_strbuf_getbin(RzStrBuf *sb, size_t *len);
RZ_API const char *rz_strbuf_setf(RzStrBuf *sb, const char *fmt, ...) RZ_PRINTF_CHECK(2, 3); // return = the string or NULL on fail
RZ_API const char *rz_strbuf_vsetf(RzStrBuf *sb, const char *fmt, va_list ap); // return = the string or NULL on fail
RZ_API bool rz_strbuf_append(RzStrBuf *sb, const char *s);
RZ_API bool rz_strbuf_append_n(RzStrBuf *sb, const char *s, size_t l);
RZ_API bool rz_strbuf_prepend(RzStrBuf *sb, const char *s);
RZ_API bool rz_strbuf_appendf(RzStrBuf *sb, const char *fmt, ...) RZ_PRINTF_CHECK(2, 3);
RZ_API bool rz_strbuf_vappendf(RzStrBuf *sb, const char *fmt, va_list ap);
RZ_API char *rz_strbuf_get(RzStrBuf *sb);
RZ_API RZ_OWN char *rz_strbuf_drain(RZ_OWN RZ_NONNULL RzStrBuf *sb);
RZ_API RZ_OWN char *rz_strbuf_drain_nofree(RzStrBuf *sb);
RZ_API size_t rz_strbuf_length(RzStrBuf *sb);
RZ_API void rz_strbuf_free(RzStrBuf *sb);
RZ_API void rz_strbuf_fini(RzStrBuf *sb);
RZ_API void rz_strbuf_init(RzStrBuf *sb);
RZ_API const char *rz_strbuf_initf(RzStrBuf *sb, const char *fmt, ...); // same as init + setf for convenience
RZ_API bool rz_strbuf_copy(RzStrBuf *dst, RzStrBuf *src);
RZ_API bool rz_strbuf_equals(RzStrBuf *sa, RzStrBuf *sb);
RZ_API bool rz_strbuf_reserve(RzStrBuf *sb, size_t len);
RZ_API bool rz_strbuf_is_empty(RzStrBuf *sb);
#ifdef __cplusplus
}
#endif
#endif // RZ_STRBUF_H