)]}'
{
  "log": [
    {
      "commit": "7cebf835f310650f67b254295a685918681656fc",
      "tree": "daf485447fccb691750149c465b2c629adf6e305",
      "parents": [
        "a4110def5cec22306313a34fff64b5810c9b1792"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 12 14:25:41 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 12 15:52:14 2020 -0700"
      },
      "message": "Various coverage improvements.\n\nMostly from extra test cases, but also:\n\n* Move the fgets size \u003c 0 assertion into fgets.\n\n* Use ELF aliases for strtoq/strtouq rather than duplicating code.\n\n* Don\u0027t check uname() succeeded, since it can\u0027t fail.\n\nTest: treehugger\nChange-Id: I2e6b3b88b0a3eb16bd68be68b9bc9f40d8043291\n"
    },
    {
      "commit": "68ae6ad12e4f89526638f167c380d0b28b3bdeac",
      "tree": "e18075751c1f0d08d94d7c6be14e1a18b560b285",
      "parents": [
        "c79ea239415963d4a38752d0f3efe50531c8e04f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:11:30 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:34:58 2020 -0700"
      },
      "message": "Changes for #inclusivefixit.\n\nTest: treehugger\nChange-Id: I7ff0496c5c2792a41781e74634247f55b0548213\n"
    },
    {
      "commit": "50080a29f7327fcd009344844bb9e643b2d6b9c3",
      "tree": "41756be57e12ffe374147c12b954cfe01b44140c",
      "parents": [
        "745137c827f6e593ddf1c01783ca41a676ddd172"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 19 12:47:53 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 19 15:38:42 2019 -0700"
      },
      "message": "Remove the ___ hack.\n\nPlain __ for generated syscalls didn\u0027t mean it was a hidden symbol, it\njust meant \"please don\u0027t use this\". We added ___ to signify that a\nhidden symbol should be generated, but then we added the map files\nanyway so you now have to explicitly export symbols. Given that, this\nconvention serves no particular purpose so we may as well just use the\nnicer names have everything look the same.\n\nTest: treehugger\nChange-Id: If424e17a49c36f4be545f5d283c4561a6ea9c7ea\n"
    },
    {
      "commit": "c485cdb0249415b8aee5968b2b8854921e152854",
      "tree": "160af7094ea713aa83b280f594e4c834c4316bb3",
      "parents": [
        "0cd818a377157326ce326e8a48ea00882d1d1d06"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Apr 30 14:47:34 2019 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Sat May 04 00:28:00 2019 -0700"
      },
      "message": "Revert fwalk/sfp locking to fix concurrent reads\n\nThe locking can fail in a couple of ways:\n\n - A concurrent fread from an unbuffered or line-buffered file flushes\n   the output of other line-buffered files, and if _fwalk locks every\n   file, then the fread blocks until other file reads have completed.\n\n - __sfp can initialize a file lock while _fwalk is locking/unlocking it.\n\nFor now, revert to the behavior Bionic had in previous releases. This\ncommit reverts the file locking parts of commit\n468efc80da2504f4ae7de8b5e137426d44dda9d7.\n\nBug: http://b/131251441\nBug: http://b/130189834\nTest: bionic unit tests\nChange-Id: I9e20b9cd8ccd14e7962f7308e174f08af72b56c6\n"
    },
    {
      "commit": "fe88d26acaa8bfee2f3035ce039a581d8b798970",
      "tree": "165583c328389a1f24a786ba6a4b9e90466a3678",
      "parents": [
        "2059021322151b3ea560806558640aa130f13f8d",
        "ba1151c761534392faef9b1148aa554c671e0d91"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 26 22:00:31 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 26 22:00:31 2019 +0000"
      },
      "message": "Merge \"Typo fix in comment. O_CLOEXEC is e, not x.\""
    },
    {
      "commit": "ba1151c761534392faef9b1148aa554c671e0d91",
      "tree": "8c2fea0108e33e699099fe2a3a4b17d86e49e69b",
      "parents": [
        "e65558a0a4ad1f4aee5d63d0661b02f910e0cbd8"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Mar 26 13:01:22 2019 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Mar 26 13:01:22 2019 -0700"
      },
      "message": "Typo fix in comment. O_CLOEXEC is e, not x.\n\nTest: None\nBug: None\nChange-Id: I061fe1d3cac6307d878155f1fabdba70da8e9fd5\n"
    },
    {
      "commit": "b1ddbfdcdcbd583ae36ba31ad65ca4cb62e0733e",
      "tree": "91a782f954ce33d5058aa1106f1c8b593ca17efe",
      "parents": [
        "1b6517b60116cbdf3f864c6b8839d1561e77a118",
        "886370c2402e6fcf6ac613a8603f99fff66cd20c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 26 09:32:16 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 26 09:32:16 2019 +0000"
      },
      "message": "Merge \"Fix internal uses of _PATH_BSHELL.\""
    },
    {
      "commit": "886370c2402e6fcf6ac613a8603f99fff66cd20c",
      "tree": "55973f92a11704c20bc09aa8a74c2094c7b1c2a7",
      "parents": [
        "ebdf4c19f9e034d7ec8e0e57539890d5c93eaed1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 21 21:11:41 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 25 17:28:22 2019 -0700"
      },
      "message": "Fix internal uses of _PATH_BSHELL.\n\nWe regressed on this recently: code under the upstream-* directories has\n_PATH_BSHELL defined as a call to __bionic_get_shell_path(). In our own\ncode, we may as well just call it directly.\n\nBug: https://issuetracker.google.com/129030706\nTest: ran tests\nChange-Id: Ic2423f521272be95e67f94771772fe8072636ef0\n"
    },
    {
      "commit": "137b6f36ef5fea86e5b672188323e87dc0d66781",
      "tree": "2d44b9b1e095133b39e1ad4f51a9622cdef0d101",
      "parents": [
        "e187d92062b3a384f8c4730f93aa6c36e1c74b52"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 25 11:18:36 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 25 11:18:36 2019 -0700"
      },
      "message": "popen: stop using _fwalk.\n\nWe don\u0027t need this now that popen always uses O_CLOEXEC, and it\u0027s unsafe\nbecause _fwalk takes a lock. (In \u003c\u003d P, the equivalent code walked the\nlist without a lock in the child.)\n\nBug: http://b/129156634\nTest: ran tests\nChange-Id: Ic9cee7eb59cfc9397f370d1dc47ea3d3326179ca\n"
    },
    {
      "commit": "22917f63ee9ff25f629167b4a54f7d8be37da505",
      "tree": "a44ac1fae0dc4cc1f405096ef6cfd6e981afd5db",
      "parents": [
        "7208139406adbd40782ccd7554e1a21458da2b37"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 01 14:21:07 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 01 16:17:37 2018 -0700"
      },
      "message": "Make fclose/pclose distinct.\n\nI failed to convince the compiler/linker to just refrain (via factoring out,\nattribute `noinline`, or meddling with `--icf\u003dnone`), but luckily I noticed\nthat we should have CHECK_FP in each function for a better error message,\nand the distinct error messages keep the two functions apart.\n\n(Also add a missing CHECK_FP to `clearerr_unlocked`.)\n\nBug: http://b/116969207\nTest: manual with a modified `crasher`\nChange-Id: Ic122e90e94f7e22f486be57d3dac7137a225d682\n"
    },
    {
      "commit": "9b6fefd89bfdad7bbce10264754dac701c664414",
      "tree": "1519b2b2186964c44f9122e0c45c0950cb3a851f",
      "parents": [
        "b0c8a01de1dafc1e47f74895d00ca82429f851b3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 03 15:54:18 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 03 15:54:18 2018 -0700"
      },
      "message": "Make all popen(3) file descriptors O_CLOEXEC.\n\nPOSIX says \"The popen() function shall ensure that any streams from\nprevious popen() calls that remain open in the parent process are closed\nin the new child process\". It doesn\u0027t appear to disallow all popen(3) file\ndescriptors from being O_CLOEXEC, and it\u0027s not obvious why anyone would want\nthem inherited. Let\u0027s see if we can make the stricter guarantee...\n\nBug: N/A\nTest: ran tests\nChange-Id: I2c85170d730b211637afb8ba10df150ca3237262\n"
    },
    {
      "commit": "f6e5b582604715729b09db3e36a7aeb8c24b36a4",
      "tree": "1d68c449355f88a0652d3c1e2d6679b54fce1b20",
      "parents": [
        "ad596bf4fc406c0940d0f76f6b7c4ff22ecee7ac"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 01 15:30:54 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 14:28:54 2018 -0700"
      },
      "message": "Introduce api to track fd ownership in libc.\n\nAdd two functions to allow objects that own a file descriptor to\nenforce that only they can close their file descriptor.\n\nUse them in FILE* and DIR*.\n\nBug: http://b/110100358\nTest: bionic_unit_tests\nTest: aosp/master boots without errors\nTest: treehugger\nChange-Id: Iecd6e8b26c62217271e0822dc3d2d7888b091a45\n"
    },
    {
      "commit": "468efc80da2504f4ae7de8b5e137426d44dda9d7",
      "tree": "464d20ef3a5ae493a9728ddc53629764b59f300d",
      "parents": [
        "f0296f35f67cf4c112b3ed407858999bdc2f33b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 10 14:39:49 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 11 12:15:26 2018 -0700"
      },
      "message": "Reimplement popen(3)/pclose(3).\n\npclose(3) is now an alias for fclose(3). We could add a FORTIFY check\nthat you use pclose(3) if and only if you used popen(3), but there seems\nlittle value to that when we can just do the right thing.\n\nThis patch also adds the missing locking to _fwalk --- we need to lock\nboth the global list of FILE*s and also each FILE* we touch. POSIX says\nthat \"The popen() function shall ensure that any streams from previous\npopen() calls that remain open in the parent process are closed in the\nnew child process\", which we implement via _fwalk(fclose) in the child,\nbut we might want to just make *all* popen(3) file descriptors O_CLOEXEC\nin all cases.\n\nIgnore fewer errors in popen(3) failure cases.\n\nImprove popen(3) test coverage.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: Ic937594bf28ec88b375f7e5825b9c05f500af438\n"
    },
    {
      "commit": "90242350053e6fd2c03640d3f9b37864d18c414d",
      "tree": "86bd08eae994cc61618b28520cab3ea1b423493e",
      "parents": [
        "2bf1d3dae262f92dbc964be467060dc6a24787af"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 06 12:51:31 2018 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 06 13:35:56 2018 -0800"
      },
      "message": "Remove __overloadable/__RENAME_CLANG\n\nNow that we have a clang that supports transparent overloads, we can\nkill all of this cruft, and restore our upstream sources to their\nuntouched glory. Woohoo!\n\nBug: 12231437\nTest: Built aosp_marlin; no obvious patch-related aosp_mips issues.\nChange-Id: I520a19d014f12137f80e43f973dccd6711c571cd\n"
    },
    {
      "commit": "1a56a26f1169da432de36016ee3d2f37c71b4eef",
      "tree": "560c2beefecee676f192a3d4325480773e044c38",
      "parents": [
        "28f768d4e78851a20c9e222389d72cf3cf085141"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 08:53:49 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 08:53:49 2017 -0800"
      },
      "message": "Speed up __sfileext initialization.\n\nThe internal uses don\u0027t need to actually initialize a mutex since they\u0027ll\nnever escape and don\u0027t need locking. It\u0027s a small saving, but easy.\n\nBefore:\n\n  BM_stdio_scanf_d                    465 ns        465 ns    1507891\n  BM_stdio_scanf_maps                1836 ns       1836 ns     381082\n  BM_stdio_scanf_maps_baseline        846 ns        845 ns     830881\n  BM_stdio_scanf_s                    419 ns        419 ns    1671979\n\nAfter:\n\n  BM_stdio_scanf_d                    434 ns        434 ns    1612930\n  BM_stdio_scanf_maps                1815 ns       1815 ns     386470\n  BM_stdio_scanf_maps_baseline        875 ns        873 ns     803304\n  BM_stdio_scanf_s                    382 ns        382 ns    1833198\n\nBug: http://b/70862888\nTest: ran tests, benchmarks\nChange-Id: Ic8822aaca5d8ca1a73390089153d0fe35d91673e\n"
    },
    {
      "commit": "345b727e9606e8e159dd6b56854436168e9e8666",
      "tree": "8fc2972c3852c102f028ecb34b8f61acfd027878",
      "parents": [
        "843e34087454268fdb77fd4f02178b779553842b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 10 16:20:43 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 10 16:20:43 2017 -0800"
      },
      "message": "Move public scanf functions away from implementation.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ifb8bd91132865f8c6d0b95baf1021af3b3b3c353\n"
    },
    {
      "commit": "bf54986d19a9111554a6d5bfb4214080413e18ab",
      "tree": "4934981addd856f9e3ce95d311c3b8080dcca9c2",
      "parents": [
        "8697f10e747eada34fa91d838c1ce95b687068f5"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Nov 07 15:30:32 2017 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Nov 07 15:34:23 2017 -0800"
      },
      "message": "Allow 32-bit fseeko/fseeko64 SEEK_CUR/SEEK_SET to exceed 2 GiB\n\nBug: http://b/68837650\nTest: /data/nativetest/bionic-unit-tests/bionic-unit-tests\nTest: /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static\nTest: /data/nativetest64/bionic-unit-tests/bionic-unit-tests\nChange-Id: I367e0238c31d35f76d8ad89fd0aa27ecfeb7c149\n"
    },
    {
      "commit": "618303ca4ad2754071ba6955da690fec2b27a76d",
      "tree": "97f8db830c0241850a8bdb3008127b9a92afecfc",
      "parents": [
        "46621f43b083d9743545b31e97011a1c44e784b2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 02 16:58:44 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 02 16:58:44 2017 -0700"
      },
      "message": "More printf de-duplication.\n\nFix the \u0027j\u0027 (intmax_t/uintmax_t) length qualifier in the wide\nvariant. (With new tests that fail without this fix.)\n\nFix a typo in the wide support for intmax_t*, which isn\u0027t testable because\n%n is disabled on Android (and will be removed in a later cleanup pass).\n\nAlso move the public vfprintf/vfwprint functions into stdio.cpp.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: Ib003599b1e9cb789044a068940b59e447f2cb7cb\n"
    },
    {
      "commit": "37ad9597839c70a7ec79578e5072df9c189fc830",
      "tree": "f1f70a143c99b072b040f5592f1b42da464b35f8",
      "parents": [
        "e379a202504911d228ae07d9ba32c5a02274fe1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 17:47:12 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 13:23:41 2017 -0700"
      },
      "message": "More missing _unlocked \u003cstdio.h\u003e functions.\n\nAlso simplify trivial one-liners like perror/puts/fputs, and clean up\nfread/fwrite slightly.\n\nFix perror to match POSIX.\n\nAdd basic perror and *_unlocked tests.\n\nBug: N/A\nTest: ran tests\nChange-Id: I63f83c8e0c15c3c4096509d17421ac331b6fc23d\n"
    },
    {
      "commit": "d162060928ceb7832766f386bf27b6e3003c2951",
      "tree": "919de1c6bf179237287da858cad6a94e83c5c1f3",
      "parents": [
        "c189e43f1009529e31cdbbf4225cb3f78e724552"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 05 13:48:08 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 23 12:48:08 2017 -0700"
      },
      "message": "Add explicit null checks to some stdio functions.\n\nApplications fopening files and then blindly trying to read are\nwidespread, leading to a recurring problem of SELinux tightening\nresulting in segfaults. Add a friendly diagnostic for this case.\n\nBug: http://b/67455242\nTest: bionic-unit-tests32/64 on sailfish\nChange-Id: I1734fa94487c4eff9b55a02c6b01baf6b265d236\n"
    },
    {
      "commit": "33a8cb1d1a32b40406ec643f4a781c4a592a6f44",
      "tree": "06be4fc0f936ba60093cb4e4c1133500a6c2bda4",
      "parents": [
        "33f9043f482769c35f82df9d25b4ccc8f1193229"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 25 18:06:46 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 25 18:11:23 2017 -0700"
      },
      "message": "Use O_APPEND for stdio append mode.\n\n\"Although not explicitly required by this volume of POSIX.1-2008, a good\nimplementation of append (a) mode would cause the O_APPEND flag to be set.\"\n\nYeah, about that...\n\nBug: N/A\nTest: ran tests\nChange-Id: I23c4bc5c1ebc92e0cb44025d2d313f321f9ffa68\n"
    },
    {
      "commit": "80e4c1529d1b63ee0b7f6f6ad7900885ba1c0b51",
      "tree": "10d3bbc98daa42f9dcde176b9eb9e3a5da42aeb5",
      "parents": [
        "0d6485eca47f0e860486795b2da97679948fd5d5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 21 13:57:55 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 11:58:23 2017 -0700"
      },
      "message": "Remove the HASLB and FREEUB macros.\n\nBecause we hate macros.\n\nBug: N/A\nTest: ran tests\nChange-Id: I2c94085ff502ec5ce6d8598ec6b3c10e7a4b5510\n"
    },
    {
      "commit": "3037ea43fccf5ec64537c3ee024bc726ee723c01",
      "tree": "830fda3221eb1207bb837f78298032be2d2c1706",
      "parents": [
        "d8244214751f9b48e60e69910c4e7175f8fab1ac"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 06 15:46:45 2016 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 20 10:10:45 2016 -0700"
      },
      "message": "Fix stdin/stdout/stderr for pre-M.\n\nThis wasn\u0027t an array of pointers, it was an array of structs.\nUnfortunately we need a complete type to index into the struct for\nstdin/stdout/stderr, so add a phony struct that matches the size and\nalignment of `struct __sFILE`. This property is guaranteed by the\nstatic_asserts in libc/bionic/struct_file_test.cpp.\n\nTest: mma\nBug: http://b/30465923\nChange-Id: I8ce851dd64a261703bb44f9b5cd23b7caff4dd68\n"
    },
    {
      "commit": "fb3873d4db3012ac2d1ba87d688138798787c6e0",
      "tree": "1e392110ebe5ca3b0f3f466e493c1085b403b864",
      "parents": [
        "f5042cab109f7136191fd316be1471532d2ddf71"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 10 11:07:54 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 10 11:50:12 2016 -0700"
      },
      "message": "Fortify vsnprintf in more cases.\n\nBug: http://b/30445072\nChange-Id: I1893890f0e3b56533eef053eda1bd96a0b9a5119\n"
    },
    {
      "commit": "53cf348c829cb36328755bbdbe46668ecbc55348",
      "tree": "261d3370757fb0ae1f8f63b344802e62ed9aefe8",
      "parents": [
        "6ba5f07e3f6dbc487eb2cd341a9a4e804afafd51"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 09 13:06:41 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 09 16:27:23 2016 -0700"
      },
      "message": "Remove more stdio copy/paste.\n\nChange-Id: Ia92629b75d2c153ecf1cec711e2f9575eef604ab\n"
    },
    {
      "commit": "d1f25a7eb171b490be59271e9ce619e236421aeb",
      "tree": "a094178ff6ae9af3f476c0480087a09a63a37000",
      "parents": [
        "ed9e6a41c92c9552be84ecc126e29b4604eee246"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 05 15:53:03 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 05 15:53:03 2016 -0700"
      },
      "message": "Reimplement remove(3) without the lstat(2).\n\nThis assumes that it\u0027s more likely we\u0027re unlinking a file than a directory,\nthough even if that\u0027s not true, as long as a failed unlink(2) is cheaper\nthan a successful lstat(2) -- which seems likely since there\u0027s no data to\ncopy -- we still win.\n\nChange-Id: I0210e9cd3d31b8cf1813c55c810262ef327382ed\n"
    },
    {
      "commit": "70715da453670b40701ea7d02ea9f702d10d783b",
      "tree": "a8e6c37cf0d36012df03ac0d68f395cb2d6e2f0d",
      "parents": [
        "a86e11f529aca06b2f4d5141ea838f2bc5ae9a73"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 01 16:35:17 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 01 18:06:38 2016 -0700"
      },
      "message": "More stdio one-liners.\n\nThis actually turns up a bug in fmemopen, so I guess that\u0027s what I\u0027ll\nlook at next...\n\nChange-Id: I2971ecd1b5a3a3c7f43c22d985f88e389af89e97\n"
    },
    {
      "commit": "cceaf069c7d203d63de6e8ca95e1d93ec32e7e0e",
      "tree": "5b9791a7a16b3bd823c255692376a1d02aab5cfb",
      "parents": [
        "9a776af9920c050c7bd7353f33e0e02df940cf92"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 29 16:31:52 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 29 16:31:52 2016 -0700"
      },
      "message": "More stdio cleanup.\n\nTime to get back to cleaning up stdio, so start with a bunch of easy\none-liners...\n\nChange-Id: I8df5fdc72500a89b977bfaa6c64c3639198d4e3e\n"
    },
    {
      "commit": "20788aec002ab3f6dea4e01665a439933161d11c",
      "tree": "cb77d4d956f2377e762476a96cfe92b4dcaf6a94",
      "parents": [
        "70d99a1053542b8c062e6cb7eca2bcfb16c25d55"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 09 15:16:32 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 09 15:16:32 2016 -0700"
      },
      "message": "Add ctermid.\n\nChange-Id: I7c7c815c2725df222932db923632c8b6419741ab\n"
    },
    {
      "commit": "62e3a078aa7b156139b1a2cec77e1a84eb10c5a4",
      "tree": "b37425943e0cd7284b319d6cad98bd71dcfdc8bb",
      "parents": [
        "9ee905f12fa0aeb4ae0df708e15d2ffcfaf58000"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I84effbdfa1b9b39328a909b7f70fe17e7ee316c8\n"
    },
    {
      "commit": "f226ee59e0effedeabed09e2d65be7fa7499cc25",
      "tree": "60b192388b5575a5315d7e9ea2b5b4ffa29ed59f",
      "parents": [
        "a279324094d748b97201412b2457d2f6e26287dd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 03 11:24:28 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 03 11:24:28 2016 -0800"
      },
      "message": "Add fopen64/freopen64/tmpfile64 aliases.\n\nOur fopen/freopen/tmpfile are already always O_LARGEFILE, but let\u0027s add\nthe aliases for _LARGEFILE_SOURCE compatibility.\n\nBug: http://b/24807045\nChange-Id: I5d99b3ef3c9f27ce70f13313f6a92e96c7f21f80\n"
    },
    {
      "commit": "955426ef79ae635b74ff917c2b9ebc1a24c6a3ef",
      "tree": "76d5403eaa41b9a00aa4447ae5700eb77170310f",
      "parents": [
        "194860a9e638b1d093857f08b8fad37c9ec0e113"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 18:25:52 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 18:25:52 2016 -0800"
      },
      "message": "Fix a sign extension bug in stdio.\n\nThis also lets us test the EOVERFLOW behavior, which pointed out that the\nfgetpos/fsetpos return on failure has always been wrong...\n\nBug: http://b/24807045\nChange-Id: I35273eb07c8c9155af858adb27569983397580b6\n"
    },
    {
      "commit": "03e65eb03bf0bfaafa797daf91e80e8308968db3",
      "tree": "9f3158666a6a63833a0ae6beb23f3e0979de1fd8",
      "parents": [
        "ced73ee45e04a991ce1295a38364568a17884eed"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 14:13:04 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 14:45:13 2016 -0800"
      },
      "message": "Implement funopen64.\n\nBug: http://b/24807045\nChange-Id: I161920978161389be34b707cc6ce8e05f760d552\n"
    },
    {
      "commit": "9677fab88c25fd2e6f3149ad00fb8870963f0675",
      "tree": "365bc8bb9137d504717b88444cdc1262a6c58df3",
      "parents": [
        "ac67b4eb7c70ea668abb32298b0cb16920a32a66"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 25 15:50:59 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 09:14:41 2016 -0800"
      },
      "message": "Support _FILE_OFFSET_BITS\u003d64 for most of \u003cstdio.h\u003e.\n\nThis doesn\u0027t address funopen, but does add fgetpos/fsetpos/fseeko/ftello.\n\nBug: http://b/24807045\nChange-Id: Ibff6f00df5fb699c8e8f13b91a75caf024540b73\n"
    },
    {
      "commit": "023c3071a036d84bbd7973edef152c5a48679cb7",
      "tree": "342f0334af5820fe0a04bc968133bfc368327872",
      "parents": [
        "8fb40bad496c680b5ca644dbf6a2ada79a239eee"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 22 15:04:51 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 22 23:54:10 2016 -0800"
      },
      "message": "Add _seek64 to FILE.\n\nMove fdopen/fopen/freopen and change them to initialize _seek64 instead\nof the legacy _seek. The in-memory streams can stick with _seek for now,\nsince you\u0027re not going to fit a \u003e 4GiB in-memory stream on a 32-bit device\nanyway.\n\nBug: http://b/24807045\nChange-Id: I09dcb426817b571415ce24d4d15f364cdda395b3\n"
    },
    {
      "commit": "b877601bff1fcc60c7ea2180d15e38b1e873f36e",
      "tree": "03e00ce79d772a97ec4df86adc66de71984bbd04",
      "parents": [
        "a42483baad9a37297e6bbbe02d433ecbde890386"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 22 19:18:48 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 22 19:23:40 2016 -0800"
      },
      "message": "Put struct FILE back how NDK-built apps expect it.\n\nThe first rule of stdio is you never change struct FILE. This broke all\nNDK-built apps that used stdin/stdout/stderr. (Which is more than you\nmight think, given that those streams don\u0027t go anywhere useful. Svelte!)\n\nI\u0027ve added a big code comment because I knew when I removed the field that\ndoing so was a mistake, but I couldn\u0027t think why.\n\nBug: http://b/24807045\nBug: http://b/26747402\nChange-Id: Ie1233586b223bb1cdf8e354c66d5ff23487a833a\n"
    },
    {
      "commit": "2704bd13409a77237147f861c43796148326b2e3",
      "tree": "c2433fa289edb2a7654a3c1caa2ad3c21c60e23d",
      "parents": [
        "5f1ff279ea6aa4c35c59a81018131810e35b2bff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 20 17:14:53 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 21 10:34:35 2016 -0800"
      },
      "message": "Simplify fseek/ftell.\n\nAnother step towards _FILE_OFFSET_BITS\u003d64 support.\n\nBug: http://b/24807045\nChange-Id: I00b83c81a7b108176c4d9437bc32611f73b7e967\n"
    },
    {
      "commit": "021335ebdac3768be571ea2fd0cb776b29a7f2df",
      "tree": "04094c14eefe610b7c7b263bb631af0a6be1e141",
      "parents": [
        "8b49f53a5e3b4073c9341a5be6c9deb9a1666e7e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 19 16:28:15 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 20 08:50:51 2016 -0800"
      },
      "message": "Move stdio implementation details around a little.\n\nChange-Id: I24594426d5479bdd55cbef0ab1b7d76c249dbd0c\n"
    },
    {
      "commit": "923f165b29866cba1bd077117127f576763b384d",
      "tree": "c5c05829f199caba0e483769023eed1e3d37206c",
      "parents": [
        "579f42b78922d8c70e19ea77d2818ec17d0dc6a7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 19 15:46:05 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 19 15:46:05 2016 -0800"
      },
      "message": "Make FILE*s less usable after fclose(3).\n\nBSD doesn\u0027t invalidate the fd stored in struct FILE, which can make\nit possible (via fileno(3), for example), to perform operations on\nan fd you didn\u0027t intend to (rather than just failing with EBADF).\n\nFixing this makes the code slightly simpler anyway, and might help\ncatch bad code before it ships.\n\nBug: http://stackoverflow.com/questions/10816837/fclose-works-differently-on-android-and-linux\nChange-Id: I9db74584038229499197a2695c70b58ed0372a87\n"
    },
    {
      "commit": "29ee6397a844e2d88f776f5c0b4e656e58df9840",
      "tree": "078285424dafe2647378eb79e5b039c9572d439f",
      "parents": [
        "c4eef1fb5ba325317e94b598c6fbf8e4c4bf83e1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 07 11:07:15 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 07 11:07:15 2015 -0800"
      },
      "message": "Fix stdio static initializers to make both clang and GCC happy.\n\nPreviously only clang was happy. GCC said:\n\n  error: missing initializer for field \u0027wcio_mbstate_in\u0027 of \u0027struct wchar_io_data\u0027\n\nChange-Id: I25a11b64f4dfa22a5dd5daded152191fe2cfacaf\n"
    },
    {
      "commit": "bb46afd6c44a847efe96e30d72708fd2d0906e8c",
      "tree": "9223b0b3f481341e36fc054e7209de3ec088a579",
      "parents": [
        "0d89913e74981cd51532e66a2e2f138392be4de1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 18:03:12 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Dec 05 07:30:59 2015 -0800"
      },
      "message": "Revert \"Revert \"Remove __sinit and __sdidinit.\"\"\n\nThis reverts commit c8bae05f3ff9f1c736f7be70fa17d02795d748bb.\n\nWe were breaking init (ueventd) because we initialize system properties\nbefore we initialize stdio. The new system property implementation uses\nstdio to read from /property_contexts, so we end up touching stdio data\nstructures before they\u0027ve been initialized.\n\nThis second attempt takes things further by removing the stdio initialization\nfunction altogether. The data structures for stdin/stdout/stderr can be\nstatically initialized as data, and -- since we already had to give the\natexit implementation a backdoor for stdio -- we can just admit that we\nneed to clean up stdio, and that we always do so last.\n\nThis patch also removes the 17 statically pre-allocated file structures,\nso the first fopen will now allocate a block of 10 (the usual overflow\nbehavior). I did this just to make my life simpler, but it\u0027s not actually\nnecessary to remove it if we want it back.\n\nChange-Id: I936b2eb5e88e4ebaf5516121872b71fc88e5609c\n"
    },
    {
      "commit": "c8bae05f3ff9f1c736f7be70fa17d02795d748bb",
      "tree": "66de08608fd3b91963a647f70c7e0cfa65eaea07",
      "parents": [
        "4ade5195f188b84ce3599c71ef058d040b141da4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 17:47:20 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 17:47:20 2015 -0800"
      },
      "message": "Revert \"Remove __sinit and __sdidinit.\"\n\nThis reverts commit 4371961e00ad83fca033992c8a19c7d262fe6f84.\n\nThis broke booting; ueventd crashes with a null pointer dereference\nsomewhere in __sfp (but the kernel doesn\u0027t unwind, so I don\u0027t know\nwhat was calling __sfp).\n\nChange-Id: I65375fdfdf1d339a06558b4057b580cacd6324e2\n"
    },
    {
      "commit": "4371961e00ad83fca033992c8a19c7d262fe6f84",
      "tree": "414fdfe263a993592ff18cdfb8fe4d9d2d3a16ce",
      "parents": [
        "22dca83e1c37d3b465b9fa432bbf7cb4bd0df868"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 03 13:23:03 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 03 13:23:03 2015 -0800"
      },
      "message": "Remove __sinit and __sdidinit.\n\nWe\u0027re eagerly initializing stdio now, so this can all be simplified.\n\nChange-Id: Icb288f8dd0ee08f02bea0d23670f75e78bed6b99\n"
    },
    {
      "commit": "f0141dfab10a4b332769d52fa76631a64741297a",
      "tree": "79595f40434f33a870ac4b79b9916a9408b88a8a",
      "parents": [
        "e78392637d5086384a5631ddfdfa8d7ec8326ee3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 12 12:44:23 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 12 12:53:42 2015 -0700"
      },
      "message": "Make struct FILE opaque.\n\nBug: http://b/24807045\nChange-Id: I3cb4e436325a65bef3b203e3970e4d967101fcce\n"
    },
    {
      "commit": "6c1e3f6e56364141dc0afd467e3dd414bee99412",
      "tree": "422876b7cccf14733584ee1359ecb67bdd6c0f91",
      "parents": [
        "7ef5d8b8454443e79f109a5f83ab40e4c602b88d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 14:50:20 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 14:50:20 2014 -0800"
      },
      "message": "Remove unnecessary #undefs from AOSP.\n\nThis is a manual revert of 111461aaaec2b7d9ffa5f3baabb1bd019d2e0c1d.\ngit revert does the wrong thing because that patch shares lines (that we\nwant to keep) with 168667c972a1e9ede5b64ad6cee0666e9b96d4d8 and git\nrevert just removes them.\n\nChange-Id: I83ac8c95e5c90a4137b7742a9b7536e1627f1ac7\n"
    },
    {
      "commit": "12b7dd0900a6760a47c765decfc6cdec75883d35",
      "tree": "91f9d339d1dc1d36d354c899df9b5a222dd58db8",
      "parents": [
        "de88381c19ad9a23b5d26eb51b7591a7e7e6be50",
        "152e978f73fc6cd37d0d82de69f1cf8134b34b90"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 19:16:51 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Dec 02 19:16:51 2014 +0000"
      },
      "message": "am 152e978f: Merge \"Put stdin/stdout/stderr symbols in place.\" into lmp-mr1-dev\n\n* commit \u0027152e978f73fc6cd37d0d82de69f1cf8134b34b90\u0027:\n  Put stdin/stdout/stderr symbols in place.\n"
    },
    {
      "commit": "111461aaaec2b7d9ffa5f3baabb1bd019d2e0c1d",
      "tree": "6a63b11629ce030173ae7d229c7eb0fa8632d57b",
      "parents": [
        "432f645887466ed7099addb20fa8915c8a29fcab"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 01 21:27:59 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 01 21:27:59 2014 -0800"
      },
      "message": "Put stdin/stdout/stderr symbols in place.\n\nTo help with future binary compatibility.\n\nBug: 18553223\nChange-Id: Ia8103b4f189c18528b11948ac9e520f61b9ccc0e\n"
    },
    {
      "commit": "168667c972a1e9ede5b64ad6cee0666e9b96d4d8",
      "tree": "d4312b237b885460537ce9dc8fe53e26564a7d48",
      "parents": [
        "898aab282cff2a2949bc1726f8a4b81c1c30148e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 14 14:42:59 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 14 14:42:59 2014 -0800"
      },
      "message": "Add non-macro stdin/stdout/stderr too.\n\nVarious C and C++ standards explicitly say that stdin/stdout/stderr\nshould be macros, but glibc makes them global variables too. This\nmeans it\u0027s possible to write code that uses those names as locals,\nbut that code (toybox being an example) won\u0027t build on bionic.\n\nIf we\u0027d done this earlier, we could have hidden __sF for LP64, but\nit\u0027s too late now.\n\nChange-Id: I90cf8c73f52b66e1760b8fa2e135b9f9f9651230\n"
    },
    {
      "commit": "dc6599e20f6a2a82c35533fba36d16fd43c53273",
      "tree": "cee1bf160dc3d5d0b1712126a6187325e24efd35",
      "parents": [
        "695781b6f0419f82939176a6ec1a240300d9f036"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Nov 04 12:09:35 2014 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Nov 04 12:09:35 2014 -0800"
      },
      "message": "Fix warning of missing field initializer.\n\nBUG: 18241135\nChange-Id: I91304eb608bc3336ce5fcd5744fbe080d64f1cc2\n"
    },
    {
      "commit": "d18f4b25785761c022906b93b2123b3be90182e8",
      "tree": "5c4f679c6b6a483ac0cddea1f17a6f614edb577c",
      "parents": [
        "445111a1c977e94a4233efd54f3690defa4a7582"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 03 12:32:17 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 03 13:46:41 2014 -0800"
      },
      "message": "Ensure we initialize stdin/stdout/stderr\u0027s recursive mutexes.\n\n(cherry-pick of 6a03abcfd23f31d1df06eb0059830e22621282bb.)\n\nBug: 18208568\nChange-Id: I9da16ce0f9375bc363d1d02be706d73fd3b1e150\n"
    },
    {
      "commit": "6a03abcfd23f31d1df06eb0059830e22621282bb",
      "tree": "7a6a1e6ee2ece560d31580c662060bda3d2d004b",
      "parents": [
        "38ff8822763a30d4c9033a38ec8b71fcd17aba87"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 03 12:32:17 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 03 12:32:17 2014 -0800"
      },
      "message": "Ensure we initialize stdin/stdout/stderr\u0027s recursive mutexes.\n\nBug: 18208568\nChange-Id: I9da16ce0f9375bc363d1d02be706d73fd3b1e150\n"
    },
    {
      "commit": "c08c25b4c9bdd95bfbda56a8c21f51b88c8a692e",
      "tree": "815a82fa0236c4f5c068ceb97c058bca1c639c57",
      "parents": [
        "fc5a93f7a2ea2be740f2c909e8a6a192fa65adc8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 24 10:27:09 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 24 10:32:30 2014 -0700"
      },
      "message": "Sync with upstream findfp.c.\n\nChange-Id: Ib298f46de0c4d0fd4ce0a9b456c163e8b8b06342\n"
    },
    {
      "commit": "623b0d05bd924e7fa3c155492695123c87c3a2b1",
      "tree": "8fa47b2bf2fb7abe4b168fb1009108cdd762f6e3",
      "parents": [
        "089c7c921786ff6255526feec96552fc16ada7f4"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 14 23:11:05 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu May 15 13:05:21 2014 -0700"
      },
      "message": "Register _cleanup function with atexit\n\n * Register cleanup function with atexit\n   instead of calling it explicitly on\n   exit()\n * abort() no longer calls _cleanup:\n   Flushing stdio buffers on abort is no\n   longer required by POSIX.\n * dlmalloc no longer need to reset cleanup\n   (see above)\n * Upstream findfp.c makebuf.c setvbuf.cexit.c\n   to openbsd versions.\n\nBug: 14415367\nChange-Id: I277058852485a9d3dbb13e5c232db5f9948d78ac\n"
    },
    {
      "commit": "01ae00f3170ad0e36c1657f6ff8c89dfa730fd37",
      "tree": "ad9cd6e6b1ee5b01dcc03f09495ee786ea0a12ec",
      "parents": [
        "c6e563c87a7d8329607bccbc5c4a61c4e1180507"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 29 16:28:56 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 29 16:28:56 2014 -0700"
      },
      "message": "Switch to the OpenBSD implementations of the wide scanf functions.\n\nThis also gets us the C99 wcstoimax and wcstoumax, and a working fgetwc and\nungetwc, all of which are needed in the implementation.\n\nThis also brings several other files closer to upstream.\n\nChange-Id: I23b025a8237a6dbb9aa50d2a96765ea729a85579\n"
    },
    {
      "commit": "c20de902875dcaebde0ccd0b7a8351598f254d4c",
      "tree": "cb4a8a75dd787d93bca11fc0a2da944a7fc2e76f",
      "parents": [
        "849e162d3bedc5ca61bdf15486268b253b9f4e93"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Mar 20 15:21:32 2014 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Mar 21 09:59:34 2014 +0000"
      },
      "message": "Remove ALIGNBYTES and ALIGN from \u003csys/param.h\u003e\n\nThere are only three users of bionic definition of ALIGN and keeping it\nin sys/param.h polutes the namespace.\n\nI inline the definition in the the three places that\u0027s used.\n\nBug: 13400663\nChange-Id: I565008e8426c38ffb07422f42cd8e547d53044e9\n"
    },
    {
      "commit": "eb847bc8666842a3cfc9c06e8458ad1abebebaf0",
      "tree": "15e070fb706ba7599d5f402a8f934a7399541a6a",
      "parents": [
        "0c17099a71cb5d1b36b7aab66fd7341b3fc9106d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 15:50:50 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:00:17 2013 -0700"
      },
      "message": "Fix x86_64 build, clean up intermediate libraries.\n\nThe x86_64 build was failing because clone.S had a call to __thread_entry which\nwas being added to a different intermediate .a on the way to making libc.so,\nand the linker couldn\u0027t guarantee statically that such a relocation would be\npossible.\n\n  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against \u0027__thread_entry\u0027 which may overflow at runtime; recompile with -fPIC\n\nThis patch addresses that by ensuring that the caller and callee end up in the\nsame intermediate .a. While I\u0027m here, I\u0027ve tried to clean up some of the mess\nthat led to this situation too. In particular, this removes libc/private/ from\nthe default include path (except for the DNS code), and splits out the DNS\ncode into its own library (since it\u0027s a weird special case of upstream NetBSD\ncode that\u0027s diverged so heavily it\u0027s unlikely ever to get back in sync).\n\nThere\u0027s more cleanup of the DNS situation possible, but this is definitely a\nstep in the right direction, and it\u0027s more than enough to get x86_64 building\ncleanly.\n\nChange-Id: I00425a7245b7a2573df16cc38798187d0729e7c4\n"
    },
    {
      "commit": "61e699a133a4807fe878a6cb0d7190d7c96e21f8",
      "tree": "12dd46e7f8e5f7172a3fe0fd9075fa929cbb1001",
      "parents": [
        "5cde15eb17f4ddc0949c0cbd38a46e6c0bad7019"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 12 14:05:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 12 14:14:53 2013 -0700"
      },
      "message": "Clean up abort.\n\n* A dlmalloc usage error shouldn\u0027t call abort(3) because we want to\n  cause a SIGSEGV by writing the address dlmalloc didn\u0027t like to an\n  address the kernel won\u0027t like, so that debuggerd will dump the\n  memory around the address that upset dlmalloc.\n\n* Switch to the simpler FreeBSD/NetBSD style of registering stdio\n  cleanup. Hopefully this will let us simplify more of the stdio\n  implementation.\n\n* Clear the stdio cleanup handler before we abort because of a dlmalloc\n  corruption error. This fixes the reported bug, where we\u0027d hang inside\n  dlmalloc because the stdio cleanup reentered dlmalloc.\n\nBug: 9301265\nChange-Id: Ief31b389455d6876e5a68f0f5429567d37277dbc\n"
    },
    {
      "commit": "9831ad3ce6bd5b22da16a275ed67e7236eae3d1f",
      "tree": "2f5152add91760c209361fb918ad83a4f24b3502",
      "parents": [
        "4b469eae40368913b2841b390dada6c58296c602"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Aug 29 21:43:46 2011 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Nov 15 13:16:42 2011 +0100"
      },
      "message": "libc: speed-up flockfile()/funlockfile()\n\nFor Honeycomb, we added proper file thread-safety for\nall FILE* operations. However, we did implement that by\nusing an out-of-band hash table to map FILE* pointers\nto phtread_mutex_t mutexes, because we couldn\u0027t change\nthe size of \u0027struct _sFILE\u0027 without breaking the ABI.\n\nIt turns out that our BSD-derived code already has\nsome support code to extend FILE* objects, so use it\ninstead. See libc/stdio/fileext.h\n\nThis patch gets rid of the hash table, and put the\nmutex directly into the sFILE extension.\n\nChange-Id: If1c3fe0a0a89da49c568e9a7560b7827737ff4d0\n"
    },
    {
      "commit": "f582340a6a48588aa50da17e1620e8f91b146941",
      "tree": "d30c0ffb648b7a43ff469f89f05850f5008482ec",
      "parents": [
        "72f9a5c374bf559e9c69a62c1d95304f913ef6b2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sat Feb 12 07:13:44 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 14 09:32:56 2011 -0800"
      },
      "message": "Fix the handle locking in stdio\n\nFix the handle locking in stdio to use flockfile/funlockfile\ninternally when and where required.  Macros in \u003cstdio.h\u003e are updated\nto automatically call the underlying functions when the process is\nthreaded to obtain the necessary locking.  A private mutex is added\nto protect __sglue, the internal list of FILE handles, and another\nto protect the one-time initialization.  Some routines in libc that\nuse getc() change to use getc_unlocked() as they\u0027re either protected\nby their own lock or aren\u0027t thread-safe routines anyway.\n\nBased on OpenBSD change by guenther@openbsd.org\nhttp://www.mail-archive.com/source-changes@cvs.openbsd.org/msg01015.html\n\nBug: 3446659\nChange-Id: Ie82116e358c541718d6709ec45ca6796be5a007b\n"
    },
    {
      "commit": "b4867734b06a18494976934c6f33ff2549595e3f",
      "tree": "e0872aed3956ed9a5f8e66457acf71b0c066c96d",
      "parents": [
        "f67e5211e045af1b12f646448a5a35f96ba5e8f1"
      ],
      "author": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Fri Oct 15 00:50:45 2010 +0800"
      },
      "committer": {
        "name": "Jim Huang",
        "email": "jserv@0xlab.org",
        "time": "Fri Oct 15 01:10:31 2010 +0800"
      },
      "message": "stdio: make internal symbols static/hidden\n\nAlthough header libc/stdio/local.h declares the macros and private\nvariables of stdio, there are several internal symbols exposed\nunexpectedly.\n\nChange-Id: Ie7a07f85b70322fb9cd05b3c8e1bcc416061eb4b\n"
    },
    {
      "commit": "a910abcd194830d2d113b3e183eb7df4d36cd92e",
      "tree": "291303f658796db61bcbf9b8107b3a88a4f83c79",
      "parents": [
        "1297428e89ead45849068989d334d8b7eae2f602"
      ],
      "author": {
        "name": "André Goddard Rosa",
        "email": "andre.goddard@gmail.com",
        "time": "Sat Jan 30 22:46:25 2010 -0200"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon May 17 09:34:13 2010 -0700"
      },
      "message": "improve readability of stdio: fix indentation and remove trailing spaces\n\nChange-Id: Ic51e58a7c75d20bf770dc0ebd7f97a338fbe0036\nSigned-off-by: André Goddard Rosa \u003candre.goddard@gmail.com\u003e\n"
    },
    {
      "commit": "1dc9e472e19acfe6dc7f41e429236e7eef7ceda1",
      "tree": "3be0c520fae17689bbf5584e1136fb820caef26f",
      "parents": [
        "1767f908af327fa388b1c66883760ad851267013"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "1767f908af327fa388b1c66883760ad851267013",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "a799b53f10e5a6fd51fef4436cfb7ec99836a516"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\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"
    }
  ]
}
