From d48ae9227a83e3bb0dbf43c3590d9954f000cd26 Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Sat, 1 Feb 2014 19:31:59 +0900 Subject: [PATCH] impl strdup and strndup by myself --- include/picrin.h | 2 ++ src/blob.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/picrin.h b/include/picrin.h index f0219a6b..1f7c66d5 100644 --- a/include/picrin.h +++ b/include/picrin.h @@ -154,6 +154,8 @@ const char *pic_symbol_name(pic_state *, pic_sym); pic_sym pic_gensym(pic_state *, pic_sym); bool pic_interned_p(pic_state *, pic_sym); +char *pic_strdup(pic_state *pic, const char *s); +char *pic_strndup(pic_state *pic, const char *s, size_t n); struct pic_string *pic_str_new(pic_state *, const char *, size_t); struct pic_string *pic_str_new_cstr(pic_state *, const char *); diff --git a/src/blob.c b/src/blob.c index afa50747..33d297cf 100644 --- a/src/blob.c +++ b/src/blob.c @@ -7,6 +7,23 @@ #include "picrin.h" #include "picrin/blob.h" +char * +pic_strndup(pic_state *pic, const char *s, size_t n) +{ + char *r; + + r = pic_alloc(pic, n + 1); + memcpy(r, s, n); + r[n] = '\0'; + return r; +} + +char * +pic_strdup(pic_state *pic, const char *s) +{ + return pic_strndup(pic, s, strlen(s)); +} + struct pic_blob * pic_blob_new(pic_state *pic, char *dat, size_t len) {