From fc63a080a0245b2115ed6bf0b0d6c2dfe265b325 Mon Sep 17 00:00:00 2001 From: James McKaskill Date: Thu, 12 Sep 2013 23:20:58 -0400 Subject: [PATCH] Add special case for capn_setp when handed a far pointer --- capn.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/capn.c b/capn.c index 5d5ec83..83be1b1 100644 --- a/capn.c +++ b/capn.c @@ -767,6 +767,15 @@ int capn_setp(capn_ptr p, int off, capn_ptr tgt) { int err, dep = 0; capn_resolve(&p); + + if (tgt.type == CAPN_FAR_POINTER && tgt.seg->capn == p.seg->capn) { + uint64_t val = capn_flip64(*(uint64_t*) tgt.data); + if ((val & 3) == FAR_PTR) { + *(uint64_t*) p.data = *(uint64_t*) tgt.data; + return 0; + } + } + capn_resolve(&tgt); switch (p.type) {