From aa8b5d35393f3dda22e178e25acdcdef74ba703c Mon Sep 17 00:00:00 2001 From: Josh Berdine Date: Sat, 27 Mar 2021 23:00:47 +0000 Subject: [PATCH] [OCaml] Code simplification using string allocation functions Using the `cstr_to_string` function that allocates and initializes an OCaml `string` value enables simplifications in several cases. This change also has the effect of avoiding calling `memcpy` on NULL pointers even if only 0 bytes are to be copied. Differential Revision: https://reviews.llvm.org/D99474 --- bindings/ocaml/llvm/llvm_ocaml.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/bindings/ocaml/llvm/llvm_ocaml.c b/bindings/ocaml/llvm/llvm_ocaml.c index b6d14356740..e6b4b4d7309 100644 --- a/bindings/ocaml/llvm/llvm_ocaml.c +++ b/bindings/ocaml/llvm/llvm_ocaml.c @@ -279,18 +279,14 @@ CAMLprim value llvm_is_string_attr(LLVMAttributeRef A) { CAMLprim value llvm_get_string_attr_kind(LLVMAttributeRef A) { unsigned Length; const char *String = LLVMGetStringAttributeKind(A, &Length); - value Result = caml_alloc_string(Length); - memcpy((char *)String_val(Result), String, Length); - return Result; + return cstr_to_string (String, Length); } /* llattribute -> string */ CAMLprim value llvm_get_string_attr_value(LLVMAttributeRef A) { unsigned Length; const char *String = LLVMGetStringAttributeValue(A, &Length); - value Result = caml_alloc_string(Length); - memcpy((char *)String_val(Result), String, Length); - return Result; + return cstr_to_string (String, Length); } /*===-- Modules -----------------------------------------------------------===*/ @@ -2512,11 +2508,9 @@ CAMLprim LLVMMemoryBufferRef llvm_memorybuffer_of_string(value Name, value Strin /* llmemorybuffer -> string */ CAMLprim value llvm_memorybuffer_as_string(LLVMMemoryBufferRef MemBuf) { - value String = caml_alloc_string(LLVMGetBufferSize(MemBuf)); - memcpy((char *)String_val(String), LLVMGetBufferStart(MemBuf), - LLVMGetBufferSize(MemBuf)); - - return String; + size_t BufferSize = LLVMGetBufferSize(MemBuf); + const char *BufferStart = LLVMGetBufferStart(MemBuf); + return cstr_to_string(BufferStart, BufferSize); } /* llmemorybuffer -> unit */