From eb306f463efea645de611de2bff0a8f823deb048 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Sat, 12 Aug 2017 17:34:30 +0200 Subject: [PATCH] lib: add nghttp2_rcbuf_is_static() Add a `nghttp2_rcbuf_is_static()` method to tell whether a rcbuf is statically allocated. This can be useful for language bindings that wish to avoid creating duplicate strings for these buffers; concretely, I am planning to use this in the Node HTTP/2 module that is being introduced. --- doc/CMakeLists.txt | 1 + doc/Makefile.am | 1 + lib/includes/nghttp2/nghttp2.h | 9 +++++++++ lib/nghttp2_rcbuf.c | 4 ++++ 4 files changed, 15 insertions(+) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 5bca75d8..34c02792 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -49,6 +49,7 @@ set(APIDOCS nghttp2_rcbuf_decref.rst nghttp2_rcbuf_get_buf.rst nghttp2_rcbuf_incref.rst + nghttp2_rcbuf_is_static.rst nghttp2_select_next_protocol.rst nghttp2_session_callbacks_del.rst nghttp2_session_callbacks_new.rst diff --git a/doc/Makefile.am b/doc/Makefile.am index e1af0980..190831ba 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -74,6 +74,7 @@ APIDOCS= \ nghttp2_rcbuf_decref.rst \ nghttp2_rcbuf_get_buf.rst \ nghttp2_rcbuf_incref.rst \ + nghttp2_rcbuf_is_static.rst \ nghttp2_select_next_protocol.rst \ nghttp2_session_callbacks_del.rst \ nghttp2_session_callbacks_new.rst \ diff --git a/lib/includes/nghttp2/nghttp2.h b/lib/includes/nghttp2/nghttp2.h index 1c74b35c..09fdc16d 100644 --- a/lib/includes/nghttp2/nghttp2.h +++ b/lib/includes/nghttp2/nghttp2.h @@ -469,6 +469,15 @@ NGHTTP2_EXTERN void nghttp2_rcbuf_decref(nghttp2_rcbuf *rcbuf); */ NGHTTP2_EXTERN nghttp2_vec nghttp2_rcbuf_get_buf(nghttp2_rcbuf *rcbuf); +/** + * @function + * + * Returns 1 if the underlying buffer is statically allocated, + * and 0 otherwise. This can be useful for language bindings that wish to avoid + * creating duplicate strings for these buffers. + */ +NGHTTP2_EXTERN int nghttp2_rcbuf_is_static(const nghttp2_rcbuf *rcbuf); + /** * @enum * diff --git a/lib/nghttp2_rcbuf.c b/lib/nghttp2_rcbuf.c index 24f561af..7e7814d2 100644 --- a/lib/nghttp2_rcbuf.c +++ b/lib/nghttp2_rcbuf.c @@ -96,3 +96,7 @@ nghttp2_vec nghttp2_rcbuf_get_buf(nghttp2_rcbuf *rcbuf) { nghttp2_vec res = {rcbuf->base, rcbuf->len}; return res; } + +int nghttp2_rcbuf_is_static(const nghttp2_rcbuf *rcbuf) { + return rcbuf->ref == -1; +}