)]}'
{
  "log": [
    {
      "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": "f340a56d1c7aa469ccb4150521aba19f5c73dcf0",
      "tree": "cc41e09773b753e85fb7a503cd257cf808fea7c0",
      "parents": [
        "74934aaf10d629de477095f0b92c467849f89638"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 06 10:42:40 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 06 10:42:40 2018 -0700"
      },
      "message": "Use strerror_r(3) for the printf family %m.\n\nThere\u0027s TLS space used for unknown errno values, and a call to printf\nshouldn\u0027t clobber that. No-one will ever hit this in real life, but\nsince it\u0027s easily fixed...\n\nBug: http://b/112776560\nTest: ran tests\nChange-Id: I8c2437f2e5214e652119791d4e162a197b049d5b\n"
    },
    {
      "commit": "654cd8331b3dafb2027a3062104c6e9934af1935",
      "tree": "82562a68054fbcbe65259cd594290278ca94f8fc",
      "parents": [
        "003521af4760215c9c3b8ba80c88dd3b3c87ab67"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 30 16:00:42 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 30 16:00:42 2018 -0700"
      },
      "message": "Add the %m GNU extension to printf/wprintf.\n\nAnd remove the local hack from syslog(3).\n\nBug: http://b/112776560\nTest: ran tests\nChange-Id: I5807e729a978df26187ea0ee255bba4ca74220c8\n"
    },
    {
      "commit": "fa5410fdb7664e4561f5adcee406b1913f520d77",
      "tree": "4dc35e592835307b61e88534a7a054dc90cf0759",
      "parents": [
        "a7573441c1274bbdb3fc992d068ebf97b30a0208"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Aug 13 17:44:06 2018 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Aug 15 10:11:08 2018 -0700"
      },
      "message": "libc: enable -Wimplicit-fallthrough\n\nlibc had some -Wimplicit-fallthrough warnings. They all seem to be\nbenign. We\u0027re trying to enable this flag globally, so we need to\nannotate these breaks here.\n\nBug: 112564944\nTest: Builds\nChange-Id: I5afae694cc4cf26ad1a61e2c8ae91f00cda7c733\n"
    },
    {
      "commit": "f80e3f4413e25a2f77e3da938d9f8b2c752b9c2c",
      "tree": "b5d729ac74cd29b0ddae08f7db97e6083fb87c7a",
      "parents": [
        "782cd01b098f86bef787955d5264e694d0e7e807",
        "9b6fefd89bfdad7bbce10264754dac701c664414"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 06 18:43:40 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 06 18:43:40 2018 +0000"
      },
      "message": "Merge \"Make all popen(3) file descriptors O_CLOEXEC.\""
    },
    {
      "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": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\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": "41398d03b7e8e0dfb951660ae713e682e9fc0336",
      "tree": "802d6cf0350264fffe41021f70dbd8fe1d7c35d4",
      "parents": [
        "0a8d5f3eb8f4087b307f237943a19ae36b094ced"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 07 13:32:58 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 07 13:32:58 2018 -0800"
      },
      "message": "Call __fortify_fatal if printf sees %n.\n\nWe\u0027ve ignored %n for a long time, but that\u0027s dangerous too because it\nmakes it unclear whether the corresponding pointer argument should be\nsupplied or not.\n\nRemove the ambiguity by just rejecting %n outright.\n\nBug: http://b/31832608\nTest: ran tests\nChange-Id: Ic046ad3436a30c6f8f580ea738bdcaeb01c858f8\n"
    },
    {
      "commit": "9412cb330861523af441cb7604306e26e3703999",
      "tree": "1660c379edf062b40886291add6a9f9d2e514a34",
      "parents": [
        "5a98234c046ad7f7474d0d7cec61f16e00a0050d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 01 16:07:54 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 01 16:07:54 2018 -0800"
      },
      "message": "clang-format local.h.\n\nBug: N/A\nTest: builds\nChange-Id: I3b1b238eefc67e6d627dbd6820849522fd7d961b\n"
    },
    {
      "commit": "5a98234c046ad7f7474d0d7cec61f16e00a0050d",
      "tree": "32ae099417b12783a3e9f324550bda58f40e2310",
      "parents": [
        "bf6c0c8eaf755f5d1686b5022ee4c6d9eaf68686"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 28 12:55:46 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 28 12:55:46 2018 -0800"
      },
      "message": "Merge stdio/local.h and stdio/wcio.h.\n\nBug: N/A\nTest: ran tests\nChange-Id: I683a1c45db0b880c73f8d190a46deeeab4cfef6e\n"
    },
    {
      "commit": "457852666cb870a844df016962fac487cb5e7559",
      "tree": "b6d5ea190fca3841b956dc1cbe714fdef8982655",
      "parents": [
        "38a78728c343f6398763ae8d7e3e8202b927a056"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 14 15:21:45 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 14 15:25:21 2018 -0800"
      },
      "message": "Add __fseterr.\n\nTrivial, obvious counterpart to the standard ferror(3) and clearerr(3),\nand lets us build bison out of the box.\n\nBug: http://b/64273806\nTest: ran tests\nChange-Id: I20affabddb71210051165c41e86adfe5ae04f77f\n"
    },
    {
      "commit": "cbc80ba9d839675a0c4891e2ab33f39ba51b04b2",
      "tree": "0b24e6123c94bd3e61d94fd6eca6a3b9cc9b074e",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:26:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:27:17 2018 -0800"
      },
      "message": "Switch the rest of our internal headers to #pragma once.\n\nWe\u0027ve been using #pragma once for new internal files, but let\u0027s be more bold.\n\nBug: N/A\nTest: builds\nChange-Id: I7e2ee2730043bd884f9571cdbd8b524043030c07\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": "733c1e4221b0bbd6967813982dcad9f8342dd038",
      "tree": "24149efc78d3b4a70692bbc719ae5662ba49693c",
      "parents": [
        "a026108ec10c0b711add1e5fb920710ced4a9046"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 13:29:33 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 13:29:33 2018 -0800"
      },
      "message": "Avoid trademarks.\n\nAPI levels are generally more useful anyway.\n\nBug: N/A\nTest: N/A\nChange-Id: Ie7bd69c3d0223c9bc8ed52c871b1d2d34373e2d0\n"
    },
    {
      "commit": "3048a36a34c5124a435df8a1d343b791f59a7f0b",
      "tree": "faa8a603ab38fdde244f7121527291e7e9c7b86c",
      "parents": [
        "2b66844a0beffff0d2fcf20938e64cdd387131ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 17:58:07 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 17:58:07 2018 -0800"
      },
      "message": "Simplify CT_CCL and CT_STRING inner loop.\n\nMakes no difference to the benchmarks, but does make the code a bit\nmore readable.\n\nBug: http://b/68672236\nTest: ran tests, benchmarks\nChange-Id: I63fa5f78d077c86e4f4f194f2c76ab5510c29109\n"
    },
    {
      "commit": "38e4aefe6c7804d809cfe9e05619ac1a6935e565",
      "tree": "162d29d0e7128f5e7fdf59bb6ad072cc57d79d0a",
      "parents": [
        "0d63a3c233040af004cc470d5f76547f3adc0148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 18 10:21:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 14:53:55 2018 -0800"
      },
      "message": "Support %mc/%ms/%m[ in sscanf.\n\nAlso support the \"long\" (wchar_t) variants.\n\nBug: http://b/68672236\nTest: ran tests\nChange-Id: I060e98b4d2feb61e12986d9d51e4710b2b1d9724\n"
    },
    {
      "commit": "f23ccdba7789ac2f9886d568220601e651911b7b",
      "tree": "5261d7964844c44dc9eef850c8cd7950d8149b6d",
      "parents": [
        "8039c496804539fdb8447a1f9378000550ed1d9b",
        "1a56a26f1169da432de36016ee3d2f37c71b4eef"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 21 15:59:21 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 21 15:59:21 2017 +0000"
      },
      "message": "Merge \"Speed up __sfileext initialization.\""
    },
    {
      "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": "1133fecde3899183b5c0edee9c92736ad878a290",
      "tree": "00c55fa5d1a6971e5cbf47d4c6d84112c5c9165c",
      "parents": [
        "9dc37b9439063df2b0db6d1b3a37b491bc3cd427"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 16:30:55 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 16:37:01 2017 -0800"
      },
      "message": "Use inline ctype functions for ato*/strto* and scanf.\n\nThis also let us remove the `unsigned char` casts, since we define our\ninlines to work for all values.\n\nBefore:\n\n  Benchmark                      Time           CPU Iterations\n  -------------------------------------------------------------\n  BM_inttypes_strtoimax        112 ns        112 ns    6222193\n  BM_inttypes_strtoumax        104 ns        104 ns    6725010\n  BM_stdlib_strtol             113 ns        113 ns    6195861\n  BM_stdlib_strtoll            113 ns        113 ns    6195633\n  BM_stdlib_strtoul            105 ns        105 ns    6691394\n  BM_stdlib_strtoull           105 ns        105 ns    6690695\n\n  BM_stdio_scanf_d                    504 ns        503 ns    1385224\n  BM_stdio_scanf_maps                1900 ns       1898 ns     369260\n  BM_stdio_scanf_maps_baseline       1030 ns       1030 ns     678832\n  BM_stdio_scanf_s                    433 ns        432 ns    1619086\n\nAfter:\n\n  BM_inttypes_strtoimax         91 ns         91 ns    7718194\n  BM_inttypes_strtoumax         82 ns         82 ns    8508052\n  BM_stdlib_strtol              92 ns         92 ns    7674694\n  BM_stdlib_strtoll             91 ns         91 ns    7639228\n  BM_stdlib_strtoul             83 ns         82 ns    8500304\n  BM_stdlib_strtoull            82 ns         82 ns    8504929\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\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I44681daf16c4328b060770cf11fc0633157c427f\n"
    },
    {
      "commit": "bf9cb9e404e7fefb6097db447883940a547fc7ac",
      "tree": "5cef4c306b57f11f151514ae00333524d8dffc2c",
      "parents": [
        "eb7347aedbc61ba45555aef3e6e863f0d90b407b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 11 12:39:01 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 12 17:10:51 2017 -0800"
      },
      "message": "More scanf cleanup.\n\nMerge CT_CCL and CT_STRING handling before we add %m.\n\nAlso fix an accidental scanf/wscanf difference.\n\nAdd currently-disabled tests for questionable behavior noticed during\ncode review that isn\u0027t a regression, but should be fixed later.\n\nBug: http://b/68672236\nBug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id\u003d202240\nTest: ran tests\nChange-Id: I3eec9b7dfce84f63c68426406224822c52551d64\n"
    },
    {
      "commit": "0d3ba1f04701e8ba0f8bd0cd6a0f4c8bb9d558b5",
      "tree": "bf2dd2d19ddfe12813314323b8b28141f5b0a3eb",
      "parents": [
        "c1f6219c32543cb1d6701b13eb53b82abe1e0a12"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 06 16:41:35 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 07 14:13:57 2017 -0800"
      },
      "message": "Add sscanf %[ tests and fix the bug that fell out.\n\nStrictly, POSIX says \"If a \u0027-\u0027 is in the scanlist and is not the first\nwide character, nor the second where the first wide character is a \u0027^\u0027,\nnor the last wide character, the behavior is implementation-defined\",\nbut it seems unreasonable for swscanf to interpret `a-c` differently\nfrom sscanf. Make ours behave the same as each other by making swscanf\nwork the same as sscanf.\n\nBug: http://b/68672236\nTest: ran tests\nChange-Id: Ia84805897628d7128e901b468e02504373730e61\n"
    },
    {
      "commit": "b70576b04869ae85b2f79e072efd40f792a16baf",
      "tree": "83d0a5344d6cc721a281162b305b7d8af859eefa",
      "parents": [
        "0793e3dd07b8ecb5bd0a0e91740f68f42f4f7e60"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 13 11:10:05 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 13 11:10:05 2017 -0800"
      },
      "message": "Remove more trivial char/wchar_t printf differences.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I899458af92517dc21f874519716fa3f3a0f0e3d6\n"
    },
    {
      "commit": "0793e3dd07b8ecb5bd0a0e91740f68f42f4f7e60",
      "tree": "501072a0a59535d21fa19dd97c88b23f51982698",
      "parents": [
        "13e86af05670930b46dda79ce48cc78053329f74",
        "bc27bdc24f021ab4060a7441ff4aba77cd9c1e98"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 13 18:04:18 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 13 18:04:18 2017 +0000"
      },
      "message": "Merge \"Yet more printf de-duplication.\""
    },
    {
      "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": "bc27bdc24f021ab4060a7441ff4aba77cd9c1e98",
      "tree": "4df7f54bda5850302932f94c803aad98bb7b791c",
      "parents": [
        "843e34087454268fdb77fd4f02178b779553842b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 10 15:25:49 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 10 15:25:49 2017 -0800"
      },
      "message": "Yet more printf de-duplication.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: Iae38055426596919c0de4f5080c99eba95fac3a9\n"
    },
    {
      "commit": "1f4931751bbdf23747891247fa28ab57d728ec9c",
      "tree": "17527d24c8669f9d7948d7eff2ae621f1639c571",
      "parents": [
        "265b1ab966cd8ffba430c0ab65f35752757b78ec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 08 16:13:18 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 08 16:27:49 2017 -0800"
      },
      "message": "Move shared parts of the two printfs out.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I24eae6a5d2c64ff4fd65c8d508a3709bab5a11c4\n"
    },
    {
      "commit": "93a1f8b1f5278a9245ab020ea7fc4ddc3b1d7c97",
      "tree": "16080b44df38c5bd8f9f06c47ccb02ce8fc1b2c3",
      "parents": [
        "3404bb11a36ee99a0fb2bcd7cfff3cbe0fe5da49"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 07 22:52:29 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 07 22:52:29 2017 -0800"
      },
      "message": "More printf de-duplication.\n\nJust trivial use of macros.\n\nThe %s/%ls case in __find_arguments was backwards in the wide copy of\nthe code, but not problematically so because all pointers are the same\nsize anyway.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I8d34915d75ae5425c56c59510a16c328fc481d20\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": "5305a4d4a723b06494b93f2df81733b83a0c46d3",
      "tree": "e2de767071618925487ca8b8ba2da4d7aac62fce",
      "parents": [
        "232541aa02e22ab8fafcdd503c74aae22fa09699"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 03 14:00:37 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 03 14:19:00 2017 -0700"
      },
      "message": "10x printf speedup.\n\nAndroid is UTF-8. Don\u0027t make everyone pay to convert UTF-8 to ASCII just\nso we can recognize \u0027%\u0027. With UTF-8 we can just strchr forwards.\n\nBefore:\n\n  ---------------------------------------------------------------\n  Benchmark                        Time           CPU Iterations\n  ---------------------------------------------------------------\n  BM_stdio_printf_literal       1290 ns       1290 ns     442554\n  BM_stdio_printf_s             1204 ns       1204 ns     582446\n  BM_stdio_printf_d             1206 ns       1206 ns     578311\n  BM_stdio_printf_1$s           2263 ns       2263 ns     310002\n\nAfter:\n\n  ---------------------------------------------------------------\n  Benchmark                        Time           CPU Iterations\n  ---------------------------------------------------------------\n  BM_stdio_printf_literal        178 ns        178 ns    3394001\n  BM_stdio_printf_s              246 ns        246 ns    2850284\n  BM_stdio_printf_d              252 ns        252 ns    2778610\n  BM_stdio_printf_1$s            363 ns        363 ns    1929011\n\nAdd missing __find_arguments error checking to the wide variant to match\nthe regular one.\n\nAlso replace various char/wchar_t differences with the macro.\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I18f122009c22699943ab5d666a98ea594a972c40\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": "2f9c8ce38a885791dfa4cefb6370b5025c55ae82",
      "tree": "efbdbe306e126b1bad2d3bd455e23e49639f0a64",
      "parents": [
        "0cbbdaa5cfa131e33dbfc80ce9b34c9fe1523f08"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 01 13:54:47 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 01 18:13:36 2017 -0700"
      },
      "message": "Start de-duplicating the regular and wide printf implementations.\n\nThis patch switches to C++ (in anticipation of needing it later), removes\na little duplication (via a macro for now), and ensures uniform support\nfor %C/%lc and %S/%ls between regular and wide (with new tests).\n\nSince it\u0027s so hard to debug problems in printf (as the time I\u0027ve wasted\nalready today will testify), that\u0027s all I want to do in this change. The\nother 500 lines of diff can wait...\n\n(Also merge \"floatio.h\" into \"local.h\" now all the users are in forked\ncode.)\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I083353d89c32b9302d759ca6967cc6d8a62cd8a5\n"
    },
    {
      "commit": "07e412419b63a9055465515845d7542e5e87176b",
      "tree": "6eaf8d440565181b8422d1a90c157e2ef9541774",
      "parents": [
        "555a6d19c8691519d24d1415b5749ac0b447f5cc",
        "37ad9597839c70a7ec79578e5072df9c189fc830"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 31 22:43:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 31 22:43:34 2017 +0000"
      },
      "message": "Merge \"More missing _unlocked \u003cstdio.h\u003e functions.\""
    },
    {
      "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": "c8f2c520fa42a5515ebe4d0d5f1dc1d3ce036236",
      "tree": "1a3546a42b9fedda0ce4fbd59ba5530c186a1167",
      "parents": [
        "f6dfe57e415570d1eb854473416e2a6ce5dbefd6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 13:07:51 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 13:07:51 2017 -0700"
      },
      "message": "clang-format the printf/scanf implementation.\n\nBug: N/A\nTest: builds\nChange-Id: I490fdc1d568cba901c123b9efe0b9053b0d83b64\n"
    },
    {
      "commit": "d9a7de1b77d41aa197a849bb9c97acaebf1c1c83",
      "tree": "14a1f7356389ff166755d624955501915f57b8a6",
      "parents": [
        "8142b5c5b03dd7d4a47895edc9df38746e71e46f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 09:55:40 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 09:55:40 2017 -0700"
      },
      "message": "Remove some always-on #ifdefery.\n\nBug: N/A\nTest: ran tests\nChange-Id: I02d3c0a639f48ae9c415fb59f37ade015e6f46a2\n"
    },
    {
      "commit": "3a589c23626c64b34ec6840271033c9ff486c8c5",
      "tree": "240bcbe8483839db6c439445535b9ef047888982",
      "parents": [
        "e379a202504911d228ae07d9ba32c5a02274fe1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 11:43:58 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 11:43:58 2017 -0700"
      },
      "message": "Fork vfprintf.c/vfwprintf.c.\n\nFuture changes will start reducing the duplication...\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I477afea34f9e1f41817823984bd0548944ee5eec\n"
    },
    {
      "commit": "cc3d04f03ac0c3d60d00ae021f41f3610bb3b3eb",
      "tree": "83fc235a8357f5b12802ccc3538dd14d38cef456",
      "parents": [
        "c6291b081d2089ba7a16d7777fb2713d828d537f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 15:38:06 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 16:16:33 2017 -0700"
      },
      "message": "Add null checks to \u003cdirent.h\u003e functions.\n\nMove all the new checks over to the existing __fortify_fatal.\n\nBug: http://b/67455242\nTest: ran tests\nChange-Id: Idb899c58c32d52d3b423caf1a91feb7defcba9b3\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": "5ba2c21159f0bb4c0f7f1fbdbd4671f381b75816",
      "tree": "6e4626b224d4105a66be2dfc265b982badf7ca3f",
      "parents": [
        "1bac61f09f46ac3c0a73387613dfd20023e39772"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 15:16:36 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 15:27:27 2017 -0700"
      },
      "message": "Finish \u003cstdio_ext.h\u003e.\n\nImplement __freading and __fwriting, and clarify the documentation that was\nthe cause of these not being implemented for years.\n\nBug: http://b/17157253\nTest: ran tests\nChange-Id: I89542c8131b13889e2585417a024050ecf2abcb7\n"
    },
    {
      "commit": "4a8de0d7caec378f08b3804885620746aac38b3e",
      "tree": "6d15b657e182edb7ec16b74cad33e7a603fec3cb",
      "parents": [
        "6616056f0f89499d4662b646019f2d4a59624985"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 10:48:08 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 10:48:08 2017 -0700"
      },
      "message": "Consistently say va_arg rather than __va_arg.\n\nBug: http://b/64250392\nTest: builds\nChange-Id: I435242f620245d825b8a68365c71c99a60aba625\n"
    },
    {
      "commit": "ec6850d849746ffbafaaf9b993c5dbb74a014b3f",
      "tree": "61861bc94bfe8ebb50cfb263610f7d47d367b769",
      "parents": [
        "c2a10f7f1bc23e81a49bcf4e98989042865261b3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 08:28:46 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 01 08:28:46 2017 -0700"
      },
      "message": "Remove restrict/__restrict.\n\nWe\u0027ve never really used __restrict: only \u003cstring.h\u003e and \u003cstdio.h\u003e (which\nare still very similar to upstream BSD headers) consistently have these\nannotations. Neither clang nor GCC warns for trivial cases, and there\u0027s\nlittle obvious documentation benefit.\n\nBug: http://b/30833514\nTest: builds\nChange-Id: I3e4384281865475d0c55d764b546d8166419ee31\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": "4fce647a5bcb61680c9f865b05c9f43a4841b244",
      "tree": "2ee2dc2b454cef278fb6a8ccde0cd101fa23e9d5",
      "parents": [
        "4dc80181cd9dfcae92596b12cf474ac211dcb186",
        "80e4c1529d1b63ee0b7f6f6ad7900885ba1c0b51"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 24 21:05:37 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 24 21:05:37 2017 +0000"
      },
      "message": "Merge \"Remove the HASLB and FREEUB macros.\""
    },
    {
      "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": "3a4c45499e9b67799fdfe4693e0a4fbbb5e955e2",
      "tree": "e91cf7421899cec6afcd4ee04ce5ecd63e67fc4b",
      "parents": [
        "0d6485eca47f0e860486795b2da97679948fd5d5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 19 17:20:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 10:48:42 2017 -0700"
      },
      "message": "Replace fmemopen.\n\nA new implementation starting from the FreeBSD fmemopen rather than the\nOpenBSD one we used to use.\n\nThe tests were arrived at by translating each sentence in\nhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html,\nplus http://man7.org/linux/man-pages/man3/fmemopen.3.html for historical\nGNU bugs.\n\nBug: http://b/31304889\nTest: ran tests\nChange-Id: Id8b168c9ecde638e9cdedbc3b8a0982fc83c7048\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "7cc779f15c524e1622f7d5b1c7e82e6ffc6677fd",
      "tree": "0f995c0878649447ef160e727505ae81495dcdde",
      "parents": [
        "2bfb8c9180603bac97dca2d8e359f71bb11f7126"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Feb 09 00:00:31 2017 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Feb 09 15:49:32 2017 -0800"
      },
      "message": "libc: add clang FORTIFY support\n\nThis patch adds clang-style FORTIFY to Bionic. For more information on\nFORTIFY, please see https://goo.gl/8HS2dW . This implementation works\nfor versions of clang that don\u0027t support diagnose_if, so please see the\n\"without diagnose_if\" sections. We plan to swap to a diagnose_if-based\nFORTIFY later this year (since it doesn\u0027t really add any features; it\njust simplifies the implementation a lot, and it gives us much prettier\ndiagnostics)\n\nBug: 32073964\nTest: Builds on angler, bullhead, marlin, sailfish. Bionic CTS tests\npass on Angler and Bullhead.\n\nChange-Id: I607aecbeee81529709b1eee7bef5b0836151eb2b\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": "a9209d7a0ee7ef40f9a14cab2b6756d7e6f8b919",
      "tree": "7bfb6dd09e8ae5b353d512fde83d14053dedec06",
      "parents": [
        "56228373014e5ee0a3ff32930df9cfa05fef7389"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 16 18:16:47 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 16 18:27:07 2016 -0700"
      },
      "message": "Fix some easy cases of __ANDROID__ versus __BIONIC__.\n\nWe need to make a clearer distinction for bionic on the host. This patch\ndoesn\u0027t fully address things like \"should host bionic try to talk to netd?\"\nfor now, but is a step in the right direction.\n\nBug: http://b/31559095\nTest: bionic tests.\nChange-Id: I49812f8b75d9d78c4fd8a8ddf5df1201d63771d6\n"
    },
    {
      "commit": "7f0849fd113691e62af0400989936d3eff151e37",
      "tree": "166fa5afeed341e2685091c89d9d8418acb66e5d",
      "parents": [
        "a2b947e0a5ff4106e36f8110232131dab1356c25"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 26 16:17:17 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 07 15:01:54 2016 -0700"
      },
      "message": "Fix sscanf/wcstod parsing of NaNs.\n\nThe parsefloat routines -- which let us pass NaNs and infinities on to\nstrto(f|d|ld) -- come from NetBSD.\n\nAlso fix LP64\u0027s strtold to return a NaN, and fix all the architectures\nto return quiet NaNs.\n\nAlso fix wcstof/wcstod/wcstold to use parsefloat so they support hex\nfloats.\n\nLots of new tests.\n\nBug: http://b/31101647\nChange-Id: Id7d46ac2d8acb8770b5e8c445e87cfabfde6f111\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": "7b737e43f82682bcfaa086af116ddcddb9c1de8d",
      "tree": "a30c4a77b57beacacce71afeba2b905f389cde1d",
      "parents": [
        "e656a3acaf1001cdb8bf3ae9be84ed070ebe93f2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 25 15:57:02 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 25 15:57:02 2016 -0700"
      },
      "message": "Remove #pragma GCC visibility.\n\nWe have better control over visibility now.\n\nBug: http://b/24767418\nChange-Id: Ifa9a1e5af4bd4217db08422050908770247b3b69\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": "e70e0e9267d069bf56a5078c99307e08a7280de7",
      "tree": "13e4b48665f46eecb2660bdde4775f2b761226ec",
      "parents": [
        "ad9c3f34f762ed45cce5dbb93218124ed31f6873"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 25 11:10:47 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 25 11:10:47 2016 -0800"
      },
      "message": "Move internal FILE flags macros to \"local.h\" from \u003cstdio.h\u003e.\n\nBug: http://b/24807045\nChange-Id: Ia42ec1907370b4af957ece94a856f71c7ee27cb7\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": "76144aaa6397fe9e16893882cf59c5c9c0684a66",
      "tree": "366d104ea020fb5d9138d296aac1fcceda383c61",
      "parents": [
        "0ebe2f07c35d4b764bc5d8b5226004e3db46da91"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 19 13:52:16 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Nov 20 17:44:26 2015 -0800"
      },
      "message": "Change _stdio_handles_locking into _caller_handles_locking.\n\nIt is reported by tsan that funlockfile() can unlock an unlocked mutex.\nIt happens when printf() is called before fopen() or other stdio stuff.\nAs FLOCKFILE(fp) is called before __sinit(), _stdio_handles_locking is false,\nand _FLOCK(fp) will not be locked. But then cantwrite(fp) in __vfprintf()\ncalls__sinit(), which makes _stdio_handles_locking become true, and\nFUNLOCKFILE(fp) unlocks _FLOCK(fp).\n\nChange _stdio_handles_locking into _caller_handles_locking,\nso __sinit() won\u0027t change its value. Add test due to my previous fault.\n\nBug: 25392375\nChange-Id: I483e3c3cdb28da65e62f1fd9615bf58c5403b4dd\n"
    },
    {
      "commit": "fb994f4c040da968b7271860535f07daba182069",
      "tree": "b2c6e72f4484ca30990ae6625a677a394b97e227",
      "parents": [
        "8b5b2c467281de502ba1c8ffbe447ef95fbf5219"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Nov 06 16:13:47 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Nov 06 16:13:47 2015 -0800"
      },
      "message": "Add fileno_unlocked to support thread sanitizer.\n\nBug: 25392375\nChange-Id: If3f92a0e08a53f4b59e01397e8efa307d8572349\n"
    },
    {
      "commit": "a8184456229ace2b0255468e6b15aeb6509e27f7",
      "tree": "bb0e1d6bdc4571d8b68b292a02c41a335fcae56f",
      "parents": [
        "c45f3bf3e691f48af63c5ea2bf7a348a698013ac"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 23 12:32:52 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 23 12:32:52 2015 -0700"
      },
      "message": "Rename LIBC64_HIDDEN to LIBC32_LEGACY_PUBLIC.\n\nChange-Id: If4da9e46398ca5524f6f0680d70588e3dc7e80b4\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": "8ab433df132aa59db08b4548155d72574ad06421",
      "tree": "23708cbc794620a364626a65306b8f260048d506",
      "parents": [
        "1ab3f303d2e7c8cc498a28fc3c8d9ded1fc46994"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 09 17:57:26 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 09 17:57:26 2015 -0700"
      },
      "message": "Fix stdio read after EOF behavior.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d184847\nChange-Id: Ia20ce94007c2a09649f0763b1dc7ba959f2f618d\n"
    },
    {
      "commit": "4e8ef698d0d76be3f8d75de32701e6e6327c1fbd",
      "tree": "c63f1d264df409ae6e57059fc9cd8deb4e4e0377",
      "parents": [
        "0378d8f65126b2d94c731f2719a68773e370f615"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 15 16:20:07 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 15 16:20:07 2015 -0700"
      },
      "message": "Don\u0027t use TEMP_FAILURE_RETRY on close in bionic.\n\nBug: http://b/20501816\nChange-Id: Id64b5109cc2b165fa0351b6edbb865a5e5058008\n"
    },
    {
      "commit": "17393b06bab9cb3e95d0f466a56c746de19b8eee",
      "tree": "fa260e58da8fe186bca7787e3d7645a86b2f79cb",
      "parents": [
        "fa3dcecc0fd7bbbf04234e41be690a5d33277870"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Mar 21 15:08:25 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 25 17:54:17 2015 -0700"
      },
      "message": "Hide internal of pthread_mutex_t.\n\nBug: 19249079\nChange-Id: Iffb79c8d861b698d474f212dc80c638fc2cf1620\n"
    },
    {
      "commit": "cc9ca1051dbf5bd2af1b801de13d43a399521cf9",
      "tree": "f8fd2edf4fd85c87a1b9259c821c4d8f9878b104",
      "parents": [
        "e6a33cefe4b3759fb77d9e69356cb50a97ea7e54"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 27 18:22:45 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 27 18:22:45 2015 -0800"
      },
      "message": "Fix fread returning bad data.\n\nBug: 19172514\nChange-Id: I05016577858a02aca7d14e75e6ec28abc925037c\n"
    },
    {
      "commit": "e6bb5a27769cc974c4c6c1bfc96dcd07f0c0f5ef",
      "tree": "67156569bf455a9eb3fd18e0151e8e67dfed309c",
      "parents": [
        "31005ca4c8562f3e6dfbed079eeaff8361ff8cdc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 23 17:48:15 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jan 24 12:35:41 2015 -0800"
      },
      "message": "Fix optimized fread.\n\ngcov does writes after reads on the same stream, but the bulk read optimization\nwas clobbering the FILE _flags, causing fwrite to fail.\n\nBug: 19129055\nChange-Id: I9650cb7de4bb173a706b502406266ed0d2b654d7\n"
    },
    {
      "commit": "8b5df3920f2843c9cdf04160517c1e8b77c992f5",
      "tree": "a0a678ee8f107e5c25f937f444a970a0539d2af7",
      "parents": [
        "2a8c929aaf8d34d2b6e89ed9c8b6da163316143e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 21 16:19:07 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 21 17:09:58 2015 -0800"
      },
      "message": "Turn on -Wold-style-cast and fix the errors.\n\nA couple of dodgy cases where we cast away const, but otherwise pretty boring.\n\nChange-Id: Ibc39ebd525377792b5911464be842121c20f03b9\n"
    },
    {
      "commit": "8c4994bbc1a9a01e34ea92c91eb5b2d1a27bd074",
      "tree": "8b632cea0832373b9cb843427bb5976b3668f1a2",
      "parents": [
        "f374358414812d3e5a45ba75a2b1926693924420"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 18:09:05 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 21 10:33:30 2015 -0800"
      },
      "message": "Implement __fsetlocking.\n\nThe old __isthreaded hack was never very useful on Android because all user\ncode runs in a VM where there are lots of threads running. But __fsetlocking\nlets a caller say \"I\u0027ll worry about the locking for this FILE*\", which is\nuseful for the normal case where you don\u0027t share a FILE* between threads\nso you don\u0027t need any locking.\n\nBug: 17154740\nBug: 18593728\nChange-Id: I2a8dddc29d3edff39a3d7d793387f2253608a68d\n"
    },
    {
      "commit": "e69e6458cca9adb9669850ac4055df38a20a70d1",
      "tree": "f99c0984eefd85502e7b047c8890ec80e8e4a5d4",
      "parents": [
        "a779719d628de5e504dac08d334bc576f3b7fb0a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 16:52:04 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 16:52:04 2015 -0800"
      },
      "message": "Fix signed/unsigned comparison that was upsetting clang.\n\nbionic/libc/stdio/fread.c:86:27: error: comparison of integers of different signs: \u0027int\u0027 and \u0027size_t\u0027 (aka \u0027unsigned int\u0027) [-Werror,-Wsign-compare]\n\nChange-Id: Ia7e1e053e0cb13113e8f2eede820be013acbab82\n"
    },
    {
      "commit": "8885dcc779bceae5016d5ad96caa73465a7bab90",
      "tree": "9a5851adf9ffa5755ff2e99da04e6320fc581f99",
      "parents": [
        "927d8be76d956fcda630e1088e9b89eb31be5146"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 16:18:32 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 16:18:32 2015 -0800"
      },
      "message": "Add TEMP_FAILURE_RETRY to stdio\u0027s low-level read/write functions.\n\nThis is correctness rather than performance, but found while investigating\nperformance.\n\nBug: 18593728\nChange-Id: Idbdfed89d1931fcfae65db29d662108d4bbd9b65\n"
    },
    {
      "commit": "75b99387dd3a8833f09e2139e7062be5d38c5511",
      "tree": "7b4c44035fd12bbfb6a9de3f22fdc95aca57cb9f",
      "parents": [
        "3bbf4639080bc2f42435b4a7fd400c44aab7fd70"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 11:23:50 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 20 15:59:17 2015 -0800"
      },
      "message": "Optimized fread.\n\nThis makes us competitive with glibc for fully-buffered and unbuffered reads,\nexcept in single-threaded situations where glibc avoids locking, but since\nwe\u0027re never really single-threaded anyway, that isn\u0027t a priority.\n\nBug: 18593728\nChange-Id: Ib776bfba422ccf46209581fc0dc54f3567645b8f\n"
    },
    {
      "commit": "20841a137beac5caa824e3586c7bd91d879ff92e",
      "tree": "3ccc88081ddcdbe9a4448c462eb16e971007f86e",
      "parents": [
        "5cd127d3aa4a2f225be202af01581838fdd3c721"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 01 16:13:30 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 14:22:02 2014 -0800"
      },
      "message": "Avoid pathological behavior in OpenBSD\u0027s fread.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d81155\nBug: 18556607\nChange-Id: Idc60976b79610e2202cc42dc393dcb4ca6c42e05\n"
    },
    {
      "commit": "c48c3e4bb3d1665f3e9fa2785daafa72dfe59399",
      "tree": "9a77515a49315acd7b7441349d5157597f2f76d8",
      "parents": [
        "27aa9c5b50cc3e979fc67c1bf5296dfd725c8540"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 19 15:16:51 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 19 15:16:51 2014 -0800"
      },
      "message": "Fix flockfile(3) and friends for stdin/stdout/stderr too.\n\nstdin/stdout/stderr are special; their mutexes are initialized by\n__sinit. There\u0027s no unit test for this, because __sinit has already\nbeen called by the time the first unit test runs, but you could\nreproduce this failure with a trivial main() that calls flockfile\nor ftrylockfile on one of the standard streams before otherwise\nusing stdio.\n\nBug: 18208568\nChange-Id: I28d232cf05a9f198a2bed61854d8047b23d2091d\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": "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": "78ba823033e5767f54e8f4a1f9986bbc6fe57e82",
      "tree": "e9c471b6fe616dba87180d308291c220aee27683",
      "parents": [
        "8dd3b65f2dd63df1baa83285f607cf110f21c27c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 09 18:31:01 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 09 22:23:50 2014 -0700"
      },
      "message": "Add back symbols to fix Greed for Glory franchise.\n\nBug: 17813018\n\n(cherry picked from commit c891e24073830e07ba7373dee554ff2c70e1d313)\n\nChange-Id: I4e891c2dbad9ea00d2377c5175317d9ae3840153\n"
    },
    {
      "commit": "abefc93ff33afdb0e92e1fe9bd47a82b5e303e14",
      "tree": "db389de548059c1185c4dbf83d7a550ce1450051",
      "parents": [
        "a864e72b566234fdc41344725aa9b4f47c5baba3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 24 17:20:53 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 24 20:07:10 2014 -0700"
      },
      "message": "Re-expose more stdio implementation details for LP32.\n\nKeeps a variety of apps running.\n\n(cherry-pick of 5def2f5aecd968e4022b0afbe4441fa7ba3e7c7e.)\n\nBug: 17047819\nChange-Id: I55882ec95f2b59a5df76e5a89c23aa315609e01d\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": "5f35710fad2092f930124ca98c0ecd456f83eeca",
      "tree": "98aec6a401126b2009371f40f44c74c8ed746403",
      "parents": [
        "6487f0d8341b00b476995e0174dc92e5ae8efbbe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 11 16:41:11 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 11 18:23:46 2014 -0700"
      },
      "message": "Expose __swsetup for LP32 binary compatibility.\n\n(cherry-pick of 7e00b44e80d6e38b8ab86d0ebc86b666c0ac2ef6.)\n\nBug: 17476127\nChange-Id: I0ef1355ac913d782c268a638f88642d6cfc236c2\n"
    },
    {
      "commit": "2b021e10664c3938249eb18b48eeac253cbb3e20",
      "tree": "31772908fbc1209095bbe668887809eff2fd60fd",
      "parents": [
        "b61c50647b85b3c33af8ca155e88ec098d9e8cb0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 19 17:00:33 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 20 10:23:52 2014 -0700"
      },
      "message": "Add \u003cstdio_ext.h\u003e for elfutils.\n\nBug: 17139679\nChange-Id: I1605ac382dbb6f23b2d874dbb9769f3cde4a6a99\n"
    },
    {
      "commit": "a167eef5482d4a89d4277ec74f57adbe38052813",
      "tree": "53cfbccf1f41116a46996951eb08b6f00fb1fd09",
      "parents": [
        "673bff01aed0c08991b98841ed0bfad78a589672"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 14 14:41:47 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 14 15:13:30 2014 -0700"
      },
      "message": "Fix visibility for a bunch more symbols.\n\nBug: 11156955\nBug: 15291317\nChange-Id: I664f25cce7c17085a101d6593d8e01525a1f6a90\n"
    },
    {
      "commit": "f6d2ca269603c16a3b3bd4a2306fb961a79ba92f",
      "tree": "66448aaaad2c8949c11c0f2bcc4f686544ff009c",
      "parents": [
        "1454ff2574f0bee9fb3646c9c6dd30443e0dbd38"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 27 21:23:36 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 27 21:23:36 2014 -0700"
      },
      "message": "Expose __srefill for LP64 until we can fix the NDK.\n\nThe LP64 has a duplicate copy of part of stdio, and relies\non bionic supplying this part. We should remove the hack from\nthe NDK, at least for LP64, and then revert this.\n\nBug: 15291317\nChange-Id: I75e06e130188ca0aeb9d50dfe3a3e48a1d3968b7\n"
    }
  ],
  "next": "aa50585d961fb2b0f6943399d90ca0ec734946a3"
}
