diff options
Diffstat (limited to 'byterun/misc.c')
-rw-r--r-- | byterun/misc.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/byterun/misc.c b/byterun/misc.c index 6eeae0f1b..1872a80ac 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" @@ -24,7 +26,6 @@ int caml_failed_assert (char * expr, char * file, int line) file, line, expr); fflush (stderr); exit (100); - return 1; /* not reached */ } void caml_set_fields (char *bp, unsigned long start, unsigned long filler) @@ -121,3 +122,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; +} |