)]}'
{
  "log": [
    {
      "commit": "ee977a36a6b0c2f2fa6d5f1b0b045da89445e5c0",
      "tree": "110172a6054d7686530bd3f9d4e71bd586784ec0",
      "parents": [
        "34901434dbd75288b93367af07443b3ea1b31454"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 07 18:26:47 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 07 18:26:47 2019 -0700"
      },
      "message": "adb: windows: fix writev on sockets.\n\nBug: http://b/139078301\nTest: treehugger\nChange-Id: I000c12ef9dedad530a166175cf089df45378f759\n"
    },
    {
      "commit": "9b1c3659ea6960945a5328c4035d1c6a50f14c13",
      "tree": "20cd603ecaba4bd17903bb91885c49f82ad1f1b0",
      "parents": [
        "a11c3959293acd56be973ea5b2cc2f542bf59060"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 16 14:31:41 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 16 15:22:58 2019 -0700"
      },
      "message": "adb: win32: don\u0027t shutdown socket when closing.\n\nThis appears to be an attempt to do orderly shutdown, but it doesn\u0027t\nwait until the socket becomes readable, so it doesn\u0027t actually work. We\nimplement orderly shutdown elsewhere already, so delete this so that we\ndon\u0027t accidentally shutdown a duped socket.\n\nTest: wine adb_test\nChange-Id: I35f8843e8e6dbc7886fd545f0e43375a005e160f\n"
    },
    {
      "commit": "e08e045cdd38ddcef83bc1da997fec655746d2a2",
      "tree": "904006ee84b9e0e4486789f9bc132174fdca5af9",
      "parents": [
        "9e1eb5dd357d4ee2edb6575d4518da6b447d9cd2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 10 12:48:34 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 10 12:54:14 2019 -0700"
      },
      "message": "adb: avoid freeing argv entries on Windows.\n\nWe assign string literals directly to argv[0], which leads to fun\nexplosions when we attempt to free  when the runtime can detect that\na bad free happened, which seems to happen reliably with lld.\n\nBug: http://b/110800681\nTest: `adb shell true` on windows\nChange-Id: Ica81e472c31686d80b58c41ff6d2b825baef06fb\n"
    },
    {
      "commit": "90228a63bb6a59e8195165fbb7c332be27459696",
      "tree": "627a2f393951cc4f4b0b307c04e1d09b8eda942e",
      "parents": [
        "527a1b3a82b4038bb86e9b43c00b76283e1350d2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 25 14:04:57 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon May 06 16:18:02 2019 -0700"
      },
      "message": "Revert \"Revert \"Add a way to turn off unique_fd\u0027s operator int.\"\"\n\nThe original commit broke aosp-master-with-phones, because of\nvendor libraries the depended on the int versions of libbase functions.\n\nThis patch reverts the revert, and also adds ABI-compatibility shims for\nthe replaced functions.\n\nThis reverts commit dfdf916d09f6583d3fd1db1e33c79ed60bff2480.\n\nBug: http://b/131312539\nTest: treehugger\nTest: forrest run of aosp-master-with-phones\nChange-Id: I75cc84ec8d963e20862f7662e8e2f409471f41cc\n"
    },
    {
      "commit": "dfdf916d09f6583d3fd1db1e33c79ed60bff2480",
      "tree": "8e02ad6551dcc3593b5105963c1d1d5a72fceefc",
      "parents": [
        "6bc77009177ba2de4c25a2c8f17bee826c0540a3"
      ],
      "author": {
        "name": "Ian Kasprzak",
        "email": "iankaz@google.com",
        "time": "Thu Apr 25 15:59:28 2019 +0000"
      },
      "committer": {
        "name": "Ian Kasprzak",
        "email": "iankaz@google.com",
        "time": "Thu Apr 25 15:59:28 2019 +0000"
      },
      "message": "Revert \"Add a way to turn off unique_fd\u0027s operator int.\"\n\nThis reverts commit 6bc77009177ba2de4c25a2c8f17bee826c0540a3.\n\nReason for revert: b/131312539 - All aosp-master-with-phones phones failing boot / health check.\n\nChange-Id: Id4239f93484b7d6b8d9bcd355a59cbd40d9766e2\n"
    },
    {
      "commit": "6bc77009177ba2de4c25a2c8f17bee826c0540a3",
      "tree": "97b63d6b7c86394ab0a1dc40eedca8f7ce305378",
      "parents": [
        "4c0c9c90e1ae4fb8ef7312833a825bc3c3bee62b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 18 16:39:30 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 24 12:59:42 2019 -0700"
      },
      "message": "Add a way to turn off unique_fd\u0027s operator int.\n\nunique_fd\u0027s implicit conversion to int has led to tons of problems (see\nall of the overloads for close, fdopen, fdopendir, etc.). Add a switch\nthat can turn it off, and reduce the ridiculous amount of work to fix up\ncallers by introducing a borrowed_fd type that can be constructed from\neither int or unique_fd.\n\nTest: treehugger\nChange-Id: If77cf5cbcaddacdaec5919a15b3520fb68f51a62\n"
    },
    {
      "commit": "3befb599ee711c59e22d43aff9a054cfc79767a5",
      "tree": "07bef409e6eaf3fcecb730826fdd977c7512f85d",
      "parents": [
        "18f7a5c3ad9846a585e893518f15fa4dd19bc4c1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 07 14:13:39 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 07 14:23:39 2019 -0800"
      },
      "message": "adb: \"support\" O_CLOEXEC in adb_open on Windows.\n\nPreviously, we were rejecting the flag and failing with EINVAL. File\nhandles aren\u0027t inherited by default, so just ignore the flag.\n\nBug: http://b/123753498\nTest: adb install --streaming foo.apk\nChange-Id: I17401fcdd58024956d47a5c4c0c57b06831d9817\n"
    },
    {
      "commit": "d3fb19898b37ff1e3a7e6b580149724a8dd0ff46",
      "tree": "05ea2e1c69c155854a56d883aa3a82ac86cc2893",
      "parents": [
        "3d8242e339cbdb64192121370c176742a45201af",
        "a09036861457bd7a09e3c20f0636f50e2c9e1d4a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 23 03:59:27 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 23 03:59:27 2019 +0000"
      },
      "message": "Merge \"adb: win32: improve console output on Windows 10\""
    },
    {
      "commit": "f0c4403a48272d0cbdd614cc6ba140fdbd8aa686",
      "tree": "a8cc32b926843c81f410bc7a1682c37bba672368",
      "parents": [
        "505b9d90ee37240ffc838abae402b358b2960faf"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 12 16:12:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 01:43:31 2018 -0800"
      },
      "message": "adb: switch unix_open to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: Ieecc9b1b7f2111f4da45d4bbd1b7703535fe7d4d\n"
    },
    {
      "commit": "a09036861457bd7a09e3c20f0636f50e2c9e1d4a",
      "tree": "3879a17dd411aceaf33a3a0b9abf5f643e474130",
      "parents": [
        "458493f8c247255fd0d0cd435c2231a0473601cb"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri Aug 10 16:20:57 2018 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Nov 06 20:36:58 2018 -0800"
      },
      "message": "adb: win32: improve console output on Windows 10\n\nUse Windows 10\u0027s improved virtual terminal emulation to handle more\nterminal sequences, to fix console resize artifacts, and to fix issues\nwith the last column.\n\n`top\u0027 and `more\u0027 work well now.\n\nUse a sensible default TERM value of xterm-256color.\n\nTest: manual on Windows 10\nBug: https://issuetracker.google.com/issues/37081235\n\nChange-Id: If6612f3bb7db1ecaaa4b7930c9e54075ba7abb3f\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "0119a91d6ae95ee9f607240f2e918cec5359ff14",
      "tree": "64e119ab861995610fb1020472ac2eeef6fb80a1",
      "parents": [
        "e64126b0e3735f94c08f1802f0ef483b17b2e37d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 22 17:02:51 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 22 17:04:32 2018 -0700"
      },
      "message": "adb: don\u0027t use \u003cerror.h\u003e.\n\nThis should fix the bloody Mac build, which doesn\u0027t have \u003cerror.h\u003e. Since\nwe weren\u0027t entirely happy with error(3) anyway, switch to the toybox\nstyle of error_exit and perror_exit, which are slightly briefer and quite\na bit more intention-revealing.\n\nBug: N/A\nTest: builds\nChange-Id: Ic8e411906c363af51657da5ce947b25a0b6bb1f3\n"
    },
    {
      "commit": "e64126b0e3735f94c08f1802f0ef483b17b2e37d",
      "tree": "a90ac1906d678934278fe88afd10902fd943d927",
      "parents": [
        "2b8b5059abd1ffacf7520e952b806bf667c73b21"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 13:59:44 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 14:04:24 2018 -0700"
      },
      "message": "adb: rationalize fatal/error logging.\n\nLet\u0027s use LOG(FATAL)/PLOG(FATAL) for actual fatal stuff.\n\nAdd a Windows error(3) and move folks who didn\u0027t really mean \"abort\"\nfatal over to it. Also get rid of syntax_error which wasn\u0027t adding a\nlot of value, and most of the places it was adding \"usage: \" didn\u0027t seem\nentirely appropriate anyway.\n\nIn particular, we seemed to have confused fastdeploy.cpp into aborting\nin most user error cases, and none of the reviewers noticed. Clearly\nwe\u0027d all lost track of far too many options.\n\n(I\u0027ve also cleaned up a few random instances of fprintf(3) + exit(2).)\n\nBug: N/A\nTest: manual\nChange-Id: I3e8440848a24e30d928de9eded505916bc324786\n"
    },
    {
      "commit": "2fafa69c6f483b4e615979e709e88aafc2589467",
      "tree": "4dcc4fe6fd0c5d835768936e4549b9f489446be6",
      "parents": [
        "e788d00413ec4fb8e936db0a629d4f6c32c9e35e",
        "5231aff7bb041341527274c9e628c8e854cd07c0"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Thu Oct 11 17:00:53 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 11 17:00:53 2018 +0000"
      },
      "message": "Merge changes from topic \"windows-libcxx\"\n\n* changes:\n  Do not enable -Wold-style-cast for Windows\n  Add sys/types.h in utf8.h\n  Adapt to switch to libc++ for Windows\n"
    },
    {
      "commit": "9dcbc217833907878f6b9bd3612d09ca79b2d158",
      "tree": "597607a7db63b1b6cef708f1f4826ac697bfec68",
      "parents": [
        "075a6b68d8352c75f8ef60a44738d83da52b1b58"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 20 13:59:49 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 26 14:48:05 2018 -0700"
      },
      "message": "Support \u003e 2GiB seeks in adb_lseek.\n\nAlso stop using size_t (which will be 32-bit on Win32) for offsets in\nadb_sideload_host, and stop truncating large file sizes in our\n\"sideload-host\" messages.\n\nBug: http://b/112003354\nTest: builds\nChange-Id: If5b7cc9d1fc7ff7ca6eaebd20418f7b061846203\n"
    },
    {
      "commit": "5231aff7bb041341527274c9e628c8e854cd07c0",
      "tree": "d1226fff1a5d5b6cc70127b7cac145a7f71bd080",
      "parents": [
        "075a6b68d8352c75f8ef60a44738d83da52b1b58"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Wed Aug 08 10:33:24 2018 -0700"
      },
      "committer": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Fri Sep 21 10:46:25 2018 -0700"
      },
      "message": "Adapt to switch to libc++ for Windows\n\nBug: http://b/91353691\n\n- libcxx has ETXTBSY for Windows\n- adb/sysdeps/memory.h is no longer needed\n\nTest: Build and test Windows binaries under Wine.\n\nChange-Id: I9c27087d46c49cb25b391c4adae8d9e24724784d\n"
    },
    {
      "commit": "ae37a31c016df5b5350ff9dad95068a05ffa37ef",
      "tree": "0665e366abd0a66c3bca64a95d45225c90f424e9",
      "parents": [
        "43ea22458e21a58c5e04575d1bbf4dbb5e31f164"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 03 16:03:22 2018 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Sep 03 16:11:33 2018 -0700"
      },
      "message": "adb: win32: set thread names\n\nUse a new Windows 10 API, SetThreadDescription(). Background info from a Chrome developer:\n\nhttps://randomascii.wordpress.com/2015/10/26/thread-naming-in-windows-time-for-something-better/\n\nTest: Win10, Vista, adb shell\nTest: Ran windbg -pn adb.exe, used .dump /ma to create a dump, ran\n`dx -g @$curprocess.Threads\u0027 on the dump and it showed the thread names.\n\nChange-Id: I14ea7121605cb3fa45ce7b59e2ba5882a215b59f\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "86e67188a11db7f8db0a1bab3029c6038492e498",
      "tree": "963877f99160913f617086db5542cf453426814d",
      "parents": [
        "7cd4c4f039f8c2dabf6cf7a0c6ab16cc1fa352ff"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:15:16 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:21:00 2018 -0700"
      },
      "message": "[adb] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: Ia8c4deacafed2f3b7dbc3d4c3c77c6c632e3de81\n"
    },
    {
      "commit": "874c941b99ddb6525b4f02e731a772f13ae64dca",
      "tree": "441a2fe681f1b73c9597db58b9d3aca0630dc79b",
      "parents": [
        "facb3d48e4b9a6dcec12b91d1ef3a8d21ce39148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 26 13:06:15 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 26 13:07:21 2018 -0700"
      },
      "message": "Simplify __attribute__((__printf__)) use.\n\nWe don\u0027t need this now everyone\u0027s using clang...\n\nBug: http://b/69933068\nTest: ran tests\nChange-Id: I88f0cf03981ade47e210387fd6f3a2706dfeb9b8\n"
    },
    {
      "commit": "caeda2c570d1f33beb9c21f3a2fcd1cf62362c8c",
      "tree": "b3082e10e63251119fee2b98402b42060bf61a5d",
      "parents": [
        "de16596f44cbb0dbc5630a59a62c612285e2dba7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 05 18:10:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:38 2018 -0700"
      },
      "message": "adb: win32: cleanup winsock initialization.\n\nInstead of doing it in 3 arbitrary functions, do it at startup always.\n\nTest: wine adb_test.exe\nChange-Id: Ida272d218aee6c331471250edce64d512d3b628a\n"
    },
    {
      "commit": "de16596f44cbb0dbc5630a59a62c612285e2dba7",
      "tree": "8e251d5364aa4168c6ca87d1595fb8131c72887e",
      "parents": [
        "08229f60848f38eb19c3e3dfeabb1e5fc343545b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 05 18:09:39 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:38 2018 -0700"
      },
      "message": "adb: win32: properly set EBADF in some functions.\n\nTest: treehugger\nChange-Id: If3f29f9ee586e29652e9709b3f594a1376ed4bb3\n"
    },
    {
      "commit": "08229f60848f38eb19c3e3dfeabb1e5fc343545b",
      "tree": "cb5c89754661c101bbd063e3e2012c6da5e750af",
      "parents": [
        "1bbdd25b877503c5c27c644aea6f11e595738110"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 05 18:09:02 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:38 2018 -0700"
      },
      "message": "adb: partially clang-format sysdeps_win32.cpp.\n\nclang-format some functions that I\u0027m about to touch, but do it in a\nseparate commit to avoid making the actual changes unreadable.\n\nTest: treehugger\nChange-Id: I7dc5258d9ecc1c091d42311149d9e18ae483715b\n"
    },
    {
      "commit": "1bbdd25b877503c5c27c644aea6f11e595738110",
      "tree": "71be38bfec008043603e235695f5aa2a08d57a6e",
      "parents": [
        "cd2a5290137e1d55f6f16163ac58f39f28e40b00"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 05 17:55:25 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:36 2018 -0700"
      },
      "message": "adb: implement adb_writev.\n\nChange-Id: I55258c155d7b07368ebb45577b2e01ca804cf258\nTest: adb_test\nTest: python test_device.py\n"
    },
    {
      "commit": "be2ee7bc68f089a6f275374ac1d537735f1a7a6a",
      "tree": "eb063772d0b345b4b80d682fa3b7ac07f74d4e72",
      "parents": [
        "cd60820d2ac406a6faf8c9de8f5279c9274333bf"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 29 12:34:28 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 29 14:24:03 2018 -0700"
      },
      "message": "adb: fix FdeventTest.invalid_fd on Windows.\n\nBail out immediately in our poll emulation if we have any invalid file\ndescriptors, instead of actually calling WSAPoll (which might block\nforever).\n\nTest: wine adb_test.exe\nChange-Id: I06ccca305783ee7a1721b1585ddf73e022bd02d7\n"
    },
    {
      "commit": "96049b930f921a2139cd2f265e28d113d2e9b24f",
      "tree": "c77b7c78a88e5f53855a3a6fec784da5c27ec8c6",
      "parents": [
        "a076b15fc7fda35208181fed442967ae10042e54"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Mar 23 13:03:28 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Mar 23 13:03:28 2018 -0700"
      },
      "message": "adb: fix windows test build.\n\nThe switch over to soong unintentionally turned off building the\nWindows tests (and there\u0027s a bug preventing them from being turned on).\nPreemptively fix the build breakages that\u0027ll happen when we turn them\nback on.\n\nTest: mma with Android.bp \u0027s/cc_test_host/cc_binary_host\u0027 hacks\nChange-Id: I6582cfc61b96052537d50d8ba90533dbb66e3e1d\n"
    },
    {
      "commit": "a076b15fc7fda35208181fed442967ae10042e54",
      "tree": "9571296ed5f41e9e577ee8eb3920be9e3924746e",
      "parents": [
        "4f8504e18f88de8d495a9c05d3bf2063d74c61da"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 20 14:25:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 21 15:13:07 2018 -0700"
      },
      "message": "adb: bump the local socket backlog to the maximum.\n\nThe listen backlog seems to be more meaningful on Darwin than on Linux,\nresulting in connections failing with ECONNRESET. Bump it up to the\nmaximum supported value to make this less likely. 128 pending\nconnections ought to be enough for anybody.\n\nBug: http://b/74616284\nTest: python test_device.py\nChange-Id: I5fe0205924188cf18ca1fc1204f923ab5523eeb2\n"
    },
    {
      "commit": "4f6f442e242d982026f201a9f904e409ffa59b76",
      "tree": "a93dcf8b155564acdf8b85074b55bc72f509ba51",
      "parents": [
        "a0e185b07f7d70d1f3a7b4920e6839cda776c1f3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 30 13:04:35 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 30 13:12:37 2017 -0700"
      },
      "message": "Revert \"adb: check our socketpair ends in our win32 emulation.\"\n\nThis reverts commit d6001b5e4880318de512b51e67079469eb1220be.\n\nSome Windows users are seeing mismatches between the two ends.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d258400\nTest: mma\nChange-Id: Ie3a121a2754332608ff64b3b016adcb4258d41f3\n"
    },
    {
      "commit": "20238f20d8ae8b7f3361045dc734989f76899dc1",
      "tree": "aa0602d85d41937ac7275156349d5a43efba61d9",
      "parents": [
        "c969b37ee10ac91298fd58d19c618cbabfbf34be"
      ],
      "author": {
        "name": "Casey Dahlin",
        "email": "sadmac@google.com",
        "time": "Wed Sep 21 14:03:39 2016 -0700"
      },
      "committer": {
        "name": "Casey Dahlin",
        "email": "sadmac@google.com",
        "time": "Tue Mar 07 14:45:52 2017 -0800"
      },
      "message": "Make ADB over mDNS work on Windows\n\nTest: Verified ADB over mDNS on a Windows machine\nBug: 30482671\n(cherry picked from 9fdd77101f49d03ff29342e12e23edf241f68522)\n\nChange-Id: If955ca304db71a5b08c5a9654f1e27ab74af9af8\n"
    },
    {
      "commit": "75e96bb783f8460ca7e843d6f4906f117719689f",
      "tree": "13fa472dd73add1eb4fc560c3c0c527e3d78231c",
      "parents": [
        "d22b079f60eb6e89c9ae8f0b280c3d5c42415f96"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 13:24:48 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 17:38:30 2016 -0800"
      },
      "message": "Revert \"Revert \"adb: move adb_strerror to sysdeps/win32/errno.cpp.\"\"\n\nThis reverts commit 4891a152fb860cc8008a8456bb2a594fc40105d1.\n\nTest: mma\nChange-Id: I6b22ead8a4b964973ee2fdb8deba42bea74880cf\n"
    },
    {
      "commit": "4891a152fb860cc8008a8456bb2a594fc40105d1",
      "tree": "12c762611ef0ee79e30b30628819d726fb3a3117",
      "parents": [
        "3e5c19ac8e873ba146dd504309678eecdcd55f06"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 13:15:55 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 13:15:55 2016 -0800"
      },
      "message": "Revert \"adb: move adb_strerror to sysdeps/win32/errno.cpp.\"\n\nThis reverts commit 0c8a797169c9a69fab74e859cbbd1bbd2fde5ccf.\n"
    },
    {
      "commit": "0c8a797169c9a69fab74e859cbbd1bbd2fde5ccf",
      "tree": "b31caa98ef2815b54828a83e9645cfe4c6c45d24",
      "parents": [
        "25a992e758102489e98fbe6b2eb229be580b77e2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 30 11:21:22 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 30 13:23:21 2016 -0800"
      },
      "message": "adb: move adb_strerror to sysdeps/win32/errno.cpp.\n\nBug: none\nTest: mma\nChange-Id: I9df4d6faf9883a78f50ca6b2b7c35f095d06ae20\n"
    },
    {
      "commit": "e7daf5751162830000425c0e7de13a90809f1988",
      "tree": "f21497070656cfc371214565b607eae4ea5e7d52",
      "parents": [
        "007036c0c78dacdf00cff08fe79568f1409d61fc"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 21 12:37:10 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 21 17:22:22 2016 -0700"
      },
      "message": "adb: kill adb_mutex_t, adb_cond_t.\n\nNow that we have support for std::mutex and std::condition_variable on\nWindows, remove our mutex compatibility layer in favor of the C++ one.\n\nBug: http://b/31653591\nTest: mma \u0026\u0026 $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test \u0026\u0026 \\\n      python test_adb.py \u0026\u0026 python test_device.py\n      (also on Windows)\n\nChange-Id: I5b7ed9c45cc2a32edcf4e77b56dc28e441f15f34\n"
    },
    {
      "commit": "d6001b5e4880318de512b51e67079469eb1220be",
      "tree": "a0ae18e864b35a44e4a5cca7a1b3ec52213ce55e",
      "parents": [
        "801066a2b8dc1545cba6b6e16218b2f1a806e93d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 23 15:28:43 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 24 13:06:06 2016 -0700"
      },
      "message": "adb: check our socketpair ends in our win32 emulation.\n\nIn our Win32 socketpair emulation, check that the ends are properly\nconnected before returning.\n\nChange-Id: I33d356fd9ebcac89fc6a89a5200e926032220383\nTest: no additional failing tests in adb_test.exe\n"
    },
    {
      "commit": "8ac4599bd63e30677e393281ebd360aa4110a915",
      "tree": "88e3637b1401d505cdc041ff02fd09e633713790",
      "parents": [
        "0b155e1477bb57cd2caf0c0fcb663512d799683a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 08 12:52:37 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 08 12:52:37 2016 -0700"
      },
      "message": "std::unqiue_ptr\u003c..., decltype(\u0026fn)\u003e seems to be the preferred idiom.\n\nThis is the only decltype(fn)* outside aapt2 in the whole tree.\n\nChange-Id: I2e19d2031b56fdb808c62c2c07ca6080c9ec6fe3\n"
    },
    {
      "commit": "a4f9c17d4f2d03ab0e9936f0be878602513a86ea",
      "tree": "4b2b4c82fcb54bad2182a81bfe6124ea5f2bdcb6",
      "parents": [
        "cde85bfe4478b2dcacae0775e236a31ca76275fb"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 28 18:09:48 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 01 12:36:04 2016 -0700"
      },
      "message": "adb: fix stat on Windows.\n\nstat on Windows fails with ENOENT when passed a path with a trailing\nslash or backslash, regardless of whether the target is actually a\ndirectory. Emulate the correct POSIX behavior by stripping trailing\npath separators and then checking if the target is a directory if\nsuccessful.\n\nBug: http://b/30481559\nBug: https://code.google.com/p/android/issues/detail?id\u003d214633\nChange-Id: I1d398d19a9bce1ecb3fdc4aabc31aa98c82c3f93\nTest: Relevant adb_tests pass on Linux and Windows 10.\n"
    },
    {
      "commit": "e0a6e2a4b21c1aae27a21ea8e342b123e3e5be11",
      "tree": "2a10ba04138e22764b509bc2ef6d438a550dc51d",
      "parents": [
        "09ecaa50a09866457344c0dce3b397901e4257ba"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 26 22:43:19 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 27 16:14:02 2016 -0700"
      },
      "message": "Kill load_file.\n\nChange-Id: I6c332f7d8e94d513605295b3d4d32c4e1cf878dc\n"
    },
    {
      "commit": "19d0c23a5a8730cf30baeaed51ba9d2c8890cb60",
      "tree": "721bbf170deaba71d54149bfb7be3382207156f0",
      "parents": [
        "e29499c30c394708de7543c558c2fa3567d0dc23"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Apr 07 11:25:48 2016 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon May 09 16:55:10 2016 -0700"
      },
      "message": "adb: support forwarding TCP port 0.\n\nThis CL adds support to forward or reverse TCP port 0 to allow the\nsystem to automatically select an open port. The resolved port number\nwill be printed to stdout:\n  $ adb forward tcp:0 tcp:8000\n  12345\n  $ adb reverse tcp:0 tcp:9000\n  23456\nThis allows testing to be more robust by not hardcoding TCP ports which\nmay already be in use.\n\nForwarding port 0 is a host-only change and will work with any device,\nbut reversing port 0 requires the device to be updated with a new adbd\nbinary.\n\nThis CL also does a little bit of cleanup such as moving the alistener\nclass out of adb.h, and adds some error checking and additional tests.\n\nBug: 28051746\nTest: python -m unittest discover\nTest: adb_test\nTest: `adb forward` and `adb reverse` with tcp:0\nChange-Id: Icaa87346685b403ab5da7f0e6aa186aa091da572\n"
    },
    {
      "commit": "7c9e5fb0dd0eb5852a0b2343f8e10206084261fa",
      "tree": "b022aaf4af4b065901f602d10b50d922cc96d4c4",
      "parents": [
        "c6e3b12e2b86cf95c7f5b8c1fac3d47a73418508"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 18 11:09:28 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 18 14:33:38 2016 -0700"
      },
      "message": "adb: increase the FD table size on Win32.\n\n128 maximum FDs is a pretty low limit, which can easily be exhausted by\nport forwarding. Bump the maximum up to 2048, and add a test that checks\nwhether we can actually use a few hundred sockets.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d12141\nBug: http://b/28246942\nChange-Id: Ia4a2ff776e8e58ec13378756f19d80392679ece9\n"
    },
    {
      "commit": "c25a34eb389849d2abfff4b3ee7052967752e120",
      "tree": "9ee5f9d193a77e7c63e5abd1ae4a9a677c3c99c6",
      "parents": [
        "5684f936ec0718ddadfb6b0de4956823adecfdc5"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 22 14:27:23 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Feb 23 09:11:18 2016 -0800"
      },
      "message": "adb: use TCP keepalive.\n\nCurrently adb only realizes a TCP transport has gone away when it tries\nto send a packet, which caused problems in particular for `adb reboot`\nsince no packets are sent, leading to the client hanging until Ctrl+C.\n\nThis CL turns on TCP keepalive packets to send 1 packet every second,\nallowing up to 10 failures before disconnecting. Using built-in TCP\nfunctionality turns out to be much cleaner in this case than trying to\nimplement our own keepalive packets at the application layer, and\nshould be more lightweight since it\u0027s all done in the TCP stack.\n\nBug: http://b/23093474\n\nChange-Id: Ifb41cbb85b9752a9f394e1eed3c6ac4da47a4e4d\n"
    },
    {
      "commit": "61eda8d846db52230ad55fea60499a392ebcf2f4",
      "tree": "ae16421e638abff25ed1da056a088ddbab5ab39e",
      "parents": [
        "4f657a7de2d43c17fd7723930e8bedd73347c89a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 18 13:43:55 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 19 11:24:51 2016 -0800"
      },
      "message": "adb: add fd exhaustion test, fix errno reporting in sysdeps_win32.\n\nAdd a test for FD exhaustion, and fix cases where we weren\u0027t properly\nsetting errno.\n\nChange-Id: I486055bb9ead31089ce76b210c11de9e973f3256\n"
    },
    {
      "commit": "4f657a7de2d43c17fd7723930e8bedd73347c89a",
      "tree": "bd73e97a6538a65bc7fc82bcfd48b720bbd843af",
      "parents": [
        "e7388127438794f516143c3dade932cb297d6042"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 17 16:45:39 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 19 11:24:51 2016 -0800"
      },
      "message": "adb: move win32 fd base to 2048, fix fd allocation.\n\nWindows has a maximum fd limit of 2048, so we can avoid collision with\nreal file descriptors by starting from there. Also, fds would be\npreviously be allocated by a linear walk from the last allocated FD,\ninstead of the lowest available FD, as required by POSIX. Keep track of\nthe lowest available file descriptor to make things feel more familiar.\n\nChange-Id: Id6ac1c54f4f7964a6cdfa8d3f4f96262e4881964\n"
    },
    {
      "commit": "e7388127438794f516143c3dade932cb297d6042",
      "tree": "2e48d3bfd4c9d74d8f690102665c784558de8af6",
      "parents": [
        "50493b21257953a4466797989dadc5c077df014d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 16 17:34:53 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 19 11:24:51 2016 -0800"
      },
      "message": "adb: don\u0027t emulate fdevent or socketpair on Windows.\n\nChange-Id: I16cf7d4427eb79f36db39e91f85402a268fa72f5\n"
    },
    {
      "commit": "46f527c2db3fbd30f493ac083ea91b71c9190a5d",
      "tree": "a167df519c748ae03caa064a7e9231b06711452a",
      "parents": [
        "0e468cca2dd7d08227534b55791179ab2e8dfb29",
        "f373c355321884df5ac78cc887f1486cbc93ed16"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 01 20:49:25 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 01 20:49:25 2016 +0000"
      },
      "message": "Merge \"adb: win32: handle incomplete UTF-8 in console output, other fixes\""
    },
    {
      "commit": "c573d52b3a78b52e0108d70d3ca378d7c9b3171d",
      "tree": "2918565142088cc520485d368a1c448258e5912b",
      "parents": [
        "ea71e279bd63c510bcf10822fdd2a4689ca82a8d"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Jan 27 08:52:53 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 01 12:18:26 2016 -0800"
      },
      "message": "base: add SystemErrorCodeToString() function.\n\nPulls the Windows error string generation out of adb into libbase so\nthat it can be used by fastboot as well. Also makes a Unix equivalent\nthat just wraps strerror() so that upcoming fastboot error reporting\ncode can be platform-independent.\n\nThe intent here is just to provide a portable way to report an error to\nthe user. More general cross-platform error handling is out of scope.\n\nBug: http://b/26236380\nChange-Id: I5a784a844775949562d069bb41dcb0ebd13a32bc\n"
    },
    {
      "commit": "55441409311dad318224a8be076437b2c01d2794",
      "tree": "c476e624c9954c2cf1c719f5b18242b6774c06db",
      "parents": [
        "01f6fa3483b8360ef3418618393a7d94553fce1d"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sat Nov 07 17:34:39 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jan 28 23:01:56 2016 -0800"
      },
      "message": "adb: SIGWINCH support for Windows\n\n- Introduces unix_read_interruptible() which is like unix_read() except\n  that it can return EINTR.\n\n- The big idea is that the Windows ReadConsoleInput() API will return an\n  event on window resize and then we return EINTR from\n  unix_read_interruptible() just like Unix.\n\n- Only handles horizontal resize since Windows doesn\u0027t seem to give an\n  event for vertical resize when no special screen buffer is used. This\n  should be sufficient for the primary use case of adb on Windows\n  (people are not running vi in the first place).\n\nChange-Id: Id8d1710b559834c8098f2d7fbecedf2d0ade4b88\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "f373c355321884df5ac78cc887f1486cbc93ed16",
      "tree": "414022465f1eab5adfac64321911fc1a9d550436",
      "parents": [
        "01f6fa3483b8360ef3418618393a7d94553fce1d"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Nov 15 16:29:36 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jan 28 16:31:28 2016 -0800"
      },
      "message": "adb: win32: handle incomplete UTF-8 in console output, other fixes\n\nPreviously, the various adb_printf, adb_fwrite, etc. functions did not\ncorrectly handle the case of the passed buffer ending with an incomplete\nUTF-8 sequence. This is fixed by buffering up incomplete UTF-8 sequences\nin g_console_output_buffer (protected by the mutex\ng_console_output_buffer) and outputting it later once the full sequence\nis available.\n\nA unittest for the main worker function, ParseCompleteUTF8(), was added\nto adb_test.\n\nOther fixes:\n\n- Fix the return value of number-of-chars written to be number of UTF-8\n  bytes instead of number of UTF-16 characters.\n\n- Don\u0027t overwrite errno in success cases of various adb_printf, etc.\n  functions. This might be excessive, but might be useful in the case\n  when these functions are used for debugging/tracing.\n\n- Add missing UTF-8 stdio functions that aren\u0027t currently used by adb,\n  but might be in the future: vprintf, putc, putchar, puts.\n\n- stdin_raw_init: If we can\u0027t get the console handle, don\u0027t call\n  SetConsoleMode(). Not a big deal, but this will prevent erroneous\n  trace output.\n\nChange-Id: I8730e8af92882c42b884ad921b39a17b54465085\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2930cdc3bf241aa093cf007209bb0206597da3da",
      "tree": "e938a7da1869a005464f934d1507681fce3fb17c",
      "parents": [
        "ce50ecf7ed01da1575454c6fc10f64a711019e39"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 15:17:37 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 15:25:31 2016 -0800"
      },
      "message": "adb: tag fatal, fatal_errno with printf attribute.\n\nAlso, fix bugs that this uncovered. In particular, the sysdeps_win32\nFATAL macro would only print __FUNCTION__.\n\nChange-Id: I6307ec9749edec21b4fee192e135a86ec445c84b\n"
    },
    {
      "commit": "f55ead962f2257312af08fe730ef9d3f3d988e76",
      "tree": "75488c67fc418f771691c0aa9caa88346126ed75",
      "parents": [
        "b13dd00d883d02dfef1a403caa63501ddca50a09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "message": "Track rename of base/ to android-base/.\n\nChange-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf\n"
    },
    {
      "commit": "50f5bf18e3831557c5726ae050577f8fe2e6151b",
      "tree": "d497eb61563f4d8b0cfd541b6c378edc98bc0eed",
      "parents": [
        "ac9a78090498f3e75bd0c25064a90f6eb3dc496b"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Nov 12 15:20:15 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Nov 12 17:13:08 2015 -0800"
      },
      "message": "adb: win32: remove widen()/narrow() in favor of UTF8ToWide()/WideToUTF8()\n\nNow that we have a more standardized API (also available in Chromium),\nswitch to it. Another benefit is real error handling instead of just\nkilling the process on invalid Unicode.\n\nMake UTF8ToWide()/WideToUTF8() set errno to EILSEQ on bad input. This is\nthe same error code that wcsrtombs(3) uses.\n\nUpdate the unittest to check for EILSEQ.\n\nChange-Id: Ie92acf74d37adaea116cf610c1bf8cd433741e16\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "ac9a78090498f3e75bd0c25064a90f6eb3dc496b",
      "tree": "bcd0245dca3b4ece5787ad20968d5e635ffcd848",
      "parents": [
        "b431aaeac7ad1fc5f7eaa4fd752286687c5f9108",
        "e3a87d0a36d38ba986ef762a7f0fab2214f53f5d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 12 22:50:03 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 12 22:50:03 2015 +0000"
      },
      "message": "Merge changes Ic124ecb9,I94de55d2\n\n* changes:\n  libbase: remove exit-time destructors.\n  adb: remove exit-time destructors.\n"
    },
    {
      "commit": "e3a87d0a36d38ba986ef762a7f0fab2214f53f5d",
      "tree": "6a3f6a82c662e6d70fb3ca9c47e0c17f2516b2fa",
      "parents": [
        "bff43dec8dec9ae0ea23bab70a14280af0b39ac7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 11 17:56:12 2015 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 12 11:20:19 2015 -0800"
      },
      "message": "adb: remove exit-time destructors.\n\nOn exit, these destructors get invoked while other threads might\nstill be using them, potentially causing a crash, and definitely\ncausing tsan to report a race condition.\n\nBug: http://b/23384853\nChange-Id: I94de55d22f97f4edd1d7cc1f34e8c1f8dfd56a5a\n"
    },
    {
      "commit": "37be38a6a8896f3e933e8e7fb2a5eb84f6e6d901",
      "tree": "83f3fae08cf0371cf614f730f9952359266f20b7",
      "parents": [
        "bff43dec8dec9ae0ea23bab70a14280af0b39ac7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 18:02:29 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 18:23:00 2015 -0800"
      },
      "message": "Revert \"Revert \"adb/base: fix adb push of Unicode filenames on Win32\"\"\n\nThis reverts commit 74e1a217fd93296e6e839e229a7f84dc8829cadd.\n\nWith the dependency on libcutils (for gettid for non-bionic) removed,\nthis no longer breaks the build.\n\nChange-Id: I645bd6876e2502ddc1535b69af1e645c0df9d178\n"
    },
    {
      "commit": "9c8f7463bb592abf67f50bbe43e67afeed768265",
      "tree": "b0b7e246721b6d04e2577cb055577a42fbdb3547",
      "parents": [
        "51084e37009b950400c031c2c561060e022d5363"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Nov 10 19:17:16 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Nov 11 16:59:06 2015 -0800"
      },
      "message": "adb: win32: fix adb shell\n\n4cf6f10e6498f4e4d1411438b929b08c52cda952 broke adb shell on Windows\nbecause it was calling unix_read() with a buffer size of 1 byte which\nwasn\u0027t supported by unix_read()/_console_read().\n\nThis change makes _console_read() support such a small buffer by\nmaintaining an internal input buffer.\n\nThis lets us simplify the existing code that was already maintaining a\ncached INPUT_RECORD.\n\nAlso eliminate some duplicate code in the big switch statement.\n\nChange-Id: I8f0aed4fb9f6f2f5b9a6b68ce60d2e368fec81c7\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "74e1a217fd93296e6e839e229a7f84dc8829cadd",
      "tree": "b7dbd50d731c6f6e4282814e61430069890803eb",
      "parents": [
        "337c3ce30a9cb46dfbb019330d69d1edb7d02fe9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 18:01:12 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 18:01:12 2015 +0000"
      },
      "message": "Revert \"adb/base: fix adb push of Unicode filenames on Win32\"\n\nThis reverts commit 337c3ce30a9cb46dfbb019330d69d1edb7d02fe9.\n\nThe new gettid dependency caused other breakage.\n\nChange-Id: I74a75e40c30a45beb275f9dd38eb5c7beac15fbd\n"
    },
    {
      "commit": "337c3ce30a9cb46dfbb019330d69d1edb7d02fe9",
      "tree": "c70c7b697ea8dcbd02f00bf617b0fb657d76962b",
      "parents": [
        "4e71dc149fcec4434fcbf71b18421d5182a5fa21"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Oct 21 22:22:50 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Nov 10 15:48:54 2015 -0800"
      },
      "message": "adb/base: fix adb push of Unicode filenames on Win32\n\ndde00be9c404ba97034ae74cc8a244efa6add851 made adb push use\nandroid::base::ReadFileToString() for small files, but that API did not\nsupport UTF-8 filenames on Windows, until this fix which does the\nfollowing:\n\n- Add android::base::{WideToUTF8,UTF8ToWide}() which are only available\n  on Windows. The signatures are based on Chromium\u0027s APIs of the same\n  name.\n\n- Add the namespace android::base::utf8 which has versions of APIs that\n  take UTF-8 strings. To use this, make sure your code is in a namespace\n  and then do \"using namespace android::base::utf8;\". On Windows, this will\n  make calls to open() call android::base::utf8::open(), and on other\n  platforms, it will just call the regular ::open().\n\n- Make ReadFileToString() and WriteStringToFile() use utf8::open() and\n  utf8::unlink().\n\n- Adapt unittests from Chromium.\n\n- fastboot needs to link with libcutils because it links with libbase\n  which depends on libcutils for gettid() for logging.\n\nChange-Id: I1aeac40ff358331d7a1ff457ce894bfb17863904\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "a826579d6d8fd4b96ee2dde74ea83bd226dda654",
      "tree": "0718901b08380db487341a85f28bc39f11d9244d",
      "parents": [
        "6a9234481f5ca4a30ced8c23a77e25b091f0425d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 03 11:18:40 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 04 10:45:11 2015 -0800"
      },
      "message": "adb shell SIGWINCH support.\n\nBug: http://b/19734542\nChange-Id: Ic9404a132cb9c42cb6a378bcd4b3dea9188d0a44\n"
    },
    {
      "commit": "588053606552a5290ef63a7c586601019b4c4ed4",
      "tree": "5045251681c210f60153568b82105e9a37816d3a",
      "parents": [
        "5806e73691a1dd09764e568ea96027e31c7784a8"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Oct 28 14:29:51 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Nov 02 16:44:34 2015 -0800"
      },
      "message": "adb: create unix_isatty() function.\n\nOur Windows code has several different ways it checks whether an FD is\na console or not, some of which aren\u0027t exactly correct as they may\ntreat character devices (e.g. NUL) as consoles.\n\nThis CL disallows using the builtin isatty() function and provides\nunix_isatty() instead which correctly checks these corner cases.\n\nChange-Id: I6d551c745dae691c7eb3446b585265d62c1e62fa\n"
    },
    {
      "commit": "6c73bfc3c20145c71f7ae5ee53fac5a80b630977",
      "tree": "1c118e45df1ce4a883211826182025466c42b891",
      "parents": [
        "ecd83eb4cb9d98609dba8dc4500922df0e32bb0c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 27 13:40:35 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 27 15:46:41 2015 -0700"
      },
      "message": "Don\u0027t use VLAs in adb.\n\nThis makes no measurable difference to the sync time; \"adb sync\" of\neverything on /system for a Nexus 9 still takes 20s.\n\nChange-Id: Ifa2626f7453937e43856b9c4ee06e1f5db0aa273\n"
    },
    {
      "commit": "028e15959e3c4fa8e87e16cea6311f0505296906",
      "tree": "07882589e6ad98e30d1f4997b5e669ed303a39b2",
      "parents": [
        "3285c233b2c7d5e5ab205908a71c695d34b089ea"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Oct 18 16:45:09 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Oct 18 16:45:09 2015 -0700"
      },
      "message": "adb: win32: Improve Winsock error code mappings and strings\n\nImproved mapping of Winsock error codes to POSIX error codes, especially\nWSAECONNABORTED to EPIPE (which WriteFdExactly() looks for) when sending\nto a closed socket and WSAECONNRESET to ECONNRESET when the peer resets\nthe connection.\n\nUse a macro to map strerror() to adb_strerror() which handles these\nPOSIX error codes that the Windows C Runtime doesn\u0027t recognize.\n\nAlso:\n\n* Unittest for adb_strerror().\n\n* Don\u0027t trace when send() returns WSAEWOULDBLOCK because that is\n  expected.\n\nChange-Id: If46aeb7b36de3eebfbbccf5478ff5b1bb087714b\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "3fe11f6bb3a4bf130bf35f1abcedbe51da73f622",
      "tree": "1c4e48deccf2ffdc06e2c22bf9a5a12862ea6cba",
      "parents": [
        "edbc20fc84d6ffb6455e2a2dd0ae471bdd87607b"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Oct 06 15:30:03 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Oct 15 09:44:54 2015 -0700"
      },
      "message": "adb: non-interactive shell stdin.\n\nNon-interactive `adb shell` previously only read from the remote shell,\nbut we want it to write as well so interactive and non-interactive\nshells can both send data. With this CL, we can now do:\n  $ echo foo | adb shell cat\n  foo\n\nThis is primarily usable with newer devices that support the shell_v2\nfeatures. Older devices will receive stdin but the shell will still\nhang after all input has been sent, requiring user Ctrl+C. This seems\nbetter than closing communication altogether which could potentially\nmiss an unpredictable amount of return data by closing too early.\n\nKnown issue: non-interactive stdin to a PTY shell isn\u0027t reliable.\nHowever I don\u0027t think this is a common case as ssh doesn\u0027t seem to\nhandle it properly either. Examples:\n  * echo \u0027echo foo\u0027 | adb shell\n  * echo \u0027foo\u0027 | adb shell -t cat\n\nBug: http://b/24565284\nChange-Id: I5b017fd12d8478765bb6e8400ea76d535c24ce42\n"
    },
    {
      "commit": "c7c45611f624c9c04a43ca74c5c17a3d4b2b123c",
      "tree": "b25c44e2467481efafeae1c0062723d1190fdc5f",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 29 15:05:29 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 29 15:05:29 2015 -0700"
      },
      "message": "adb: win32: specify socket protocol\n\nInstead of using socket(..., 0), pass IPPROTO_TCP or IPPROTO_UDP. Using\nzero wasn\u0027t buying us anything and was different than popular apps like\nChrome. We should stick to what everyone else does so that we don\u0027t go\ndown different code-paths and potentially hit Winsock service provider\nissues that everyone else is (accidentally) avoiding.\n\nAlso CHECK() if send() returns an erroneous value as described in the\nChromium source.\n\nAlso add comment about socket buffer sizing and Windows Vista.\n\nChange-Id: I63db8f6de352fe1e9525cbc9cfc040eb02a4b9cd\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "19bec5b329fe202795688bfb76d77f4560adf2c6",
      "tree": "e046660c0f6fcf1038982323810cb15e0326d591",
      "parents": [
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 15:52:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 23 12:53:38 2015 -0700"
      },
      "message": "Adb: use VLOG() to replace D() for verbose logging.\n\nAs there are too many D(), we can keep both VLOG() and D() now, and get\nrid of D() gradually.\n\nChange-Id: I2f1cb70bcab3e82c99fed939341d03f6b2216076\n"
    },
    {
      "commit": "7616ae1c1462fd4d442e845bed856b1bfcd4135f",
      "tree": "a0100f88a1b5aaa6cb15678906d97149046a7f0e",
      "parents": [
        "5c235102e68dcc7daca16a873e50e0d1261f50ed"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 16:06:59 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 18:28:27 2015 -0700"
      },
      "message": "adb: fix shell_service_protocol_test for Windows.\n\nAdds missing #ifdef guards to shell_service_protocol_test.cpp so the\ntest compiles on Windows.\n\nAlso fixes a bug in Windows socketpair write implementation. Previously\nit was only checking for a closed pipe if the write happened to block.\nThis adds an additional pre-check to exit immediately on a closed pipe.\n\nThese two changes allow the test to compile and pass on Windows.\n\nChange-Id: Ib8853ed72f015fc0d623da47c32982cb3ffa4a3d\n"
    },
    {
      "commit": "50740f56162807f9e88d36249e7d466d8ce5a282",
      "tree": "6cb4130833d3bb7c40f5bfa38f2c707c66b7dc1a",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Sep 08 17:13:04 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 11 15:53:08 2015 -0700"
      },
      "message": "adb: win32: make adb_getenv() case-insensitive\n\nadb_getenv() should be case-insensitive just like the real getenv() on\nWindows.\n\nAdded a unittest for adb_getenv(). In the process, made adb_test link\nwith -municode so that the environment block is Unicode.\n\nMove wmain() from main.cpp to sysdeps_win32.cpp so that adb_test could\nalso use it.\n\nBecause wmain() moved, it wasn\u0027t as easy to do the runtime check to\nverify that -municode was used, so do that check in _ensure_env_setup()\nsince adb_getenv() is called early in adb anyway.\n\nAdded a utility ToLower() which is good enough for env vars whose keys\nare probably always ASCII to begin with.\n\nChange-Id: I082f7fdee9dfe2c7f76b878528d2f7863df6d8d1\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "815ad88d465c07b09eae296db6f41b7bef3c3cc4",
      "tree": "b52bacf0f8fdeaad7b5dfa89f3ffeff841dc8e1d",
      "parents": [
        "7d5e6e62f2d618ba376cbc9b8a5def881a73f1a9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 17:44:28 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 20:21:00 2015 -0700"
      },
      "message": "adb: clean up debug tracing a little.\n\nAlways use LOG() for debug tracing.\nRemove useless D_lock. I believe it is useless to lock just before and after fprintf.\n\nI verified the log output both on host and on device. The output looks fine to me.\n\nChange-Id: I96ccfe408ff56864361551afe9ad464d197ae104\n"
    },
    {
      "commit": "2bbb3a9fa2fa2b331e04b2c296ed9a10c0b55669",
      "tree": "0d17b6d49ac455546a01ffb92f96010606f8ad8c",
      "parents": [
        "736ab390a4d4c2355e50842f43a631c2d177c506"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 26 18:46:09 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 26 18:46:09 2015 -0700"
      },
      "message": "win32: adb start-server shows stdout/stderr output from actual server\n\nWhen launching the adb server (typically from adb start-server),\nredirect stdout/stderr to anonymous pipes which are read by threads in\nthe parent process, to make error diagnosis easier.\n\nIf there is an error during adb start-server, the output looks like:\n\n\u003e adb start-server\n* daemon not running. starting it now on port 5037 *\nerror: could not blah                 # from server process\ncould not read ok from ADB Server     # from launch_server\n* failed to start daemon *            # from adb_connect\nerror: cannot connect to daemon       # from adb_commandline\n\nFix handle-leaks in launch_server by using new unique_handle class\nthat is based on std::unique_ptr.\n\nIn the server, close stdin and redirect to adb.log *before* sending the\nACK, so that any errors are reported early instead of after the ACK.\n\nChange-Id: I943881210a0ea9458fc36851339f916c3d6a0830\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2521f51b977a7b667f4c65f24598c288a9a56795",
      "tree": "a927aa30455d8f0b4e68d7fa8211a55ebe2a3f7f",
      "parents": [
        "2ccc459e722ed5dda685e686536a721fc64a2ee1",
        "32625851925b0a2a933fdeeaa07035b6020295dc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 13 17:49:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 17:49:21 2015 +0000"
      },
      "message": "Merge \"adb: improve network error info\""
    },
    {
      "commit": "c7c1ca62132a10d82aca4d096652bae0470ff19f",
      "tree": "b5e61f26a1420c16bdf83668071e0870d6ed5d17",
      "parents": [
        "086ed8768efdd187f916bd21bc14ef4ada9bfb63"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 12 18:19:16 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 12 18:19:16 2015 -0700"
      },
      "message": "adb: win32: fix shutdown deadlock\n\nadb can hang at shutdown due to a deadlock relating to WSACleanup().\nThis works around the issue by not calling WSACleanup() which shouldn\u0027t\nbe done anyway since threads aren\u0027t done using Winsock at shutdown.\n\nA quick way to reproduce the original problem is to run many instances\nof adb, many of which will call exit() soon:\n\n  for /l %i in (1,1,20) do @start adb nodaemon server\n\nYou may have to boost the 20 to 200, or set ADB_TRACE\u003d1 or use Windows\n10 instead of Windows 7, to affect the timing, but eventually there\nshould be hung adb processes with that repro.\n\nA more complete fix to prevent problems like this from occuring in the\nfuture, would be to additionally do the following:\n\n- Investigate all static destructors that are called when exit() is\n  called.\n\n- If they don\u0027t do anything important, switch all calls to exit() to\n  instead call _exit() and then ban exit() from being called.\n\nChange-Id: Id1be3bf0053809a45f2eca4461e4c35b5ef9388d\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "32625851925b0a2a933fdeeaa07035b6020295dc",
      "tree": "3f98d3b8928803e5ed4fb8f350ac392eacd8420c",
      "parents": [
        "3a698637918d05e1fed131ae445bf6c764ff525a"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 16:45:32 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 16:45:32 2015 -0700"
      },
      "message": "adb: improve network error info\n\n- handle_forward_request\n  - Because we have detailed info about which syscall failed (at least\n    on Win32), use a more generic prefix of \"cannot bind listener\" followed\n    by the detailed info.\n\n- install_listener\n  - Return string errors for a few errors even though I don\u0027t think any\n    callers actually output the string for those errors.\n\n  - Remove the printf since the callers print the message themselves.\n\n- adb_main\n  - LOG(FATAL) calls abort() which on Windows calls the Windows Error\n    Reporting service which pops up a dialog asking if you want a\n    crashdump to be uploaded to Microsoft. So really, abort() is\n    designed for app bugs. Windows isn\u0027t the only one doing this, Chromium\n    also makes LOG(FATAL) crashdump-ready. Since an error here is not\n    necessarily an app-bug, use a \u0027normal\u0027 error output API like fatal()\n    which prints an error and just uses exit().\n\n- sysdeps_win32.cpp\n  - When Winsock APIs fail, make the string clarify which API failed.\n    Use terse unix-style descriptions (like what you\u0027d get from\n    cp/mv/dd/etc.).\n\n  - Don\u0027t trace WSAEWOULDBLOCK from recv() which is a normal occurrence.\n\n  - Add a comment about WSAEWOULDBLOCK \u003d\u003e EAGAIN.\n\nChange-Id: I58e47f49fa2f6c1b4b92a36d0c4bfe369b456f2a\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "a7549c6131a2f09612156bdf7a332a69ec1ebadd",
      "tree": "33f9e5b609267f96057de437bdedc0d3a3f3e568",
      "parents": [
        "83d2e629bac0088048c59e03d91139efdd3bc4cc",
        "1ba530972e47050ed10f22328ddce92bf9e97654"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 04 00:51:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 04 00:51:38 2015 +0000"
      },
      "message": "Merge \"Fix a comment typo.\""
    },
    {
      "commit": "83d2e629bac0088048c59e03d91139efdd3bc4cc",
      "tree": "29dbdebb30ac92269103590fad50a08da9b06386",
      "parents": [
        "e103818cdbf1493ff75a1083c0413961c340633c",
        "b732a37031e0cfc0914d9fdee674ba297da9d4fd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 04 00:50:43 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 04 00:50:43 2015 +0000"
      },
      "message": "Merge \"adb: win32: file descriptor reliability improvements\""
    },
    {
      "commit": "1ba530972e47050ed10f22328ddce92bf9e97654",
      "tree": "e36ccae1b757fe0da67ddd43576aa2bf400cfa24",
      "parents": [
        "e103818cdbf1493ff75a1083c0413961c340633c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 03 16:26:13 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 03 16:26:13 2015 -0700"
      },
      "message": "Fix a comment typo.\n\nChange-Id: Ifacb19b9c31ac81fbf02c8382eb0324ea79075b9\n"
    },
    {
      "commit": "e103818cdbf1493ff75a1083c0413961c340633c",
      "tree": "cfff33ac40f2e270aab1ba2e4734d05465919a16",
      "parents": [
        "bffb3de1c6e989c6833bd690dcf54fa80a7a3617",
        "cc467f1e6b13da75de021e0d50ed0bfbfd9aa221"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 03 21:16:26 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 03 21:16:26 2015 +0000"
      },
      "message": "Merge \"adb: win32: define UNICODE/_UNICODE, Unicode error messages, misc\""
    },
    {
      "commit": "1711e01f1452f8f8caf315ca23618b17f0811596",
      "tree": "ff2cbeba5e70405ad1af06daab19eeb0c505f390",
      "parents": [
        "d0bdf9a27e8a3e17b1e666887ed2d85d94d606b5"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:50:17 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:50:17 2015 -0700"
      },
      "message": "adb: win32: call SystemErrorCodeToString() from more places\n\nImprove some error messages, or trace output.\n\nChange-Id: Ib09fac33a296f090d37f125cad7556fc5b5e928e\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "cc467f1e6b13da75de021e0d50ed0bfbfd9aa221",
      "tree": "0b4ab9fbd4890f3860cb29e3174ce83281516a10",
      "parents": [
        "d0bdf9a27e8a3e17b1e666887ed2d85d94d606b5"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:13:54 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:13:54 2015 -0700"
      },
      "message": "adb: win32: define UNICODE/_UNICODE, Unicode error messages, misc\n\nDefine the UNICODE and _UNICODE preprocessor symbols to make passing\nchar* to Ansi/Unicode-agnostic Windows and C Runtime APIs break the\nbuild. The solution is to call wide Windows and C Runtime APIs and use\nwiden(utf8).c_str(). Most code was already calling wide APIs. Defining\nthese symbols makes a call to CreateEvent() (which previously mapped to\nCreateEventA()) turn into a call to CreateEventW().\n\nMake SystemErrorCodeToString() use Unicode.\n\nAdd various comments.\n\nChange-Id: I9b212412348a29826718e897a486489e1f142d16\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "b732a37031e0cfc0914d9fdee674ba297da9d4fd",
      "tree": "9e4b46b6b95f39d224d30891dc4ee1fb42a98553",
      "parents": [
        "d03770fb2b9bbf32e5716d8a5c5f8ae93c42d19d"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri Jul 24 15:38:19 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri Jul 31 15:13:52 2015 -0700"
      },
      "message": "adb: win32: file descriptor reliability improvements\n\nWhen repeatedly opening and closing a file descriptor, the sequence of\nfds returned was: 100...227,100,100,100,100,100... Basically, the first\nwave was constantly increasing fds, but after the entire fd table was\ntraversed once, the alloc algorithm would switch to returning the first\nfree fd. This is sub-optimal for reliability because use-after-free bugs\nwould be more likely to be hit because right after a close, the same fd\nwould be given out next.\n\nThis change makes the alloc algorithm use a persistent clock hand that\nwalks forward through the fd table (wrapping around if necessary),\nsearching for a free fd.\n\nThis change adds locking for fd closing:\n\n - This prevents multiple concurrent closes of the same fd.\n\n - There was a race between alloc and close that wasn\u0027t guaranteed to be\n   correct: close would set f-\u003eclazz to NULL last, but without any\n   preceding memory barrier/fence, then the alloc thread would check for\n   NULL. It probably worked out ok in practice, but it is probably best\n   to fix this up with a lock (as in this change) or a memory barrier/fence\n   (but this code isn\u0027t about performance, so why go with a complicated\n   barrier/fence?)\n\nAlso in this change:\n\n - Use errno \u003d EMFILE for the out of fds case.\n\n - Clear FH-\u003ename\n\nChange-Id: Ic11d2a1a9d53996edfc1ca13566a2f46de4a4316\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "6815c07fbe95c9f38362d5cbf80d8286e3d86950",
      "tree": "4675cd2e9c7cfc7cc929796485b1e36f081ac21e",
      "parents": [
        "c5dc27027a99fb09503d96a875a23c03eb4ac885"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon May 11 01:08:48 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 31 13:30:41 2015 -0700"
      },
      "message": "adb: win32: Unicode path names, env vars, some console support\n\nInitial support for Unicode file/dir names. Unicode paths can be passed\non the command line, directory enumeration can enumerate Unicode paths,\nUnicode paths are used for file access, and Unicode paths can be output\non the console correctly.\n\nAlso Unicode environment variable access.\n\nInitial support for Unicode output from adb shell (which uses\nadb_fwrite()). This is partial because the corner case of an\nadb_fwrite() call with an incomplete UTF-8 multi-byte sequence does not\noutput correctly, but this should be uncommon, is better than what we\nhad before (*always* incorrect UTF-8 multi-byte sequences) and can be\nfixed in the future.\n\nCalls to Windows APIs with char strings were changed to pass wchar_t\nstrings to the FooW() variants.\n\nFor more details, see the giant comment in sysdeps_win32.cpp.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d8185\n\nChange-Id: I7ebf6713bb635638b986ccee97b354428837c9c5\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "753d485aca0e35bc92a7dec0c3278f0530dc25ca",
      "tree": "7dfddab77e98b5fa205a0aed70ff8c6d0d5285e2",
      "parents": [
        "9897771f79a760bcd337cae67500ebb5ff1d619f"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "message": "adb: win32: initial IPv6 support and improved Winsock error reporting\n\nCall getaddrinfo() for connecting to IPv6 destinations.\n\nWinsock APIs do not set errno. WSAGetLastError() returns Winsock errors\nthat are more numerous than BSD sockets, so it really doesn\u0027t make sense\nto map those to BSD socket errors. Plus, even if we did that, the\nWindows C Runtime (that mingw binaries use) has a strerror() that does\nnot recognize BSD socket error codes.\n\nThe solution is to wrap the various libcutils socket_* APIs with\nsysdeps.h network_* APIs. For POSIX, the network_* APIs just call\nstrerror(). For Windows, they call SystemErrorCodeToString() (adapted\nfrom Chromium).\n\nAlso in this change:\n\n - Various other code was modified to return errors in a std::string*\n   argument, to be able to surface the error string to the end-user.\n\n - Improved error checking and use of D() to log Winsock errors for\n   improved debuggability.\n\n - For sysdeps_win32.cpp, added unique_fh class that works like\n   std::unique_ptr, for calling _fh_close().\n\n - Fix win32 adb_socketpair() setting of errno in error case.\n\n - Improve _socket_set_errno() D() logging to reduce confusion. Map\n   a few extra error codes.\n\n - Move adb_shutdown() lower in sysdeps_win32.cpp so it can call\n   _socket_set_errno().\n\n - Move network_connect() from adb_utils.cpp to sysdeps.h.\n\n - Merge socket_loopback_server() and socket_inaddr_any_server() into\n   _network_server() since most of the code was identical.\n\nChange-Id: I945f36870f320578b3a11ba093852ba6f7b93400\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "fe44751e166013dbaf4ec60a73c3c4e62450e0e2",
      "tree": "77ff7e139f6aecec1658961aa01fe989c0cf124b",
      "parents": [
        "455ffbd15da28b05a489351af9def50b6c6ac948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 24 11:35:40 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 24 11:35:40 2015 -0700"
      },
      "message": "Fix Win32 adb build.\n\nChange-Id: I0a07379c470b7fa7f9bdef68c17ccb7bd0bd2079\n"
    },
    {
      "commit": "43df109b4b0bb8e08cb4068c4983f32584dfef9a",
      "tree": "9946617f72ea0ea7400c68d9d56052890b7cb3d6",
      "parents": [
        "6cde25edd8c2ef313aebe5852496baa5218ee48a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 17:12:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 21:14:38 2015 -0700"
      },
      "message": "Report getaddrinfo failures correctly.\n\nAlso move us off the \"convenience\" function because you can\u0027t get useful\nerror reporting from it.\n\nChange-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65\n"
    },
    {
      "commit": "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
      "tree": "62e95a1ffffde3814c2818c52b2d9404856b57ae",
      "parents": [
        "bba4d471283190dd9b153b7e13efdb28da0b6695"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "message": "adb: logging: newlines, thread ids, error code overwriting\n\nAdd missing \\n to uses of legacy D() macro. This should make the legacy\nlogging easier to read (and harder to miss important stuff).\n\nOn POSIX, use gettid() from libcutils instead of pthread_self() so that\nthe output shows a more reasonable number instead of a pointer value.\nThis should be ok since libbase\u0027s logging already uses gettid().\n\nWin32:\n\nDon\u0027t let the Win32 last error get overwritten by API calls after the\noriginal error\u0027ing API. When encountering an unknown error, log the\nspecific error code.\n\nChange-Id: Ib8f72754efa7ba895d2f1cd914251fec2a1d894c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "3a2421b940e844e6c29da9ec389da42dc87f90f2",
      "tree": "331a2e72aa1ce7167daba893914f0ffc386b1b2f",
      "parents": [
        "b1d05de8a377b369b424d0e6c79f1843581bc1e9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:09:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:20:49 2015 -0700"
      },
      "message": "adb: fix adb_close() vs. unix_close() usage\n\nDocument the differences between adb_*() and unix_*() in the function\nprototypes in sysdeps.h. See the file for the details (CR/LF\ntranslation, well-known file descriptors, etc.).\n\nFix adb_read(), adb_write(), and adb_close() calls that should really be\nunix_read(), unix_write(), and unix_close(). Note that this should have\nno impact on unix because on unix, unix_read/unix_write/unix_close are\nmacros that map to adb_read/adb_write/adb_close.\n\nImprove sysdeps_win32.cpp file descriptor diagnostic logging to output\nthe name of the function that was passed a bad file descriptor.\n\nChange-Id: I0a1d9c28772656c80bcc303ef8b61fccf4cd637c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "9ca39e3b3771099dc41dd37968c56a2d15c3a4fc",
      "tree": "57ec0602623f840890b7d1ce7978733e71f8b9bc",
      "parents": [
        "211b490c576ad10c862defb62563d9b804ad05d2"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue May 19 22:12:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed May 20 12:25:19 2015 -0700"
      },
      "message": "adb / libbase: clean up NOGDI and evil ERROR macro\n\nInstead of defining and undefining NOGDI:\n\n1. Always #include \"base/logging.h\" after #include \u003cwindows.h\u003e.\nUnfortunately, I could not find an easy way to give the user a\nwarning/error if they include in the wrong order.\n\n2. base/logging.h does #undef ERROR to undefine the evil ERROR macro\nthat is from another era and probably a bad idea to begin with.\n\nChange-Id: I995d89620611e849af9d7ec47eb55fc0512377f2\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "7dc759fb0c860d8e8cf44375556ed1c9089b52e8",
      "tree": "041eddea8f29e048bef67e7da2a884c60c9495ed",
      "parents": [
        "a8c34142be062033dfa930a4afcc0e2d2bd9013f"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed May 06 16:13:42 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed May 06 18:54:08 2015 -0700"
      },
      "message": "adb: win32: fix adb emu command\n\nThe adb emu command was never working because the socket connection to\nthe emulator was closed without reading all of the data that the\nemulator sent. On Windows, this caused the emulator\u0027s recv() call to\nerror-out, so it never got the command that was sent.\n\nBefore settling on this fix, I also experimented changing the arguments\nto the socket shutdown() call and that didn\u0027t seem to help. I also tried\nremoving the call to shutdown() and that didn\u0027t help. So that should\nrule out shutdown() as the problem. One experiment that helped was\ndelaying before calling adb_close(), but that is of course fragile and\ndoesn\u0027t address the real issue, which is not closing the socket until\nthe commands have been read.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d21021\n\nChange-Id: I8fa4d740a2faa2c9922ec50792e16564a94f6eed\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "88b4c85a6f7fbc094f55c9e5322e1e16857006a2",
      "tree": "5eae0ad266a6ac7680a12dd088142c1fb953fc7c",
      "parents": [
        "da94581ec4a749f738bebaaa5d0ebcca4017143e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 30 17:32:03 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 15:55:37 2015 -0700"
      },
      "message": "More adb buffer fixes.\n\nThis patch factors out a lot of the basic protocol code: sending OKAY,\nsending FAIL, and sending a length-prefixed string.\n\nADB_TRACE has been non-optional for a long time, so let\u0027s just remove\nthe #ifs.\n\nAlso actually build the device tracker test tool (and remove its duplicate).\n\nBug: http://b/20666660\nChange-Id: I6c7d59f18707bdc62ca69dea45547617f9f31fc6\n"
    },
    {
      "commit": "fb2ba514edb9ae9a086daef54aa7a61708595442",
      "tree": "0e5ac03f0144b548c0938e3599fd8b8573b41394",
      "parents": [
        "949f2620c7ae33742ad639cf893c007204dc2074"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 23:02:00 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 27 19:42:20 2015 -0700"
      },
      "message": "Remove strtok from adb.\n\nAlso fix android::base::Split to behave like Java, Python, and google3.\n\nChange-Id: Ifbffd4e92950a79e7aea5d153c95fe0980648417\n"
    },
    {
      "commit": "6a09693ffd699ac5aafbd0f2ff166e28dac0194e",
      "tree": "4a3a7170a6394be8628ce44178bae9dee4d82404",
      "parents": [
        "392692c021e13760a89f18cae8bbba84a0adb4f1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 16:47:02 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 16:47:02 2015 -0700"
      },
      "message": "Move sysdeps_win32 to C++.\n\nChange-Id: I27ca41b64d62bb3611b3a39a5c3bb4377d0773bc\n"
    },
    {
      "commit": "beb619862281b8e92639b74efe81b4bbcd4f3d6f",
      "tree": "85d1890dc3c19890464cc5900fd308c8f9da5221",
      "parents": [
        "dec2b249b4ab158e3bb7304081bd517825e7a877"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Mar 01 15:06:21 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Mar 26 12:26:08 2015 -0700"
      },
      "message": "adb shell: Win32: fix Ctrl-C, tab completion, line editing, server echo\n\nThe \u0027adb shell\u0027 command on Windows has had problems:\n\n* Ctrl-C killed the local Windows adb.exe process instead of sending the\nCtrl-C to the Android device.\n\n* Local echo was enabled, causing everything typed to be displayed twice.\n\n* Line input was enabled, so the Android device only received input\nafter hitting enter. This meant that tab completion did not work because\nthe tab wasn\u0027t seen by the shell until pressing enter.\n\n* The usual input line editing keys did not work (Ctrl-A to go to the\nbeginning of the line, etc.).\n\nThis commit fixes these issues by reconfiguring the Win32 console and\nthen translating input into what Gnome Terminal would send, in effect\nsomewhat emulating a Unix terminal.\n\nThis does not fix all Win32 console issues, but is designed to be better\nthan what we had before, and to make the common day-to-day usage much\nmore comfortable and usable.\n\nChange-Id: Idb10e0b634e27002804fa99c09a64e7176cf7c09\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "db6fe6428c1ca5f397d3853f2b96c3e3e878b172",
      "tree": "7c788a60093d22977baee6c6625107abf40b66e3",
      "parents": [
        "0e0ce0662e948b9cfb1b42e48f18d3c4643b6c1e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:21:08 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:32:33 2015 -0700"
      },
      "message": "File header cleanup.\n\n * sysdeps.h should always be included first.\n * TRACE_TAG needs to be defined before anything is included.\n * Some files were missing copyright headers.\n * Save precious bytes on my SSD by removing useless whitespace.\n\nChange-Id: I88980e6e00b5be1093806cf286740d9e4a033b94\n"
    },
    {
      "commit": "31aafa68331603442911645e6df001faa1856f7d",
      "tree": "7f9aff02619805612d6f804a120310116fab34cc",
      "parents": [
        "4fbaadb8d5630fab0670000468e8b1d0429deb1c"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Jan 25 14:40:16 2015 -0800"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon Jan 26 21:56:26 2015 -0800"
      },
      "message": "adb: Win32: set socket buffer sizes properly\n\nOn Windows, adb_socket_setbufsize() was taking a file descriptor value\nfrom the compatibility layer in sysdeps_win32.c (namely, an index into\nthe _win32_fhs array) and passing it to the Winsock setsockopt() call,\nwhich wants a Winsock SOCKET handle. Basically, adb_socket_setbufsize()\nwas passing `fd` instead of `_fh_from_int(fd)-\u003efh_socket`, resulting in\nadb effectively setting a socket buffer size on a random socket in the\nprocess.\n\nThe fix is to introduce adb_setsockopt() which just calls setsockopt()\non non-Win32, and which uses the Winsock SOCKET handle on Win32. The\nchange also moves Win32 disable_tcp_nagle() to a header and adds an\nextra sanity check to adb_shutdown().\n\nChange-Id: I4354e818d27538f7ff5b0e70b28bdb6300e1b98b\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "054d1704f1ac2cf630e2e87cfeef3afce68bd813",
      "tree": "5d8152fd91f388e4ab8960ab82009a992d68f050",
      "parents": [
        "f698ef90706811cbb0d93a26abe85b6af4a2de87"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Nov 06 14:34:24 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 09 16:03:29 2014 -0800"
      },
      "message": "Fix adb/fastboot windows compilations.\n\nMany of the windows files where not including stdlib.h even though they\nare using malloc/free calls.\n\n(cherry-pick of 4115139c57ac27f49dfde88f42b8cde0f6b42154.)\n\nChange-Id: If6959df9909d9d9928e9f4a2a96018166361cf3c\n"
    },
    {
      "commit": "b11708563832338f6850e8cef081ec6842b5cc05",
      "tree": "46e9fac3a04f56b7611e35ab2dddca600fd4846e",
      "parents": [
        "e7c06ee578d290a9fd20346a7f178a7903628297"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Wed Oct 01 17:37:06 2014 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Wed Oct 01 17:37:06 2014 -0700"
      },
      "message": "Fix windows-specific error without messing up Makefile flags.\n\nBug: 14416410\n\nThe proper fix for the error/warning we encountered is to move winsock2.h\nin front of windows.h.\n\nChange-Id: I29504ba3a184a85c6636d06c2ad900828fdb5436\n"
    },
    {
      "commit": "b73d0e0e5d24be57ba3059c2bf0c1e3b32c68bd0",
      "tree": "684bbdf53ef81d7af767d648bfa148f750971b37",
      "parents": [
        "87127add4a3fd969acf017f2372b2a70d44cdc2e"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Wed May 07 20:21:11 2014 +0800"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Tue Sep 30 02:24:07 2014 -0700"
      },
      "message": "Remove obsolete reference to ddk; Fixes for -Werror\n\nBug: 14416410\n\n1. The new mingw-w64 toolchain x86_64-w64-mingw32-4.8 has ddk\n   in x86_64-w64-mingw32/include/ddk\n2. Add -Wno-error\u003dcpp to suppress a warning that turns into error\n   thanks to -Werror:\n\n      Please include winsock2.h before windows.h\n3. Cast GetLastError() return type DWORD to \"int\"\n4. Include direct.h for _mkdir\n5. Include stdint.h for uint8_t on Windows\n\nChange-Id: I4bec0587f6573692f08c760da6c98ae551b8b5eb\n"
    },
    {
      "commit": "2305e9cabbc04a658beead50e216f6cbe684b7f3",
      "tree": "ba90c2404177d716fe86a654f88f3596dc2bf638",
      "parents": [
        "2a47fbf1c2a3d1a6b033d85ed15be9dc7e899406"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 20 12:01:29 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 20 12:13:29 2014 -0700"
      },
      "message": "Fix win32 undefined reference to `_socket_network_client_timeout\u0027.\n\nChange-Id: I063213957b8452f4690da0f64872075f7c27b4cd\n"
    },
    {
      "commit": "63e39f2fc0f69e02c3c0d774698d676cd939bd32",
      "tree": "51600a844a869a6a563d8f8309cd38c81387a16d",
      "parents": [
        "57e36aaba6984d65d91bb563d66bbcb50893db20"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 30 09:10:31 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon May 05 10:30:06 2014 -0700"
      },
      "message": "adb: turn on -Werror\n\n- Deal with some -Wunused issues\n\nChange-Id: Idfd1a114e68ae637978b52fde5144d0dca0ec79f\n"
    },
    {
      "commit": "e0e954abe8a853ed1d4b9649b768120a68d35259",
      "tree": "e7b106e9fee0a86ce787bf65cac7e80a3bbd4106",
      "parents": [
        "480ff1d203a153b741820a65bc79f0b1f5fcf8d7"
      ],
      "author": {
        "name": "Ray Donnelly",
        "email": "mingw.android@gmail.com",
        "time": "Fri Jan 11 16:36:00 2013 +0000"
      },
      "committer": {
        "name": "Ray Donnelly",
        "email": "mingw.android@gmail.com",
        "time": "Fri Jan 11 16:36:00 2013 +0000"
      },
      "message": "Windows adb: initialize on to 1 in disable_tcp_nagle\n"
    },
    {
      "commit": "0fa5978b5efd9c04d42b0b0627b24dbbade9ebc8",
      "tree": "fa82ff64dcca66a8ca78331733e0c05654a2d4d7",
      "parents": [
        "2704238269fd39be189a3a8e00cb48325ac274c9"
      ],
      "author": {
        "name": "Scott Anderson",
        "email": "saa@android.com",
        "time": "Tue Jun 05 17:54:27 2012 -0700"
      },
      "committer": {
        "name": "Scott Anderson",
        "email": "saa@android.com",
        "time": "Tue Jun 05 17:54:27 2012 -0700"
      },
      "message": "adb: Use bionic\u0027s strtok_r() for Windows\n\nA recent change use strtok_r which broke the Windows build.\nClear this potential landmine by adding adb_strtok_r to sysdeps.h\nin the typical fashion.  For Windows, the actual implementation\nin sysdeps_win32.c was copied from bionic/libc/string/strtok.c.\n\nChange-Id: Ibb71555bc429f7058c07c3d39e0b62859c79635c\nSigned-off-by: Scott Anderson \u003csaa@android.com\u003e\n"
    },
    {
      "commit": "b87b828ee1aff911cef1974d3610c8ff3dc44477",
      "tree": "70c5a78770721a0781e762ad64da3f1b0e88c2f5",
      "parents": [
        "6e1eb04146f9194da5461daa436860aac3262bd9"
      ],
      "author": {
        "name": "Vladimir Chtchetkine",
        "email": "vchtchetkine@google.com",
        "time": "Wed Nov 30 10:20:27 2011 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Dec 05 13:14:23 2011 -0800"
      },
      "message": "Fixes ADB crash on Windows due to large number of connections. do not merge.\n\nThe reason for the crash is that ADB on Windows uses WaitForMultipleObjects to\nwait on connection events. When number of connections exceeds 64, ADB crashes,\nbecause WaitForMultipleObjects API doesn\u0027t support more than 64 handles. This\nCL contains a fixer routine that allows waiting on an arbitrary number of\nhandles.\n\n(cherry picked from commit ac52833e48f46dfd9f7c8f86236ee8b437850c0a)\n\nChange-Id: I8ad264765e5b38d01a31e42b445f97ea86e49948\n"
    },
    {
      "commit": "81ffe174016aae9fb4b81c121b7dd5d8b4259b0b",
      "tree": "fe291df5e6ae70c8ecbab54a893052a661a52dc9",
      "parents": [
        "e84eede202684072602da511fa04b17eff20b40c"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Sun Oct 11 23:04:18 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Sun Oct 11 23:04:18 2009 -0400"
      },
      "message": "adb: Add \"adb disconnect\" command for disconnecting TCP/IP devices.\n\nAlso check that device is not already connected in \"adb connect\"\n\nChange-Id: I5f84b56b63d8c6932f23791cac319fd6bc39d36c\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "1f1efb53fc5a1ec70946d1f5189b9b1acbaec7ca",
      "tree": "c3a4a9a73e7ca76ab0358c3ad875d1094fa88de6",
      "parents": [
        "b1c2c953963222ef6147e3bfb67b29b5bf1e87eb"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon May 18 17:36:28 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon May 18 17:36:28 2009 +0200"
      },
      "message": "Cleaning up whitespace in adb sources. Nothing more, nothing less.\n"
    },
    {
      "commit": "9ca14dcee17fd1642b89570c0ef913b8c734e774",
      "tree": "d8b9d15345c302aef4de078ee3576cf92ddbd9d5",
      "parents": [
        "334880afe3bd1d90acaf20b31560f7214980a3f6"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:32:55 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:32:55 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    }
  ],
  "next": "334880afe3bd1d90acaf20b31560f7214980a3f6"
}
