bson_reserve_buffer man page

bson_reserve_buffer() — Grow the internal buffer of bson to size and set the document length to size. Useful for eliminating copies when reading BSON bytes from a stream.


uint8_t *
bson_reserve_buffer (bson_t   *bson,
                     uint32_t  size);


An initialized bson_t
The length in bytes of the new buffer.


Grow the internal buffer of bson to size and set the document length to size

First, initialize bson with bson_init or bson_new , then call this function. After it returns, the length of bson is set to size but its contents are uninitialized memory: you must fill the contents with a BSON document of the correct length before any other operations.

The document must be freed with bson_destroy


A pointer to the internal buffer, which is at least size bytes, or NULL if the space could not be allocated.


Use bson_reserve_buffer to write a function that takes a bson_t pointer and reads a file into it directly:

#include <stdio.h>
#include <bson.h>

read_into (bson_t   *bson,
           FILE     *fp)
   uint8_t *buffer;
   long size;

   if (fseek(fp, 0L, SEEK_END) < 0) {
      perror ("Couldn't get file size");
      return 1;

   size = ftell (fp);
   if (size == EOF) {
      perror ("Couldn't get file size");
      return 1;

   if (size > INT32_MAX) {
      fprintf (stderr, "File too large\n");
      return 1;

   /* reserve buffer space ‐ bson is temporarily invalid */
   buffer = bson_reserve_buffer (bson, (uint32_t) size);
   if (!buffer) {
      fprintf (stderr, "Couldn't reserve %ld bytes", size);
      return false;

   /* read file directly into the buffer */
   if (fread ((void *) buffer, 1, (size_t) size, fp) < (size_t) size) {
      perror ("Couldn't read file");
      return false;

   return true;

main ()
   FILE *fp;
   char *json;

   /* stack‐allocated, initialized bson_t */
   bson_t bson = BSON_INITIALIZER;

   if (!(fp = fopen ("document.bson", "rb"))) {
      perror ("Couldn't read file");
      return 1;

   read_into (&bson, fp);
   fclose (fp);

   json = bson_as_json (&bson, NULL);
   printf ("%s\n", json);

   bson_free (json);
   bson_destroy (&bson);

   return 0;

See also bson_steal and bson_destroy_with_steal


This page is part of libbson. Please report any bugs at https://jira.mongodb.org/browse/CDRIVER.


libbson 2016-10-19