diff options
Diffstat (limited to 'byterun/misc.c')
-rw-r--r-- | byterun/misc.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/byterun/misc.c b/byterun/misc.c index 6eeae0f1b..6dc27d5cc 100644 --- a/byterun/misc.c +++ b/byterun/misc.c @@ -12,6 +12,8 @@ /***********************************************************************/ #include <stdio.h> +#include <string.h> +#include <stdarg.h> #include "config.h" #include "misc.h" #include "memory.h" @@ -121,3 +123,39 @@ void caml_ext_table_free(struct ext_table * tbl, int free_entries) for (i = 0; i < tbl->size; i++) caml_stat_free(tbl->contents[i]); caml_stat_free(tbl->contents); } + +CAMLexport char * caml_strdup(const char * s) +{ + size_t slen = strlen(s); + char * res = caml_stat_alloc(slen + 1); + memcpy(res, s, slen + 1); + return res; +} + +CAMLexport char * caml_strconcat(int n, ...) +{ + va_list args; + char * res, * p; + size_t len; + int i; + + len = 0; + va_start(args, n); + for (i = 0; i < n; i++) { + const char * s = va_arg(args, const char *); + len += strlen(s); + } + va_end(args); + res = caml_stat_alloc(len + 1); + va_start(args, n); + p = res; + for (i = 0; i < n; i++) { + const char * s = va_arg(args, const char *); + size_t l = strlen(s); + memcpy(p, s, l); + p += l; + } + va_end(args); + *p = 0; + return res; +} |