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; +}