)]}'
{
  "log": [
    {
      "commit": "8f5608b614b7908f4edde20a5461e46d4b080d9a",
      "tree": "be5a6b6140467c0a9eaf3b7397b5fbac92fe3a64",
      "parents": [
        "e202036e0377a578f2ae9ba3b5610c7763e5ab9d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 30 15:57:59 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 30 17:50:44 2017 -0700"
      },
      "message": "Fix ffs on x86 for old API levels.\n\n\u003cstrings.h\u003e\u0027s ffs used to work by accident. In the past, \u003cstrings.h\u003e used\nto incorrectly declare ffs for all platforms at all API levels. In the\nunified headers, there\u0027s no such declaration for x86 before API 18 (which\nmakes sense, because that function was missing on x86 until then).\n\nBut as long as there was a declaration for ffs, the compiler just inlined\n__builtin_ffs. There was no problem at link time because the compiler didn\u0027t\nactually add a reference to the missing ffs symbol.\n\nRestore the old behavior by manually instructing the compiler to inline its\nbuiltin in these cases.\n\nBug: https://github.com/android-ndk/ndk/issues/439\nTest: built new NDK \u0027ffs\u0027 test\nChange-Id: I840e99f237c86f7cb028a0f67aaa8c6ff3eda245\n"
    },
    {
      "commit": "46b44160e9e4c466be0faf1bb8d6ec70ecc83273",
      "tree": "80036c736b6315189745423724f1d69cb3b74682",
      "parents": [
        "6e9c1f61d8ea04d35d18709e373da355ca32e523"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 27 11:14:16 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 02 13:40:35 2016 -0700"
      },
      "message": "Update header versions for NDK platform fixes.\n\nBug: http://b/28178111\nChange-Id: Icd638673b409aa43a91490f77c6b4d79c9ea20d9\n"
    },
    {
      "commit": "d51bc71294e35fb2960288d28858683d9efe14e9",
      "tree": "6b71269f8e8b455b904b8538497d90ddb2e17a1d",
      "parents": [
        "34c599a8b0b04f66b065c4d84b809f74dd44382d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 29 16:36:01 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 29 16:39:50 2016 -0700"
      },
      "message": "Add platform specific version tags.\n\nSome functions were added at different times on different platforms.\nThis should hopefully get most of them.\n\nBug: http://b/28178111\nChange-Id: I85fdf92779a2f3277e9b537c6bfc7216790c607a\n"
    },
    {
      "commit": "c3cec27ad75544fdd1a5efc78260404a7de564bf",
      "tree": "cb8ea8ee6fe4a6ac2929ffa58261d0a5b57bc3d0",
      "parents": [
        "0d8e14190680b20e8a0fa75c63075ef73a922efd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 07 13:39:49 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 07 18:01:59 2016 -0700"
      },
      "message": "Extract strcasecmp and friends to \u003cbits/strcasecmp.h\u003e.\n\nBug: http://b/28067717\nChange-Id: I76bab098d4c35d07a7a108055c43c820087f9253\n"
    },
    {
      "commit": "b20c24456e43df430ec5626a68e5dc0dc6929344",
      "tree": "c9b85b4d913f8f2738bdc8772b9b9a21d6ab51dc",
      "parents": [
        "08a70184b42ef2963794a56233b0253e0b367253"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 06 15:04:08 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 06 15:52:22 2014 -0800"
      },
      "message": "Implement all the POSIX _l functions.\n\nStrictly speaking, this only implements the _l variants of the functions\nwe actually have. We\u0027re still missing nl_langinfo_l, for example, but we\ndon\u0027t have nl_langinfo either.\n\nChange-Id: Ie711c7b04e7b9100932a13f5a5d5b28847eb4c12\n"
    },
    {
      "commit": "8ca440089f37a11260a8a765acf50fb38fa08da4",
      "tree": "3bec325e8a900d10552a2a8d9081f49bd99b7194",
      "parents": [
        "54e9dc02138838fdb7a89e62467c369e3cf1f41f"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sat Jun 21 18:04:54 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Jun 23 08:30:40 2014 -0700"
      },
      "message": "Use __builtin_*_chk for bcopy/bzero.\n\nReplacing memmove/memset with their builtin check equivalents fixes an\nimplicit definition warning when only including strings.h.\n\nChange-Id: I74f03b9506ea37f5c2f9c11498e379a70998b430\n"
    },
    {
      "commit": "40fca0f08b1eb87e283d6f634d9759ed3161f517",
      "tree": "22a02418b0c225b4e994d8625970c3affe900eda",
      "parents": [
        "431aa4dc9282e23231ba9243f43fd3d49b5f88b3"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jun 04 08:53:33 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jun 05 11:05:10 2014 -0700"
      },
      "message": "Removes index() from bionic.\n\nThis function has been removed from POSIX.\n\nUnfortunately, we can\u0027t leave #define index(a, b) strchr((a), (b)) in its place\nbecause defining a preprocessor macro for index() breaks a whole lot of code.\n\nBug: 13935372\nChange-Id: Ifda348acde06da61c12e7ee2f8fe6950a3174dd1\n"
    },
    {
      "commit": "ce9ce28e5d760e32ab6c894dfaf7b8dad6de7ff6",
      "tree": "4df746aceda760ff26536720ff278ef77be39393",
      "parents": [
        "2f9400b679ffe08f7190781e64edda5edf0f7297"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 03 11:35:48 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 03 17:22:07 2014 -0700"
      },
      "message": "Removes bcopy and bzero from bionic.\n\nThese symbols are still defined for LP32 for binary compatibility, but\nthe declarations have been replaced with the POSIX recommended #defines.\n\nBug: 13935372\nChange-Id: Ief7e6ca012db374588ba5839f11e8f3a13a20467\n"
    },
    {
      "commit": "a6cde392765eb955cb4be5faa6ee62dcf77e8aa5",
      "tree": "c1553a2002af8470615afecb1a2fff9c29c2f916",
      "parents": [
        "227b47a461b27d746b373feb66001cdddc9ba1db"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Jun 29 08:15:25 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Jun 29 08:16:22 2013 -0700"
      },
      "message": "More FORTIFY_SOURCE functions under clang\n\n* bzero\n* umask\n* strlcat\n\nChange-Id: I65065208e0b8b37e10f6a266d5305de8fa9e59fc\n"
    },
    {
      "commit": "16d1af167f8e36a9aa4a07ae77034ad519b00463",
      "tree": "61abe872a5f2ebebc4fe15205a77158bc8372ec2",
      "parents": [
        "b24c0637d06fe0980b9e13a8d0c3e6f4dbda9cd5"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jun 17 14:49:19 2013 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jun 18 12:14:20 2013 -0700"
      },
      "message": "libc: add limited FORTIFY_SOURCE support for clang\n\nIn 829c089f83ddee37203b52bcb294867a9ae7bdbc, we disabled all\nFORTIFY_SOURCE support when compiling under clang. At the time,\nwe didn\u0027t have proper test cases, and couldn\u0027t easily create targeted\nclang tests.\n\nThis change re-enables FORTIFY_SOURCE support under clang for a\nlimited set of functions, where we have explicit unittests available.\nThe functions are:\n\n* memcpy\n* memmove\n* strcpy\n* strncpy\n* strcat\n* strncat\n* memset\n* strlen (with modifications)\n* strchr (with modifications)\n* strrchr (with modifications)\n\nIt may be possible, in the future, to enable other functions. However,\nI need to write unittests first.\n\nFor strlen, strchr, and strrchr, clang unconditionally calls the\nfortified version of the relevant function. If it doesn\u0027t know the\nsize of the buffer it\u0027s dealing with, it passes in ((size_t) -1),\nwhich is the largest possible size_t.\n\nI added two new clang specific unittest files, primarily copied\nfrom fortify?_test.cpp.\n\nI\u0027ve also rebuild the entire system with these changes, and didn\u0027t\nobserve any obvious problems.\n\nChange-Id: If12a15089bb0ffe93824b485290d05b14355fcaa\n"
    },
    {
      "commit": "890c8ed6ef773160cd6840a92e0d469fe530871f",
      "tree": "6689569955f500ea13697ea928386dd9c64d1af3",
      "parents": [
        "34895c1bdfa5df48ee9a7b4368b6def403f24cf1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 22 10:58:55 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 22 10:58:55 2013 -0700"
      },
      "message": "Fix builds where _FORTIFY_SOURCE is off.\n\nAlso add a more intention-revealing guard so we don\u0027t have loads of\nplaces checking whether our inlining macro is defined.\n\nChange-Id: I168860cedcfc798b07a5145bc48a125700265e47\n"
    },
    {
      "commit": "538f6fc202b07219ce78de54c0e05ab81e937154",
      "tree": "a8ed6260b45d305d695f99c7aa1b96e1617caaee",
      "parents": [
        "a0259b42eba08e6d71a274fa3f770afccbb93107"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 21 17:39:06 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 21 17:39:06 2013 -0800"
      },
      "message": "Stop advertising rindex(3), which is both deprecated and unimplemented.\n\nChange-Id: I3c775d9974e49c3f76a53e46e022659657b89034\n"
    },
    {
      "commit": "11ebbc8437af208f64861b7531502ff0eeb30e03",
      "tree": "0fbde52d13d9be98860d588530a320e4d7b3427f",
      "parents": [
        "ccd403161cdcc88a0ffcaecd1bc707e2d4c88a1c"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Feb 21 17:17:09 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Feb 21 17:17:09 2013 -0800"
      },
      "message": "libc: remove bcmp prototype\n\nAFAIK, bionic only ever provided an implementation of bcmp\nfor x86, and even then, the code was never actually compiled.\nRemove the prototype.\n\nbcmp() has been obsoleted and replaced by memcmp()\n\nChange-Id: I549d02ab6a9241a9acbbbfade0d98a9a02c2eaee\n"
    },
    {
      "commit": "71a18dd435e96564539b5af71b8ea5093a2109a1",
      "tree": "fd59c2a7cc23b663d090b0b8843a5d19c97df7d0",
      "parents": [
        "7d11009a970732ea18f8a0599d63c94eab9ec3f0"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jun 07 14:01:26 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jun 07 14:19:52 2012 -0700"
      },
      "message": "_FORTIFY_SOURCE: add memset / bzero support\n\nAdd _FORTIFY_SOURCE support for the following functions:\n\n* memset\n* bzero\n\nMove the __BIONIC_FORTIFY_INLINE definition to cdefs.h so it\ncan be used from multiple header files.\n\nChange-Id: Iead4d5e35de6ec97786d58ee12573f9b11135bb7\n"
    },
    {
      "commit": "70f1280ca9ccbf211da5514f01a77fad54e546a4",
      "tree": "62092cccd12a6c62d9f2e89e49766f560e6f948e",
      "parents": [
        "90ec5f2a3f581927ffef55733e8d531890fdc90e"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Jul 22 11:41:02 2009 +0200"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Jul 22 11:41:02 2009 +0200"
      },
      "message": "Make sure size_t is defined before used in strings.h\n\nOtherwise, including strings.h as the first file in a C file yields errors.\n\nThis fixes issue 3332.\n"
    },
    {
      "commit": "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349",
      "tree": "defd1cc07d16ad2f3b21154114e092d11c94c5bb",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
