)]}'
{
  "log": [
    {
      "commit": "1ed8ce47b922b71f3b3cdd661e647bbe7ed2eca7",
      "tree": "8991923fd48342254db78275f2776480b824e18d",
      "parents": [
        "84c3840c7157438b5cb2e324d184ca08ac07fb41"
      ],
      "author": {
        "name": "Wenjian Ma",
        "email": "ytmwjian@163.com",
        "time": "Fri Jun 19 10:53:26 2015 +0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jun 21 12:32:29 2015 +0100"
      },
      "message": "lib, stream: fix stream sanity checks\n\nBecause  operator \"!\" has higher priority  than \"\u0026\u0026\",\nSo we put the \"\u0026\u0026\" expression in \"()\" to check both getp and endp.\nAcked-by: Donald Sharp \u003csharpd@cumulusnetworks.com\u003e\n"
    },
    {
      "commit": "eed3c48d3a7d2dae2cae2f2f250deffb843754a6",
      "tree": "07b2252438225065024d4a534eddf0e86c9b87a4",
      "parents": [
        "ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Mar 03 08:51:53 2015 +0100"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 21 10:17:31 2015 +0200"
      },
      "message": "*: use void * for printing pointers\n\nOn higher warning levels, compilers expect %p printf arguments to be\nvoid *.  Since format string / argument warnings can be useful\notherwise, let\u0027s get rid of this noise by sprinkling casts to void *\nover printf calls.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "3790eb0d3f0bbb24b9c6be97f547cec144ee05d1",
      "tree": "08ccf694b43a92568a1278aa28374dcd09d4b0fe",
      "parents": [
        "bdd8cd70a042473477f9144c9cedb8dde11ba2c1"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@vyatta.com",
        "time": "Wed Jan 13 00:32:43 2010 +0000"
      },
      "committer": {
        "name": "Vincent JARDIN",
        "email": "vincent.jardin@6wind.com",
        "time": "Mon Oct 27 16:08:22 2014 +0100"
      },
      "message": "stream: remove unused stream_read_unblock\n\nThe one place this was being used in BGP is now gone,\ncan remove deprecated interface.\nAcked-by: Feng Lu \u003clu.feng@6wind.com\u003e\n"
    },
    {
      "commit": "6b0655a25194c7c0331154edaa6124cf783e5e5e",
      "tree": "c0c7d479f2684531249668210da27a60322ba395",
      "parents": [
        "fdb913aedb5a9807ad60715e8badb4f25d57acea"
      ],
      "author": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:53:35 2014 +0200"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Wed Jun 04 06:58:02 2014 +0200"
      },
      "message": "*: nuke ^L (page feed)\n\nQuagga sources have inherited a slew of Page Feed (^L, \\xC) characters\nfrom ancient history.  Among other things, these break patchwork\u0027s\nXML-RPC API because \\xC is not a valid character in XML documents.\n\nNuke them from high orbit.\n\nPatches can be adapted simply by:\n\tsed -e \u0027s%^L%%\u0027 -i filename.patch\n(you can type page feeds in some environments with Ctrl-V Ctrl-L)\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "8c71e481dae11b7ae3f1ef561a989624b2ae84b6",
      "tree": "4c13b76e1b9aedc45ad9b086be972ba4999ada03",
      "parents": [
        "2c13299a05e5544a5e79c2a970256a21f488a3fa"
      ],
      "author": {
        "name": "Pradosh Mohapatra",
        "email": "pmohapat@cumulusnetworks.com",
        "time": "Wed Jan 15 06:57:57 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Jun 03 15:08:32 2014 +0200"
      },
      "message": "bgpd: efficient NLRI packing for AFs !\u003d ipv4-unicast\n\nISSUE:\n\n  Currently, for non-ipv4-unicast address families where prefixes are\n  encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one\n  prefix per UPDATE message. This is quite inefficient. The patch\n  addresses the issue.\n\nPATCH:\n\n  We introduce a scratch buffer in the peer structure that stores the\n  MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This\n  enables us to encode multiple prefixes. In the end, the two buffers\n  are merged to create the UPDATE packet.\n\nSigned-off-by: Pradosh Mohapatra \u003cpmohapat@cumulusnetworks.com\u003e\nReviewed-by: Daniel Walton \u003cdwalton@cumulusnetworks.com\u003e\n[DL: removed no longer existing bgp_packet_withdraw prototype]\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "af514777f4327932a3e84f83d79e941967503e15",
      "tree": "68ddb2e6dd758b2c50f3a4facea1dfc925460312",
      "parents": [
        "6d729eeac91578dca29961e0e46f246f33c37f0c"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Wed Jul 31 16:16:05 2013 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue Apr 01 17:14:44 2014 +0200"
      },
      "message": "lib: fix possible off-by-one in stream_put_prefix()\n\nThe STREAM_WRITEABLE() call only checks if there is space for the\nprefix in the stream but does not account for the prefixlen. The\nstream_putc() call reduces available space by 1 and we can end\ncopying one byte too much and with \"endp\" off by one if we are\nnear the buffer end.\n\nInstead of moving the stream_putc() call before STREAM_WRITEABLE(),\nwe check before hand for the required space, and open-code it. This\navoids a function call and verifying again the stream buffer.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "4effc29fb1c33a87a8d386de39c20d36a6956645",
      "tree": "73e57392e4227aeae3ca3ef1db54e227f46909e6",
      "parents": [
        "b4154c145a2d1d0679983130413b81d44fbb04ab"
      ],
      "author": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat May 05 17:42:43 2012 -0700"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Thu Oct 25 10:15:58 2012 -0700"
      },
      "message": "lib: improve sanity checks in stream_set_endp()\n\n  * lib/stream.c: (stream_set_endp) Add checks to make sure that the\n    supplied \u0027endp\u0027 is within the \u0027size\u0027 of the stream, and that the\n    current read pointer \u0027getp\u0027 is not beyond the specified \u0027endp\u0027.\n"
    },
    {
      "commit": "d531050b7bf0f93d4d29a7a2f7b745641778b483",
      "tree": "82e45741fa3883f6e25a38f2abef4eea107fd54f",
      "parents": [
        "bed930fd70742af5ae138e0a5ee629dda296ea36"
      ],
      "author": {
        "name": "Subbaiah Venkata",
        "email": "svenkata@google.com",
        "time": "Sat Mar 24 13:10:19 2012 -0700"
      },
      "committer": {
        "name": "Avneesh Sachdev",
        "email": "avneesh@opensourcerouting.org",
        "time": "Sat Apr 07 13:53:40 2012 -0700"
      },
      "message": "lib: add stream_set_endp()\n\n  * lib/stream.[ch]:\n\n    - Add stream_set_endp(). This can be used to trim data (for\n      example, padding) at the end of a stream.\n\n    - Fix swapped \u0027getp\u0027 and \u0027endp\u0027 parameters in STREAM_WARN_OFFSETS.\n\nFrom: Subbaiah Venkata \u003csvenkata@google.com\u003e\nSigned-off-by: Avneesh Sachdev \u003cavneesh@opensourcerouting.org\u003e\nSigned-off-by: David Lamparter \u003cequinox@diac24.net\u003e\n"
    },
    {
      "commit": "3d52bb8085c32b54fa21d88588310716245291d4",
      "tree": "8d47a7c92cafb9df895ba32b705e19386e0944e9",
      "parents": [
        "032928091c558d3b0940be079049009f47652711"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Sat Jun 07 20:42:07 2008 +0000"
      },
      "message": "[lib] trivial: add const qualifier to stream_put/write\n\n2008-06-07 Paul Jakma \u003cpaul@jakma.org\u003e\n\n\t* stream.{c,h}: (stream_{put,write}) add const qualifier to source\n\t  argument. Change u_char to void *.\n"
    },
    {
      "commit": "581a02a9f71f43012c67217fe12d97808875c352",
      "tree": "4d04c1fe0d3195ba54b7fb126176a09c370dfea3",
      "parents": [
        "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:22:16 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:22:16 2006 +0000"
      },
      "message": "[lib/stream] small compile fix, use uint64_t, not u_int64_t.\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_getq_from) should use POSIX uint64_t\n\t  not u_int64_t. Latter is neither a traditional BSD type, nor\n\t  a POSIX type.\n"
    },
    {
      "commit": "4b201d46348b81bd9d59aa626c81f7457ea6ef38",
      "tree": "b841d11214e5ec8ff4904d193c5e0b7c4e741a50",
      "parents": [
        "e14b7fca6279fe9dc41c8aa9816b5685952c4b19"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 14:35:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jan 10 14:35:19 2006 +0000"
      },
      "message": "[stream] Add quad-word support and stream_resize\n\n2006-01-10 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_new) Allocate stream data as seperate object.\n\t  (stream_free) free the data.\n\t  (stream_resize) new function, resize stream to new size.\n\t  (stream_{get,put}q*) new functions to get/put quad word size\n\t  types.\n\t* stream.h: (struct stream) make data seperate from the stream.\n\t  Export new stream_resize and quad-word get/put functions.\n"
    },
    {
      "commit": "0dab930314e215a627f848ffa824ed995eb2e13c",
      "tree": "f84189f12990561a616c65be59d8cb6ebef94569",
      "parents": [
        "0c2029e9121d4c80380c174c2503b7deaf4e03ce"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 03 09:07:56 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue May 03 09:07:56 2005 +0000"
      },
      "message": "2005-05-03 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* stream.h: Add comment about the special zero-ing ability of\n\t  stream_put.\n\t  (stream_recvmsg, stream_write) should return ssize_t and size_t\n\t  respectively. Should both be extern linkage.\n\t  (stream_recvfrom) Stream aware wrapper around recvfrom, in style\n\t  of stream_read_try.\n\t* stream.c: (stream_recvfrom) new function, wrapper around recvfrom.\n\t  (stream_recvmsg, stream_write) ssize_t and size_t return values\n"
    },
    {
      "commit": "81fb32404c942432d2bea1e50a4d53bf75fd0f70",
      "tree": "107d5d94061c110773c5b2985e383d2075bc6044",
      "parents": [
        "0d7e9134d828d5aee8c83960bb706a726cdc2ec4"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:02:53 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 24 16:02:53 2005 +0000"
      },
      "message": "2005-02-24 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.c: (stream_read_try) Log a warning message if a fatal\n\t  I/O error occurs.\n\t  (stream_fifo_new) Fix prototype.\n\t* stream.h: Fix prototype for stream_fifo_new (need void arg).\n"
    },
    {
      "commit": "109ac96f0296fd66d5a1d37def44db3cef7ca0fb",
      "tree": "aa6e12891391dd9d0a890b2a89c39222ad6409e6",
      "parents": [
        "518cde8d6ce0434b02bd5d7cf7e9627d57af6952"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 01:17:07 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 19 01:17:07 2005 +0000"
      },
      "message": "2005-02-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: (stream_new) fix dumb mistake.\n"
    },
    {
      "commit": "53270116df3f54b1f9411f0832567e9effa87593",
      "tree": "08fab8ea890f84694a0f9fcaaf55a13fbf698ef3",
      "parents": [
        "d7e2a8188f6e9eaccb5e1c1bd7b9d5af79429c0c"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:07:22 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Thu Feb 17 20:07:22 2005 +0000"
      },
      "message": "2005-02-17 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.c: (stream_read_try) Use new ERRNO_IO_RETRY macro.\n"
    },
    {
      "commit": "262feb1ad0838bb585955b6ada5acbe106dbc9bf",
      "tree": "392f66d5d71bcfdd87e5db32e89325ed9ef06c44",
      "parents": [
        "42218e71256cb86b5078c99c931030c7b0ce9bab"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 20:35:47 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Feb 16 20:35:47 2005 +0000"
      },
      "message": "2005-02-16 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* stream.h: Declare new function stream_read_try suitable for use\n\t  with non-blocking file descriptors.  Indicate that stream_read\n\t  and stream_read_unblock are deprecated.\n\t* stream.c: (stream_read_try) New function for use with non-blocking\n\t  I/O.\n\t  (stream_recvmsg) Should return -1 if the stream is too small to\n\t  contain the data.\n"
    },
    {
      "commit": "050c013ac35337d86b03f140fb17d2e8e33a8baa",
      "tree": "7241e3972e2116f67b762a37305c31ee7d8d9671",
      "parents": [
        "f2e6c429375adf0d3c5deaa409734d5d41ac15ce"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:47:47 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Feb 14 23:47:47 2005 +0000"
      },
      "message": "2005-02-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.h: Unsigned long updated to size_t\n\t* stream.c: ditto\n\t* stream.h: Add stream_copy, stream_dup, stream_recvmsg.\n\t  Add comment describing struct stream abstraction, and various\n\t  other comments.\n\t  Deprecate several unsafe/ambigious macros.\n\t  Add STREAM_WRITEABLE and STREAM_READABLE.\n\t  Add (stream_getl_from) for symmetry.\n\t  Update stream_forward_{endp,getp} to use size_t offset.\n\t  Make stream data a 0 length array, rather than a seperate malloc.\n\t* stream.c: Add consistency checks. Update to follow stream.h\n\t  changes.\n\t  (stream_new) Alloc stream+data in one go.\n\t  (stream_copy) new function, copy a stream.\n\t  (stream_dup) new function, dup a stream.\n\t  (stream_recvmsg) new function, recvmsg data into a stream.\n\t  (stream_empty) no need to check getp \u003d\u003d 0.\n"
    },
    {
      "commit": "f2e6c429375adf0d3c5deaa409734d5d41ac15ce",
      "tree": "73c056492bff8eb06eb7350909d0b2fa8baba772",
      "parents": [
        "082253f5d08577e2c7b61ed2302be88295b459eb"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 12 14:35:49 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Sat Feb 12 14:35:49 2005 +0000"
      },
      "message": "2005-02-12 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.h: Unsigned long updated to size_t\n\t* stream.c: ditto\n"
    },
    {
      "commit": "9985f83ce7102f64b15f744b60320f8d14a8a5ff",
      "tree": "344629bdc2b4a7d53b8d7ca1705c9be2ca282d18",
      "parents": [
        "083ee9d9cdbf72a452b9af96e62d0625ea712cd9"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Feb 09 15:51:56 2005 +0000"
      },
      "message": "2005-02-09 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) Update code to match stream.h changes.\n\t  stream_get_putp effectively replaced with stream_get_endp.\n\t  stream_forward renamed to stream_forward_getp.\n\t  stream_forward_endp introduced to replace some previous\n\t  setting/manual twiddling of putp by daemons.\n\t* lib/stream.h: Remove putp. Update reference to putp with endp.\n\t  Add stream_forward_endp, which daemons were doing manually.\n\t  Rename stream_forward to stream_forward_getp.\n\t  lib/stream.c: Remove/update references to putp.\n\t  introduce stream_forward_endp.\n"
    },
    {
      "commit": "0e43a2bcc0b044ec8e92108811c1341076938af9",
      "tree": "b57ec33d9184ddbd0bfcd5d41344300440428c69",
      "parents": [
        "4ba9b9247222a6031a8060ddd39bfb19d90624e8"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Dec 22 00:15:34 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Dec 22 00:15:34 2004 +0000"
      },
      "message": "2004-12-21 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* stream.c: Dont allocate streams with 0 sized data buffers\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
