From 5e2ca779638b8aaaab80d3a23be93df3f0555ba2 Mon Sep 17 00:00:00 2001
From: Kaz Kylheku <kaz@kylheku.com>
Date: Wed, 3 May 2017 20:46:36 -0700
Subject: ffi: remove put functions which duplicate others.

* ffi.c (ffi_ptr_in_put): Static function removed.  It was
functionally identical to ffi_ptr_put, plus a memory leak bug
in the nil object case.
(ffi_ptr_in_d_put): Static function removed, also identical to
ffi_ptr_put.
(ffi_type_compile): Replace references to removed functions
with ffi_ptr_put.
---
 ffi.c | 33 ++-------------------------------
 1 file changed, 2 insertions(+), 31 deletions(-)

diff --git a/ffi.c b/ffi.c
index 9227fbe0..35ff9d2f 100644
--- a/ffi.c
+++ b/ffi.c
@@ -699,20 +699,6 @@ static val ffi_ptr_in_in(struct txr_ffi_type *tft, mem_t *src, val obj,
   return obj;
 }
 
-static void ffi_ptr_in_put(struct txr_ffi_type *tft, val s, mem_t *dst,
-                           val self)
-{
-  val tgttype = tft->mtypes;
-  struct txr_ffi_type *tgtft = ffi_type_struct(tgttype);
-  mem_t *buf = tgtft->alloc(tgtft, s, self);
-  if (s == nil) {
-    *coerce(mem_t **, dst) = 0;
-  } else {
-    tgtft->put(tgtft, s, buf, self);
-    *coerce(mem_t **, dst) = buf;
-  }
-}
-
 static void ffi_ptr_in_out(struct txr_ffi_type *tft, int copy, val s,
                            mem_t *dst, val self)
 {
@@ -724,21 +710,6 @@ static void ffi_ptr_in_out(struct txr_ffi_type *tft, int copy, val s,
   }
 }
 
-static void ffi_ptr_in_d_put(struct txr_ffi_type *tft, val s, mem_t *dst,
-                             val self)
-{
-  val tgttype = tft->mtypes;
-  struct txr_ffi_type *tgtft = ffi_type_struct(tgttype);
-
-  if (s == nil) {
-    *coerce(mem_t **, dst) = 0;
-  } else {
-    mem_t *buf = tgtft->alloc(tgtft, s, self);
-    tgtft->put(tgtft, s, buf, self);
-    *coerce(mem_t **, dst) = buf;
-  }
-}
-
 static val ffi_ptr_out_in(struct txr_ffi_type *tft, mem_t *src, val obj,
                           val self)
 {
@@ -1289,14 +1260,14 @@ val ffi_type_compile(val syntax)
       val target_type = ffi_type_compile(cadr(syntax));
       return make_ffi_type_pointer(syntax, cptr_s, sizeof (mem_t *),
                                    &ffi_type_pointer,
-                                   ffi_ptr_in_put, ffi_ptr_get,
+                                   ffi_ptr_put, ffi_ptr_get,
                                    ffi_ptr_in_in, ffi_ptr_in_out,
                                    target_type);
     } else if (sym == ptr_in_d_s) {
       val target_type = ffi_type_compile(cadr(syntax));
       return make_ffi_type_pointer(syntax, cptr_s, sizeof (mem_t *),
                                    &ffi_type_pointer,
-                                   ffi_ptr_in_d_put, ffi_ptr_d_get,
+                                   ffi_ptr_put, ffi_ptr_d_get,
                                    0, ffi_ptr_in_out,
                                    target_type);
     } else if (sym == ptr_out_s) {
-- 
cgit v1.2.3