diff options
| author | cremno <[email protected]> | 2014-11-26 00:52:54 +0100 |
|---|---|---|
| committer | cremno <[email protected]> | 2014-12-02 00:00:54 +0100 |
| commit | ce5a3dbcbaae84d87c4f09d4e28523a59886c7ad (patch) | |
| tree | 71f0850a72a6da2e0174c17946ac665e5b990cf5 /mrbgems/mruby-bin-debugger | |
| parent | 1365151dcb65190b05a97768584f68cb14d584c4 (diff) | |
| download | mruby-ce5a3dbcbaae84d87c4f09d4e28523a59886c7ad.tar.gz mruby-ce5a3dbcbaae84d87c4f09d4e28523a59886c7ad.zip | |
add mrb_debug_strdup() and mrb_debug_strndup()
They behave similar to their POSIX equivalents, except
mrb_malloc_simple() is used for memory allocation and
errno might not be set since ISO C99 doesn't have ENOMEM.
Diffstat (limited to 'mrbgems/mruby-bin-debugger')
| -rw-r--r-- | mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c | 34 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h | 14 |
2 files changed, 48 insertions, 0 deletions
diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c new file mode 100644 index 000000000..4cf528feb --- /dev/null +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.c @@ -0,0 +1,34 @@ +/* +** apistring.c +** +*/ + +#include <string.h> +#include "apistring.h" + +static size_t +mrb_debug_strnlen(const char *s, size_t maxlen) +{ + const char *p = memchr(s, '\0', maxlen); + return p != NULL ? (size_t)(p - s) : maxlen; +} + +char* +mrb_debug_strndup(mrb_state *mrb, const char *s, size_t size) +{ + size_t l = mrb_debug_strnlen(s, size); + char *d = mrb_malloc_simple(mrb, l + 1); + if (d != NULL) { + memcpy(d, s, l); + d[l] = '\0'; + } + return d; +} + +char* +mrb_debug_strdup(mrb_state *mrb, const char *s) +{ + size_t z = strlen(s) + 1; + char *d = mrb_malloc_simple(mrb, z); + return d != NULL ? memcpy(d, s, z) : NULL; +} diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h b/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h new file mode 100644 index 000000000..e48478d2e --- /dev/null +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apistring.h @@ -0,0 +1,14 @@ +/* + * apistring.h + */ + +#ifndef APISTRING_H_ +#define APISTRING_H_ + +#include "mruby.h" + +/* both functions return a null pointer on failure */ +char *mrb_debug_strndup(mrb_state *mrb, const char *s, size_t size); +char *mrb_debug_strdup(mrb_state *mrb, const char *s); + +#endif /* APISTRING_H_ */ |
