From b97eecc06fd756c035752c4b84337c83f0a3ca17 Mon Sep 17 00:00:00 2001 From: pancake Date: Sun, 8 Dec 2013 02:47:55 +0100 Subject: [PATCH] RStrBuf setters return boolean for success --- libr/core/disasm.c | 3 ++- libr/include/r_util.h | 6 +++--- libr/util/strbuf.c | 23 +++++++++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/libr/core/disasm.c b/libr/core/disasm.c index bd725ecf46..18811c0b1d 100644 --- a/libr/core/disasm.c +++ b/libr/core/disasm.c @@ -1429,13 +1429,14 @@ R_API int r_core_print_disasm_instructions (RCore *core, int len, int l) { } if (ret<1) { ret = err = 1; +ret = analop.size; r_cons_printf ("???\n"); } else { r_cons_printf ("%s\n", opstr); free (opstr); } } - if(oldbits) { + if (oldbits) { r_config_set_i (core->config, "asm.bits", oldbits); oldbits = 0; } diff --git a/libr/include/r_util.h b/libr/include/r_util.h index c7285c9d60..b93047a341 100644 --- a/libr/include/r_util.h +++ b/libr/include/r_util.h @@ -615,9 +615,9 @@ typedef struct { } RStrBuf; R_API RStrBuf *r_strbuf_new(); -R_API void r_strbuf_set(RStrBuf *sb, const char *s); -R_API void r_strbuf_setf(RStrBuf *sb, const char *fmt, ...); -R_API void r_strbuf_append(RStrBuf *sb, const char *s); +R_API int r_strbuf_set(RStrBuf *sb, const char *s); +R_API int r_strbuf_setf(RStrBuf *sb, const char *fmt, ...); +R_API int r_strbuf_append(RStrBuf *sb, const char *s); R_API char *r_strbuf_get(RStrBuf *sb); R_API void r_strbuf_free(RStrBuf *sb); R_API void r_strbuf_fini(RStrBuf *sb); diff --git a/libr/util/strbuf.c b/libr/util/strbuf.c index 26b2623586..e4ca5da5da 100644 --- a/libr/util/strbuf.c +++ b/libr/util/strbuf.c @@ -12,20 +12,24 @@ R_API void r_strbuf_init(RStrBuf *sb) { memset (sb, 0, sizeof (RStrBuf)); } -R_API void r_strbuf_set(RStrBuf *sb, const char *s) { +R_API int r_strbuf_set(RStrBuf *sb, const char *s) { int l = strlen (s); if (l>=sizeof (sb->buf)) { + char *ptr = malloc (l+1); + if (!ptr) + return R_FALSE; free (sb->ptr); - sb->ptr = malloc (l+1); - memcpy (sb->ptr, s, l+1); + sb->ptr = ptr; + memcpy (ptr, s, l+1); } else { sb->ptr = NULL; memcpy (sb->buf, s, l+1); } sb->len = l; + return R_TRUE; } -R_API void r_strbuf_setf(RStrBuf *sb, const char *fmt, ...) { +R_API int r_strbuf_setf(RStrBuf *sb, const char *fmt, ...) { int ret; char string[4096]; va_list ap; @@ -34,27 +38,30 @@ R_API void r_strbuf_setf(RStrBuf *sb, const char *fmt, ...) { ret = vsnprintf (string, sizeof (string), fmt, ap); if (ret>=sizeof (string)) { char *p = malloc (ret+2); - if (!p) return; + if (!p) return R_FALSE; vsnprintf (p, ret+1, fmt, ap); - r_strbuf_set (sb, p); + ret = r_strbuf_set (sb, p); free (p); - } else r_strbuf_set (sb, string); + } else ret = r_strbuf_set (sb, string); va_end (ap); + return ret; } -R_API void r_strbuf_append(RStrBuf *sb, const char *s) { +R_API int r_strbuf_append(RStrBuf *sb, const char *s) { int l = strlen (s); if ((sb->len+l+1)buf)) { strcpy (sb->buf+sb->len, s); sb->ptr = NULL; } else { char *p = malloc (sb->len+l+1); + if (!p) return R_FALSE; strcpy (p, sb->ptr?sb->ptr:sb->buf); strcpy (p+sb->len, s); free (sb->ptr); sb->ptr = p; } sb->len += l; + return R_TRUE; } R_API char *r_strbuf_get(RStrBuf *sb) {