)]}'
{
  "commit": "8afdbf04bd665a76c81319bc9715a77d9bc32722",
  "tree": "c20c9a2c21ac5c7115b8fb1fae80720591ab499a",
  "parents": [
    "884614c24f8c04ebde9c72ec7ce8f50498e3cdae"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Tue Jun 16 14:06:07 2020 -0400"
  },
  "committer": {
    "name": "CQ bot account: commit-bot@chromium.org",
    "email": "commit-bot@chromium.org",
    "time": "Tue Jun 16 20:48:22 2020 +0000"
  },
  "message": "Abstract fd operations better in tool.\n\nWindows and POSIX implement very similar fd operations, but differ\nslightly:\n\n- ssize_t in POSIX is usually int on Windows.\n- POSIX needs EINTR retry loops.\n- Windows wants _open rather than open, etc.\n- POSIX fds and sockets are the same thing, while Windows sockets are\n  HANDLEs and leaves fd as a C runtime construct.\n\nRather than ad-hoc macros and redefinitions of ssize_t (which reportedly\nupset MINGW), add some actual abstractions. While I\u0027m here, add a scoped\nfile descriptor type.\n\nThat still leaves recv/send which are only used in one file, so defined\na socket_result_t for them.\n\nChange-Id: I17fca2a50c77191f573852bfd27553996e3e9c3f\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/41725\nCommit-Queue: David Benjamin \u003cdavidben@google.com\u003e\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7f340171d7da4dd64ce1a4997cfb0fad3b19196d",
      "old_mode": 33188,
      "old_path": "tool/CMakeLists.txt",
      "new_id": "765871381c14e82f0c15665932c01a6edd985537",
      "new_mode": 33188,
      "new_path": "tool/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "742fa7f4dd357720bc9ae96a7674859514ff6dd0",
      "old_mode": 33188,
      "old_path": "tool/digest.cc",
      "new_id": "4adaf8df61d63a897d0b5334e0d3fde26698c6f9",
      "new_mode": 33188,
      "new_path": "tool/digest.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2c27ccdb3cf6759e9b4ddce3f4db2ef9f3c59936",
      "new_mode": 33188,
      "new_path": "tool/fd.cc"
    },
    {
      "type": "modify",
      "old_id": "4cace9d3d67a5be72356d11399dffcbf450da970",
      "old_mode": 33188,
      "old_path": "tool/internal.h",
      "new_id": "eb9e4ba8f5a9220a3c95ce80428930cd4a03340f",
      "new_mode": 33188,
      "new_path": "tool/internal.h"
    },
    {
      "type": "modify",
      "old_id": "a8ddb0e01d836e15a304d1296a4a92847b1e34d0",
      "old_mode": 33188,
      "old_path": "tool/pkcs12.cc",
      "new_id": "3d8a1cd758306a54b0fb3d8b0e96e067849c5642",
      "new_mode": 33188,
      "new_path": "tool/pkcs12.cc"
    },
    {
      "type": "modify",
      "old_id": "7c5e962c758972233d5e4b235d3e3ead002f2a5e",
      "old_mode": 33188,
      "old_path": "tool/transport_common.cc",
      "new_id": "88e91695f0312ecd1ce51b206630536cd19b4072",
      "new_mode": 33188,
      "new_path": "tool/transport_common.cc"
    }
  ]
}
