)]}'
{
  "log": [
    {
      "commit": "3a62fc44e8022c4b838b222ed373d74cea17a2f8",
      "tree": "11a565c1b5fb01843ab62c99559afc6761d065cf",
      "parents": [
        "c87d1ed61166d99ff8d1b5f4411056fc8ee65ee6"
      ],
      "author": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Thu Jan 24 21:16:39 2019 -0800"
      },
      "committer": {
        "name": "Sasha Smundak",
        "email": "asmundak@google.com",
        "time": "Thu Jan 24 21:16:39 2019 -0800"
      },
      "message": "Convert Android.mk file to Android.bp\n\nSee build/soong/README.md for more information.\n\nBug: 122332380\nTest: treehugger\nChange-Id: I39a69c722922cfb19059d10ff37132442f0337ba\n"
    },
    {
      "commit": "5d08f639507a20f688cb448a848e7789f20ac802",
      "tree": "78dc3793818da4453b982f0f1dc1a2be436f4542",
      "parents": [
        "1fcf7f7d1f6e064ff2a129394d26b9d5a257206f"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 10:38:27 2018 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Dec 11 10:38:27 2018 -0800"
      },
      "message": "Fix cert-dcl16-c clang-tidy warnings.\n\nBug: 120614316\nTest: make with WITH_TIDY\u003d1 DEFAULT_GLOBAL_TIDY_CHECKS\u003d-*,cert-dcl16-c\nChange-Id: I069b2c861cf7c349445c15bf789908377fe7227f\n"
    },
    {
      "commit": "fca4a9c27950a4a4281de0f413280cff9f4da653",
      "tree": "6383a387c5b9cb0fbfa49be34abb27d30d2d82fa",
      "parents": [
        "db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Thu Jul 26 03:13:45 2018 +0000"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Thu Jul 26 05:23:45 2018 +0000"
      },
      "message": "Revert \"libsparse: Add sparse typed callback\"\n\nThis reverts commit db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6.\n\nReason for revert: Broke the build:\n\nIn file included from system/core/libsparse/sparse.cpp:26:\nsystem/core/libsparse/output_file.h:34:72: error: unknown type name \u0027off64_t\u0027; did you mean \u0027off_t\u0027?\nint (*skip_write)(void*, off64_t), void* priv,\n^~~~~~~\noff_t\n/Applications/Xcode6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/_types/_off_t.h:30:25: note: \u0027off_t\u0027 declared here\ntypedef __darwin_off_t off_t;\n^\n1 error generated.\n\nBug: 78793464\nChange-Id: I0f8bc4e9aa2f74612bfd8721d00d961e3f7e695f\n"
    },
    {
      "commit": "db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6",
      "tree": "e10ad5680b134599df00f4322a82242690940eb7",
      "parents": [
        "1c92fa44800c9d2efd3f2b8f18a3af7e131371be"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Thu Jun 14 16:58:58 2018 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Wed Jul 25 11:04:03 2018 -0700"
      },
      "message": "libsparse: Add sparse typed callback\n\nCurrently, sparse_file_callback uses libsparse\u0027s\nown logic for reading a file into a buffer. However,\na caller may want to use their own logic for doing\nthis in order to customize the buffer size and parallelize\nthe reads/writes. Also, a caller may want to implement\nfill blocks with their own logic as well. To do this\nadd sparse_file_typed_callback which calls a different\ncallback function depending on the type of the sparse\nchunk being written.\n\nTest: Use typed callback for fd writes\nBug: 78793464\nChange-Id: I75955a464fc05991f806339830fdfa05fda354b9\n"
    },
    {
      "commit": "17ba95ed9e65099db60e1e14ce6be51e87675707",
      "tree": "e650ef5d7da0621e36ccdc7ca776869831cd2947",
      "parents": [
        "7e7cefa2c7972be72b915512b12bcab1e9f36a36"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 23 16:31:11 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 23 23:32:01 2018 +0000"
      },
      "message": "[libsparse] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I43dae734817cae7a260ffc7afcd85fbd4451eddf\n"
    },
    {
      "commit": "06651fbe0275d0998f2f349d31c9f995a5dc52c9",
      "tree": "40ab96b0c6d91592fd89a819dabfe6787a08e966",
      "parents": [
        "43c4bbd9651b569a33e7af4e7a57d5da7533637f",
        "91e66ab14a74f22b3504d91fae64f5ec14160dcf"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 13 21:48:29 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 13 21:48:29 2018 +0000"
      },
      "message": "Merge \"libsparse: add OWNERS.\""
    },
    {
      "commit": "7b444f08c17ed1b82ea1a1560e109c0a173e700f",
      "tree": "b73fa22396eefbd3e71d151c581ae957383aaf7c",
      "parents": [
        "5a755077958dd4f7fb668a125b57dea8d85cd9a8"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jun 12 16:42:09 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Wed Jun 13 20:32:24 2018 +0000"
      },
      "message": "libsparse: Add .clang-format and reformat to google3 style\n\nBug: 78793464\nTest: compiles\nChange-Id: I8e44ba77195a12fc2bac7d4276bbc4aa95149b31\n"
    },
    {
      "commit": "91e66ab14a74f22b3504d91fae64f5ec14160dcf",
      "tree": "68bd8c35484d668ca028f85d575913e746bb888d",
      "parents": [
        "7222199281b824fbe08f216860d2cd5153d33d11"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 13 12:43:08 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 13 12:43:08 2018 -0700"
      },
      "message": "libsparse: add OWNERS.\n\nBug: N/A\nTest: N/A\nChange-Id: Ie26da2ff47de4cef20050b996a04d53c2b5c358f\n"
    },
    {
      "commit": "5a755077958dd4f7fb668a125b57dea8d85cd9a8",
      "tree": "cb399ec8b78c7ee4fff1f472908dd207dd26fd75",
      "parents": [
        "50e6029a4e4b9c9bd6065548ced523ec5b01e705"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jun 12 16:18:53 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Wed Jun 13 11:17:22 2018 -0700"
      },
      "message": "libsparse: Change source files to cpp\n\nBug: 78793464\nTest: compiles\nChange-Id: Ib8b933fe3ccb8dfa49a77f7955891678bf0df086\n"
    },
    {
      "commit": "50e6029a4e4b9c9bd6065548ced523ec5b01e705",
      "tree": "16b6c5529b11af841a6ebbdbe4b8e9d362946526",
      "parents": [
        "f875aaa339e864410b7243d312d06020f86845f8"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jun 05 11:44:52 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Thu Jun 07 14:33:18 2018 -0700"
      },
      "message": "libsparse: Add method to create sparse file from buffer\n\nRefactor elements of sparse file parsing that depend on\nan fd into SparseFileSource class, then create implementations\nusing both fd and buffer. Add sparse_file_read_buf which\nreads the given buffer into a sparse file cookie without\ncopying.\n\nTest: flash system with sparse images\nBug: 78793464\nChange-Id: Ice6c8e1ff075d6867e070f80fcf5aa4f530a1b95\n"
    },
    {
      "commit": "a0e75045e6817a51e4e6b05880d871525a4d52fe",
      "tree": "5d65ece1bd5bcba61ff8617baa096c1e3a70b5ad",
      "parents": [
        "98c1b1ccf67113957f1e4d8678cf8b5a1fe747e1"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu May 24 14:11:00 2018 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu May 24 14:11:11 2018 +0900"
      },
      "message": "Build adbd for recovery\n\nadbd (and its dependencies) are marked as recovery_available:true so\nthat recovery version of the binary is built separately from the one for\nsystem partition. This allows us to stop copying the system version to\nthe recovery partition and also opens up the way to enable shared\nlibraries in the recovery partition. Then we can also build adbd as a\ndynamic executable.\n\nBug: 79146551\nTest: m -j adbd.recovery\nChange-Id: Ib95614c7435f9d0afc02a0c7d5ae1a94e439e32a\n"
    },
    {
      "commit": "e18c03165b3ea86f563e104f44696d5c53f5b6a5",
      "tree": "967bd9f4d4d7fa2c57a8f194e05f47523f32c589",
      "parents": [
        "9249f4bc4148caef423a9cd0139d9e917fb36341"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Mon Apr 23 15:15:40 2018 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 25 10:29:22 2018 -0700"
      },
      "message": "libsparse: Use \u0027size_t\u0027 for the \u0027len\u0027 parameter in callbacks.\n\nThis CL updates the callback function signature in\nsparse_file_callback() and sparse_file_foreach_chunk().\n\nBefore:\nint sparse_file_callback(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(void *priv, const void *data, int len), void *priv);\n\nint sparse_file_foreach_chunk(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(\n        void *priv, const void *data, int len, unsigned int block,\n        unsigned int nr_blocks),\n    void *priv);\n\nAfter:\nint sparse_file_callback(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(void *priv, const void *data, size_t len), void *priv);\n\nint sparse_file_foreach_chunk(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(\n        void *priv, const void *data, size_t len, unsigned int block,\n        unsigned int nr_blocks),\n    void *priv);\n\nThe length (i.e. \u0027len\u0027) comes from the size of a chunk, which could be\nlegitimately larger than INT_MAX. Prior to this CL, callers (e.g.\nwrite_sparse_data_chunk()) were already passing unsigned int to the\ncallbacks. When a chunk size exceeds INT_MAX, the callback would see a\nnegative value, which could lead to undesired behavior. For example,\nout_counter_write(), as one of the internal callbacks in libsparse,\ngives a wrong sum of chunk sizes, which in turn fails the fastboot\nflashing when given a huge sparse image.\n\nIt also defines SPARSE_CALLBACK_USES_SIZE_T that allows clients to keep\ntheir codes compatibile with both versions.\n\nBug: 78432315\nTest: `m dist` (with matching changes to all the clients)\nTest: Build fastboot and successfully flash a previously failing (huge)\n      sparse image.\nChange-Id: Iac4bcf7b57039d08af3c57f4be00d75f6b693d93\n"
    },
    {
      "commit": "796987482f3a56c4bc7ab7500a5dbe033ff11ae1",
      "tree": "766b8ed89e3e9ca1f063049fc2eb63fbb1a81eb2",
      "parents": [
        "4ff2607ef719bade2b45538878136a7d71621882",
        "a0f73f9bffc2ed6f78b9900db09741861676dd48"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 17 19:26:53 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 17 19:26:53 2017 +0000"
      },
      "message": "Merge \"\u003cstdbool.h\u003e not necessary in C++.\""
    },
    {
      "commit": "a0f73f9bffc2ed6f78b9900db09741861676dd48",
      "tree": "d705dacfc9cff7e1936fd6557d4113444818edc4",
      "parents": [
        "815f74a759c56f6bbd75818a6ae6d7f7d4672e3a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 07 13:36:14 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 16:21:33 2017 +0000"
      },
      "message": "\u003cstdbool.h\u003e not necessary in C++.\n\nBug: N/A\nTest: builds\nChange-Id: I1f32b202e353414e74ace87a7d5b495b5deb5f99\nMerged-In: I1f32b202e353414e74ace87a7d5b495b5deb5f99\n"
    },
    {
      "commit": "c39caafbbbf3227517f2ae1081fc01716f19b263",
      "tree": "a429543e4bab4a730805f52059546c290e568b8e",
      "parents": [
        "85b80dc18db98b7950062f57457f8fcd49ba927e"
      ],
      "author": {
        "name": "Xiaolei Yu",
        "email": "dreifachstein@gmail.com",
        "time": "Wed Oct 11 14:46:29 2017 +0800"
      },
      "committer": {
        "name": "Xiaolei Yu",
        "email": "dreifachstein@gmail.com",
        "time": "Wed Oct 11 15:37:52 2017 +0800"
      },
      "message": "libsparse: fix building on linux host.\n\nmemset is declared in \u003cstring.h\u003e\n\nTest: builds and works on host\n\nChange-Id: I224a01c78ee1d0c2f8d5e86eef10c84c8960cbc0\n"
    },
    {
      "commit": "5cfa00605995b655fa652423cc5b60d29cae27a6",
      "tree": "090329fd3ee3a41f3808116f05cda0598ad2bdf9",
      "parents": [
        "61578ab50be06745dfac57aa106aeb996e5326df"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 16:24:45 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 27 16:24:45 2017 -0700"
      },
      "message": "Rename libz-host -\u003e libz\n\nTest: m host\nChange-Id: Ib276431d13b3e1bd243f84a80f69aafc12e71aac\n"
    },
    {
      "commit": "221af0990bc76ea517e1c0617f5ad07f0e17c267",
      "tree": "7bbb704846583334f783c926f65fea4840cd3be4",
      "parents": [
        "d1cd087ba5e214636079a1a547fdf1c29822f838",
        "cbd8d9d4f58a88ff57a4720ef17c7e7be147ea9b"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Wed Apr 19 19:26:27 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Apr 19 19:26:27 2017 +0000"
      },
      "message": "Merge \"libsparse: Fix odd-sized input files total_blks\" am: 652ce94f40 am: ab74c778df\nam: cbd8d9d4f5\n\nChange-Id: I3c7afcd7a3a3bab4460123751d0a5696cb1892c6\n"
    },
    {
      "commit": "3738968ed8587bb742ce8aed3ec61b3c9663b9d8",
      "tree": "e0a5b0c900158a34e7e6092e5ff7b0d60eb728cd",
      "parents": [
        "8b318d0c26c89acd7c716fb571bfd08d4393d12f"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Tue Apr 18 11:39:24 2017 -0500"
      },
      "committer": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Wed Apr 19 10:32:45 2017 -0500"
      },
      "message": "libsparse: Fix odd-sized input files total_blks\n\nIf the input file isn\u0027t a multiple of block_size, count the trailing\nbit as a block in the output, otherwise bootloader will try to write\npast the last declared block in the sparse file.\n\nTest: Run sparse_test\nBug: 37339998\nChange-Id: Iec143107d15795c6a6f4d3ea7b7515f6f16adcae\n"
    },
    {
      "commit": "4da21cdeb2a4bb87d99a1f0f6fdb4797c9ba37a2",
      "tree": "a8b288f0c88a6cd0ca0e6c39a101911cb0349036",
      "parents": [
        "803268fc94c5da36c3ac969876a298325818f0c9",
        "5a072968738a3100c416506aad6d095d662263f6"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Tue Apr 18 22:20:27 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Apr 18 22:20:27 2017 +0000"
      },
      "message": "Merge \"libsparse: Fix verbose_error string usage\" am: 0bdf6539d6 am: 006ea1aebc\nam: 5a07296873\n\nChange-Id: I0e96c2b6212b115e4a3098cf462d5e5686a6de4a\n"
    },
    {
      "commit": "a7eeb22efb88d8b8073d71138bcb31cb3f2c4f4d",
      "tree": "5cea928927e28978ca448e841fa1e5192037a8ec",
      "parents": [
        "f358bed6248926bf98f3493ec7f5ffa6b5671e1b"
      ],
      "author": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Mon Apr 17 21:53:16 2017 -0500"
      },
      "committer": {
        "name": "Chris Fries",
        "email": "cfries@google.com",
        "time": "Tue Apr 18 10:53:49 2017 -0500"
      },
      "message": "libsparse: Fix verbose_error string usage\n\nSwitch vnsprintf to StringPrintf to avoid off-by-one, and switch\nsparse_read.c to cpp.\n\nTest: fastboot flash normal image with smaller sparse limit\n\nChange-Id: Ia399b167625deb271bfd0ee3273071306d71c4d4\n"
    },
    {
      "commit": "4786e4e24fb6a79feb5794453122536d837f0fa5",
      "tree": "9828fb9912b48be1864a7ba1e3ff14d2d9c6f629",
      "parents": [
        "0638e0e65bcab4553551eb3c7687adddda0af52c",
        "092a732ef24d89e048eba751539ff2eec0eb8a0e"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Thu Jan 12 22:45:52 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 12 22:45:52 2017 +0000"
      },
      "message": "Remove \"_host\" and \"_static\" suffix from libsparse definition. am: b0c395955d am: 7b8d66e7cc am: 11b65cf3be\nam: 092a732ef2\n\nChange-Id: I3d9639af9f9f66742660edbbf62f73909c0d6915\n"
    },
    {
      "commit": "b0c395955df706c4c453c0dddc13a4f5f7ca44bf",
      "tree": "ea2e84033641e0b12a59d0d47a6dcef35e37ec44",
      "parents": [
        "705353ae277e408e70169c0811c5d104a3b733f6"
      ],
      "author": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Jan 11 14:37:50 2017 -0800"
      },
      "committer": {
        "name": "Alex Deymo",
        "email": "deymo@google.com",
        "time": "Wed Jan 11 19:15:11 2017 -0800"
      },
      "message": "Remove \"_host\" and \"_static\" suffix from libsparse definition.\n\nThis now combines all the \"libsparse\" libraries into the same soong\ntarget. A minor side-effect of this change is that the libsparse\nstatic library depends on the libz shared library instead of the libz\nstatic library. This minor change has no effect since targets using\nthe static libsparse library need to explicitly include either the\nstatic libz or the shared one.\n\nBug: 34220783\nChange-Id: I8f41586cf4c3336791cfa57ab4f5ae59a76d7ffa\n"
    },
    {
      "commit": "ad0cd643328fb79faae7d7a6ea974239cf53ebaa",
      "tree": "2fe73bb68353f2064d8516302a3ece14c5e26581",
      "parents": [
        "79cb08e43d788f4eb172facdc62b3f85259bd6be",
        "669716d27c713708cc1b43849fa80a85e7e45ffc"
      ],
      "author": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Sat Dec 03 04:20:07 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Dec 03 04:20:07 2016 +0000"
      },
      "message": "Manually merge commit \u002761e74d7\u0027 into stage-aosp-master am: 9f9a239ca3 am: aec7316546\nam: 669716d27c\n\nChange-Id: I75f9c115fe178008174f1fea8cb8b890b83c2543\n"
    },
    {
      "commit": "a26a6bd6f36d29cdc959f746b495f79f74c7fad7",
      "tree": "c7fc492b1924ca83bb3839cd5cc92404f0ca2282",
      "parents": [
        "59826ddee5462d1be93176e2dee660c46e413e52"
      ],
      "author": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 11:49:47 2016 -0800"
      },
      "committer": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 19:16:28 2016 -0800"
      },
      "message": "libsparse: add a function to retrieve the data blocks\n\nTest: m libsparse\n\nChange-Id: I04bd3912bb4364e591b064ec2aab782cf02f6bd7\n"
    },
    {
      "commit": "84f83a57de973fc07ca827b282f1598575ce6f8f",
      "tree": "f4c02f59b078ea69a160351a80d56b6281c215e6",
      "parents": [
        "34919fbfbabe87f805c0b6cec476950fb357d378",
        "c0422d1b2a3cdfd447c97c30154cfcad51967d4d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Oct 07 17:39:17 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Oct 07 17:39:17 2016 +0000"
      },
      "message": "Merge \"libsparse: output_file.c, fix large data chunk issue\" am: 62c9101646 am: faaeda8e12 am: 4179f2ec65\nam: c0422d1b2a\n\nChange-Id: I812e1f268fa8c3a1ba8b5555319424cadf07a707\n"
    },
    {
      "commit": "fca594c2dee4972301d6301fbdc0b7b4ac0045fe",
      "tree": "c8ba92235c2f88b84af9958c2a7ee4f3701418f3",
      "parents": [
        "ec991585803bbcbc9abb1ba9510836e770d6f459"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Fri Sep 30 14:54:25 2016 +0200"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Oct 06 09:53:42 2016 -0700"
      },
      "message": "libsparse: output_file.c, fix large data chunk issue\n\nCHUNK_HEADER structure type allows DATA chunk to be up to MAX_UINT\nlarge.\n\nThe write() callback LEN parameter should be unsigned int.\n\nAlso:\n- write() callback should continue to write data if less than expected\n  data have been written.\n- gzerror() returns LEN on success, 0 otherwise\n\nTest: manual\nChange-Id: Id46d664b84c1a506f419524fe28055f784c2ae7a\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "c2b3b5fade7e0a8215c4bb85c090b8ee0df45551",
      "tree": "44562bccfd451b565461602a424d9840f853589b",
      "parents": [
        "2ccb00f98ddde6c8d769af02bfb13c1b96624f47",
        "c9dc124e2fad4cb03cf2f782c7ca5c4faec99150"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 05 18:44:02 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 05 18:44:02 2016 +0000"
      },
      "message": "Merge \"Test for _WIN32 in instead of USE_MINGW.\" am: ec99158580 am: 2e7e065db9 am: 04819403d6\nam: c9dc124e2f\n\nChange-Id: I2cfb73fc12da1bb6396bfdd8f638b9ce977f84bc\n"
    },
    {
      "commit": "34a4f0b8c75e2c5a347e04454423cf55c5406075",
      "tree": "9c4e7f6807ec36d74d010c2114ce916e9fe40323",
      "parents": [
        "093951a2307f6572f911883c1ae6d01996e872c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 05 09:37:18 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 05 09:37:44 2016 -0700"
      },
      "message": "Test for _WIN32 in instead of USE_MINGW.\n\nBug: http://b/23392815\nTest: builds\nChange-Id: I7fce8de1f0e2314170cce456cd49346dcee9d134\n"
    },
    {
      "commit": "c38720a9620c0c723ac2edfb50bed1111ecb0b99",
      "tree": "05b6e278ac76dd970482943e5f56ff284a0f9d56",
      "parents": [
        "813de08d762fce6b206b2cd1be4e3c04bd0620f8"
      ],
      "author": {
        "name": "Patrick Tjin",
        "email": "pattjin@google.com",
        "time": "Mon Oct 03 13:03:23 2016 -0700"
      },
      "committer": {
        "name": "Patrick Tjin",
        "email": "pattjin@google.com",
        "time": "Mon Oct 03 15:34:37 2016 -0700"
      },
      "message": "libsparse: Add .csv and sha1 options for simg_dump.py\n\nAdds CSV output option to output blocks to a CSV file.\n\nAdds option to output SHA1 sum for each block.\n\nAddressed misc lint errors\n\nTest: compared output with previous version\nChange-Id: I555c8816c6ef2b0b69dac2b9789fbfd8b2786a49\n"
    },
    {
      "commit": "45f05240c2d9d1f3903e2766b4883e256288f6c2",
      "tree": "ee0405336f534c9b00448860c3df845452e43223",
      "parents": [
        "dc9fbc34402a61ca9b23714b78cac4f92ee113e2"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Jul 12 22:10:56 2016 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Jul 13 17:41:45 2016 -0700"
      },
      "message": "Convert more Android.mk files to Android.bp\n\nThese modules have their dependencies satisfied, and aren\u0027t doing\nanything strange.\n\nChange-Id: I72039a15256cbd5e5eee0d79a15d66d74a6c087d\n"
    },
    {
      "commit": "eabd5108b310c7dcc773285a15de5cd62b16575e",
      "tree": "24f17d7cbfb0911bc311321efe9ec2b99ee62120",
      "parents": [
        "9b0eb7cdf4ac4650fc3f476c2f5a91c50a18e524"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 18 15:41:16 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 18 15:41:16 2016 -0700"
      },
      "message": "Fix misc-macro-parentheses warnings in libion, libsparse, libmem*\n\nBug: 28705665\nChange-Id: I3dd5c086787f5e48ab100a71a42109ea0e417bf9\n"
    },
    {
      "commit": "1eb743ba8b63daf773ed4628504a3bb95ee2c156",
      "tree": "a1d24c7c5a9bbfe53d716cfc02129b5f2c3e353c",
      "parents": [
        "a9352202dd52a404199fbdca160d9d2d0992cf63"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 01 11:15:30 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 01 11:19:26 2016 -0800"
      },
      "message": "Fix static analyzer issues caught by clang\n\nsystem/core/libsparse/sparse_read.c:260:51: warning: Dereference of null pointer (loaded from variable \u0027crc_ptr\u0027)\n                        ret \u003d process_crc32_chunk(fd, chunk_data_size, *crc_ptr);\nsystem/core/libsparse/sparse_read.c:404:9: warning: Potential leak of memory pointed to by \u0027buf\u0027\n        return 0;\n\nFixes leak in sparse_file_read_normal, and null pointer dereference\ncrash if an image with an obsolete CRC chunk was read with CRC checking\ndisabled.\n\nBug: 26904425\n\nChange-Id: Ibc72cd37602929ae2c248bea1cdd1d22ea03baaf\n"
    },
    {
      "commit": "b5619d96303106304e95b73010b77eef47cf8d00",
      "tree": "e891e060e2e22a35370ccaf17c7d4e7b4681910d",
      "parents": [
        "7c20ab3e73421e4a36c8b3a0fc0d1c49653ab51b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 13:52:32 2015 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 17 17:28:44 2015 -0800"
      },
      "message": "Turn off CRC checking for append2simg\n\nmake_ext4fs doesn\u0027t write out a CRC chunk, and append2simg doesn\u0027t\neither, but append2simg was still performing a CRC on every input\nblock.  Cuts append2simg time in half.\n\nChange-Id: I678f807abbb741042461ed68a0f61b406d3665fb\n"
    },
    {
      "commit": "f21f0f16e7056eb5c9029e4aa82b17958a744bb7",
      "tree": "dae976f1296518a1a3b6b1022692cb7c03209c0e",
      "parents": [
        "56543606b55e1e1455ef5c0bf9aa9f4febab967f"
      ],
      "author": {
        "name": "caozhiyuan",
        "email": "cao.zhiyuan@zte.com.cn",
        "time": "Tue Oct 20 14:28:52 2015 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 20 14:15:31 2015 -0700"
      },
      "message": "Fix parameter to lseek\n\nChange-Id: I9c497a3ebc24ca1db92d0b9d3d1e9ac49dc40f75\n"
    },
    {
      "commit": "af090a6ea897f90c02ffde8a1b49f76c426d9d31",
      "tree": "e27da3b6c8ad237c23254acb74b6d692611e65e4",
      "parents": [
        "9b3a2784b94d88492906384ab3f3c9863f6b5eea"
      ],
      "author": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Tue Oct 13 16:18:45 2015 -0400"
      },
      "committer": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Tue Oct 13 16:22:33 2015 -0400"
      },
      "message": "fix misuse of formatting specifiers\n\nThe Clang/GCC formatting warning triggers for usage of %lld with off_t\non 64-bit because it\u0027s defined as a long int, not a long long int. It\nisn\u0027t important, but it\u0027s technically undefined.\n\nThis fix is in anticipation of adding __attribute__((format(...))) to\nmany functions where it is currently missing.\n\nChange-Id: I2bf33e6563a2892d2f54d7c582cbdeadf867e84f\n"
    },
    {
      "commit": "87a419c8b1343c9025fe2593206a6e95b0aa9700",
      "tree": "ebe871c66424c8f9d7d205f686b6cd681cb856ec",
      "parents": [
        "03bbd64aa99bb03bf80a9340750afa96bdb34280"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 13 14:43:34 2015 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 02 17:10:35 2015 -0700"
      },
      "message": "Remove USE_MINGW/CYGWIN; Whitelist windows modules\n\nCYGWIN is not supported, USE_MINGW and HOST_OS\u003d\u003dwindows are being\nreplaced with LOCAL_..._windows variables.\n\nBug: 23566667\nChange-Id: I3e4a1e4097dc994cf5abdce6939e83a91758fd75\n"
    },
    {
      "commit": "c227a1d855cb6ab86d4927c0231cd8d3afbc957d",
      "tree": "354f3ad28df9ef67e77de727d8dbbb13c2fbd5c2",
      "parents": [
        "dcf890914c7571d3068046b9df1f672e9f45b4d2"
      ],
      "author": {
        "name": "lei wang wang",
        "email": "leiwang211@gmail.com",
        "time": "Fri Aug 21 11:13:46 2015 +0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Aug 21 14:23:31 2015 +0000"
      },
      "message": "libsparse: use strcmp and validate last_used pointer\n\nThis patch is used to fix two Bugs in backed_block.c\n\nFirst, fix wrong comparing string way: we should use strcmp rather than\njust compare their address. Second, fix using illegal memory risk in\nbbl-\u003elast_used pointer. When entering queue_bb function,\nbbl-\u003elast_used \u003d new_bb, but in the following code if\nqueue_bb(xx, bb, new_bb) return ok, the space of new_bb is released. So\nnext time, if you use bbl-\u003elast_used pointer, may cause segment fault !\n\nChange-Id: I6abb505f9b903b697448639fc64fb7518df5cca1\n"
    },
    {
      "commit": "a29c0127fa1285a495145837641daa0b7d75829b",
      "tree": "5bf9b0e568ca895d56d8e01074905a514a44fd2a",
      "parents": [
        "a3ee46f1056fd52b05b627319cf82da75c6c7e59"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sat Jul 11 12:48:42 2015 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sat Jul 11 12:48:42 2015 -0700"
      },
      "message": "libsparse: Wrap sparse_crc32.h to be C++ compatible.\n\nChange-Id: Ic6b1721859937984619a262c459f1f734d81c149\n"
    },
    {
      "commit": "4cc3978276cd70936a35ad5f10b1d67e20a3888e",
      "tree": "3ca7d00d9e0b3a91b5928b7de976b01b531a34f6",
      "parents": [
        "4f021538a662c89e2bf81b3467d2ff03e34905e2"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "emiao@nvidia.com",
        "time": "Sun Apr 12 16:31:46 2015 -0700"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "emiao@nvidia.com",
        "time": "Thu Apr 30 16:36:17 2015 +0000"
      },
      "message": "libsparse: fix crc chunk parsing in simg_dump.py\n\nChange-Id: Ia5b7cedd88809b0e421a056704d25afa190470b8\n"
    },
    {
      "commit": "cfd3a03d3d147fca7a33d6f583b7047c5351fc32",
      "tree": "ab6ba56dac1b2de967a248cfb90324d5d2e3ca8a",
      "parents": [
        "27cda9a535c80470e913156e412cbf7e60c3217c"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Fri Apr 03 14:31:19 2015 +0200"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Wed Apr 08 10:10:17 2015 +0200"
      },
      "message": "libsparse: move_chunks_up_to_len() does not account skip chunks\n\nI caught the fastboot host command sending more data than the fastboot\ndevice can accept.  Fastboot host command was sending 36 surplus bytes\nbecause of 3 skip chunks that were not taken into account in\nmove_chunks_up_to_len() algorithm.\n\nChange-Id: I39a4a033c9b15893bd70e553f17116735ee4a48e\n"
    },
    {
      "commit": "80cc1f6864288f166b786a61ad57f12081114225",
      "tree": "b1c21a62d3a0aa23c69d77318ffe24ffbad2ec5a",
      "parents": [
        "b6f38def22add4b5d6878185d238f91659239161"
      ],
      "author": {
        "name": "Mohamad Ayyash",
        "email": "mkayyash@google.com",
        "time": "Tue Mar 31 12:09:29 2015 -0700"
      },
      "committer": {
        "name": "Mohamad Ayyash",
        "email": "mkayyash@google.com",
        "time": "Tue Mar 31 12:09:37 2015 -0700"
      },
      "message": "Add verbose param to sparse_file_import_auto\n\nChange-Id: I0c5607f7aa5e964abc2031bbe71ff5c6e6ef56cc\nSigned-off-by: Mohamad Ayyash \u003cmkayyash@google.com\u003e\n"
    },
    {
      "commit": "9f0d6bdd6691cbe78a3c03e531cb69ec2cc63602",
      "tree": "c58308d6e62627730a875067b7e343c28a409d99",
      "parents": [
        "be9712156bdcf8cff774a78a3afdb0c562998c73"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Feb 22 10:47:16 2015 +0100"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Mar 01 11:54:02 2015 +0100"
      },
      "message": "fastboot/sparse: propagate error code\n\nsparse_file_write_block calls functions that might failed.  This patch\nmakes sparse_file_write_block catch the error code and propagate it.\n\nWithout this patch, fastboot crashes on a segmentation fault if\nusb_write() fail during a sparse file image flashing.\n\nChange-Id: If9c0e8dfac8fa380628a2504e13abe8cf7d62726\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "a840300bab626bee5d44fbd56563eb0bbef7abcc",
      "tree": "b47bb427eeeed6b110608103352792a6f5a70225",
      "parents": [
        "ffe4d9cdc7e354cfa487223dd2bd5adb38869163"
      ],
      "author": {
        "name": "Trevor Drake",
        "email": "trevordrake.gerrit@gmail.com",
        "time": "Fri Dec 12 04:19:27 2014 +0000"
      },
      "committer": {
        "name": "Trevor Drake",
        "email": "trevordrake.gerrit@gmail.com",
        "time": "Fri Dec 12 04:19:27 2014 +0000"
      },
      "message": "Cleanup libsparse Android.mk\n\nRemoved unnecessary external/zlib reference from LOCAL_C_INCLUDES\n\nChange-Id: Ib61da00dc1e0eac89a68f244881b12e2a4e92e64\n"
    },
    {
      "commit": "51067914d11daceb3aae7461e9f14d915f040f4d",
      "tree": "ca6b6e949a03e6537af2190d064130cdf5c42fb4",
      "parents": [
        "87f1dd5da173dcd297fa8455e0a7845572931046",
        "d4d096370154492433f02df56a7508eb99f564e2"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 08 21:43:07 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 08 21:43:07 2014 +0000"
      },
      "message": "am d4d09637: am db32e788: am a2b03c4a: Merge \"libsparse: turn on -Werror\"\n\n* commit \u0027d4d096370154492433f02df56a7508eb99f564e2\u0027:\n  libsparse: turn on -Werror\n"
    },
    {
      "commit": "8116c8c37aadd83033ffea9e4f5fc86240428e43",
      "tree": "f7542f2184f2f0f889ecd0a380d77be4e9174fd1",
      "parents": [
        "86e3f22b6ae048ba8c9284b4900258c3ccd17cdf"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 01 09:15:02 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed May 07 16:56:22 2014 -0700"
      },
      "message": "libsparse: turn on -Werror\n\n- Deal with some -Wunused issues\n\nChange-Id: I9667d74c0dfbe55c625e65b9d44d7c6f861c455d\n"
    },
    {
      "commit": "0e3f47e4827a067b9b9795a3ae7297b51c9f0776",
      "tree": "83a1c9a76d708c900155729d92687ac78b59984f",
      "parents": [
        "9fdc8156ca8fb3449859bebf080a477fa3bcff5c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 25 14:28:54 2014 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 25 15:19:18 2014 -0700"
      },
      "message": "append2simg: write to temporary file\n\nappend2simg causes libsparse to write mmapped data from a file\nback to that same file.  On btrfs, this sometimes causes a page\nof zeroes to be written instead of the file data.  Work around\nthe issue by writing the output to a temporary file and then\nrenaming it over the original file.\n\nChange-Id: Ia194b6ba0ddb8548747b63292b523756f544706a\n"
    },
    {
      "commit": "b0cb721fb3f8c8019705da99f7ac727aab474209",
      "tree": "e7b83ca7a3f903468f5633568ce7ed1f95e2f763",
      "parents": [
        "e29590b08bce1667c6bddebeb80991b7d16344c4",
        "37d39eba0b3da124be747dd6a014332817135264"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 21:33:47 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 18 21:33:47 2014 +0000"
      },
      "message": "am 37d39eba: am 0cb82da2: am 958235bd: Merge \"libsparse: allow including from C++\"\n\n* commit \u002737d39eba0b3da124be747dd6a014332817135264\u0027:\n  libsparse: allow including from C++\n"
    },
    {
      "commit": "099824cce31853a0680723e70151d866416a5c78",
      "tree": "830552718fca3c066857baf653df1d5b328a2962",
      "parents": [
        "9101878dd06a74cedeadca3fec3b3db68cba8bf0"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 13:54:12 2014 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Apr 18 14:22:22 2014 -0700"
      },
      "message": "libsparse: allow including from C++\n\nChange-Id: I3788fd07e2b52430a410f85fb79dc886c6a07fea\n"
    },
    {
      "commit": "470185211b09472ef11f826c5bf0d154c541040a",
      "tree": "0075a5103ef405f3690be8e5e30a32614bf43a62",
      "parents": [
        "128a26bf7bbc3479b3413d6119efc5bb0f540b3d",
        "d9f1702a10541b59cfc9582762360d3347712e09"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 28 17:10:02 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 28 17:10:02 2014 +0000"
      },
      "message": "am d9f1702a: am 2b6791d0: am 0577a067: Merge \"libsparse: deal with build warning messages\"\n\n* commit \u0027d9f1702a10541b59cfc9582762360d3347712e09\u0027:\n  libsparse: deal with build warning messages\n"
    },
    {
      "commit": "031a748b2a9bf6dcfd3983d8f0f616718fcddd88",
      "tree": "dc2a7fd3ec03336f02a30cf5e4ace2f5d5491094",
      "parents": [
        "b7a4868e1cad6a878c94077bc48b414c965cb516"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Feb 27 16:56:15 2014 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 28 08:08:01 2014 -0800"
      },
      "message": "libsparse: deal with build warning messages\n\n- mostly unused parameters, added defs.h to hold __unused macro\n- read_all prototype not included, added output_file.h to acquire\n\nChange-Id: Ib7ee00614acab53a6bd6a64f7e26a8c13dbe6297\n"
    },
    {
      "commit": "b70375abc2c4da6f868da4eef3d3f059acdf9774",
      "tree": "52e04bc7cf0e003783006d488c7c6d276d500f45",
      "parents": [
        "24239a99ffde4a264be3121bff8b1ee70b78f63c",
        "ec9e5891ac97c50cfb8d3d1c9c2d478637eff62b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 14:42:35 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 14:42:35 2014 -0800"
      },
      "message": "resolved conflicts for merge of ec9e5891 to master\n\nChange-Id: I704e3159d529e436e060cb66c1739ef8e7b612d4\n"
    },
    {
      "commit": "ccecf1425412beb2bc3bb38d470293fdc244d6f1",
      "tree": "9fd922197bc88bed453efa0738f3dfb5d6db4c3c",
      "parents": [
        "e847f429f43ae56aaa406697ca603c8469e2100b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 10:53:11 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 12:54:18 2014 -0800"
      },
      "message": "system/core 64-bit cleanup.\n\nThis cleans up most of the size-related problems in system/core.\nThere are still a few changes needed for a clean 64-bit build,\nbut they look like they might require changes to things like the\nfastboot protocol.\n\nChange-Id: I1560425a289fa158e13e2e3173cc3e71976f92c0\n"
    },
    {
      "commit": "288ebfda3b7de6d27a9e2ecce315e98f2e408e8b",
      "tree": "2c59301466b93d344340d49c415e9544345463e9",
      "parents": [
        "6996f91809c3b56a7a7e5ba5b170a9905192b62a",
        "9259663cdb8f15226844e3ecfc6e3aa53614ad03"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 18:36:16 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 29 18:36:16 2013 -0700"
      },
      "message": "am 9259663c: am f17f5591: am 36d44740: Merge \"Fix a bunch of small system/core bugs.\"\n\n* commit \u00279259663cdb8f15226844e3ecfc6e3aa53614ad03\u0027:\n  Fix a bunch of small system/core bugs.\n"
    },
    {
      "commit": "14e28d39f7f094225c1ddae8fa43bd792c621a8f",
      "tree": "f4d986698864a59ea87af253247753768916be37",
      "parents": [
        "98f87d92d89079f274374409efcf57ca52b13c1f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 14:12:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 14:12:46 2013 -0700"
      },
      "message": "Fix a bunch of small system/core bugs.\n\nMissing frees in:\n  adb/file_sync_client.c\n  fastboot/fastboot.c\n  libsparse/output_file.c\n\nMissing closedirs in:\n  adb/file_sync_service.c\n  cpio/mkbootfs.c\n  libcutils/dir_hash.c\n\nPotential buffer overrun in:\n  gpttool/gpttool.c\n\nIncorrect NULL check in:\n  libsparse/backed_block.c\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d61564\nChange-Id: If97838a9e73a77aef7f416c31c237ce1fca4ce21\n"
    },
    {
      "commit": "60549075e83e615179720f930c618a530462bc3c",
      "tree": "1a50349bb76d2b29250a237c26544b74ac9056d0",
      "parents": [
        "b5e14ead1ea7554914e9f332f51240520fb22eba",
        "4d5d633bf862dbb0a960019e80fadc40c93177f0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 20 09:58:54 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 09:58:54 2013 -0700"
      },
      "message": "am 4d5d633b: am 20eb7ac2: am 3c8bdef0: Merge \"libsparse: Use BIONIC implementation of mmap64()\"\n\n* commit \u00274d5d633bf862dbb0a960019e80fadc40c93177f0\u0027:\n  libsparse: Use BIONIC implementation of mmap64()\n"
    },
    {
      "commit": "fccfa414c96061689676a8803e3492f992618486",
      "tree": "6ef14555491836086905dafff87c428f02f802ce",
      "parents": [
        "4a280e3dbe002bb5419ec010f89cdc158244e435"
      ],
      "author": {
        "name": "Daniel Leung",
        "email": "daniel.leung@intel.com",
        "time": "Tue Dec 11 08:39:57 2012 -0800"
      },
      "committer": {
        "name": "Andrew Boie",
        "email": "andrew.p.boie@intel.com",
        "time": "Wed Sep 18 14:42:28 2013 -0700"
      },
      "message": "libsparse: Use BIONIC implementation of mmap64()\n\nChange-Id: I63692629d3a62b7aee21202b67241904b1cc9789\nSigned-off-by: Daniel Leung \u003cdaniel.leung@intel.com\u003e\n"
    },
    {
      "commit": "de807f2ed8af63a75174933c13705a7529a82914",
      "tree": "4c036589e7eede43beb2c87fd04d72e224550129",
      "parents": [
        "3ad3d1c4b5856d4e314febc5671c74e78a76db00"
      ],
      "author": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Mon Jul 08 14:04:02 2013 -0700"
      },
      "committer": {
        "name": "Geremy Condra",
        "email": "gcondra@google.com",
        "time": "Tue Aug 06 22:16:07 2013 -0700"
      },
      "message": "Add append2simg.\n\nAppend2simg is a small utility designed to glue data to the end\nof a sparse image. Beware that it doesn\u0027t do anything clever with\nthat data.\n\nChange-Id: I33af330cb4f77e0842375797a35aebbb6af60163\n"
    },
    {
      "commit": "83a6d36d4226f82c202ffb27f89e080f95b71c30",
      "tree": "39d81591491497545bb2c9fa2f3dc65dd5faa987",
      "parents": [
        "f5562cb66c1c15d65bc372ede4c180430e1ce9d7"
      ],
      "author": {
        "name": "Hong-Mei Li",
        "email": "a21834@motorola.com",
        "time": "Mon Apr 01 11:22:50 2013 +0800"
      },
      "committer": {
        "name": "Hong-Mei Li",
        "email": "a21834@motorola.com",
        "time": "Mon Apr 01 11:22:50 2013 +0800"
      },
      "message": "libsparse: Fix null pointer issue\n\nFix the issue that \"out\" pointer is dereferenced without checking.\n\nChange-Id: I76a57ad7309841218231346f4807ef2be8628737\nSigned-off-by: Hong-Mei Li \u003ca21834@motorola.com\u003e\n"
    },
    {
      "commit": "5069b01e21129fe2d42a28e850645376560f2029",
      "tree": "bea871bb0942e5399a6de744e29f7e276356c962",
      "parents": [
        "1926c15a1219bc8426e0b9131633e02c76929fb7"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Jul 23 19:15:14 2012 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Aug 15 19:52:52 2012 -0700"
      },
      "message": "Support for multiple modules with the same name is going away.\n\nChange-Id: I5006b467978071f9107babe532efa71d05061580\n"
    },
    {
      "commit": "f1ec8ac84a8540b92a16f187bfa92b2f3c63917e",
      "tree": "1e2133a96b43a76d8b9dc7f9c795001ed09c4f53",
      "parents": [
        "ec7d9dc713322bd41b1e348c0ea3b1304a13dba9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:09:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:11:29 2012 -0700"
      },
      "message": "libsparse: fix 32 bit overflow when calculating last chunk\n\nlast_block * s-\u003eblock_size can overflow when writing large filesystems,\ncast to 64 bits before multiplying.\n\nChange-Id: I3e54097852ce7d0fd271eab53d65e666284898e4\n"
    },
    {
      "commit": "b43828b247fd4f1e0373584de0504004c69eeac9",
      "tree": "57141bc0f9b57cb3c7da4106e9276452da30ef90",
      "parents": [
        "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jun 08 16:55:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: rename symbols that conflict with libext4_utils\n\nUntil ext4_utils switches to using libsparse, libext4_utils defines some\nof the same symbols as libsparse.  Fastboot links statically against\nboth of them, and there is no easy way to make the symbols hidden, so\njust rename them in libsparse.\n\nChange-Id: Idc2cfe20efe3c3a7fb8233f453a89bbbeb0dcc8b\n"
    },
    {
      "commit": "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2",
      "tree": "1d16d24323042aa16d0994c05de22e2e043f6668",
      "parents": [
        "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu May 24 17:15:43 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add sparse_file_len\n\nAdd sparse_file_len, which will compute the size of data that would\nbe produced if sparse_file_write was called.  Useful combined with\nsparse_file_callback.\n\nChange-Id: I1a156d1071760f5559483954a5c62ffc20298703\n"
    },
    {
      "commit": "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2",
      "tree": "63fb3d31d9afc8ccc9c5a6ec96ddfcadb6a96f69",
      "parents": [
        "1e17b313a6257b7b5081e178e81435c09d60378e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 02 15:18:22 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add function to resparse a file and a utility to use it\n\nAdd sparse_file_repsarse, which splits chunks in an existing sparse\nfile such that the maximum size of a chunk, plus a header and footer,\nis smaller than the given size.  This will allow multiple smaller\nsparse files to result in the same data as a large sparse file.\n\nChange-Id: I177abdb958a23d5afd394ff265c5b0c6a3ff22fa\n"
    },
    {
      "commit": "1e17b313a6257b7b5081e178e81435c09d60378e",
      "tree": "aea5379ca96c99ec14f1c5c8dc202b7b5b36ca47",
      "parents": [
        "b4cd267db30c152245e6308598e0066d87c5c55d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 21 16:35:45 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add callback output file type\n\nAdd a new output file subclass that will call a callback for\neach block as it is written.  Will be used to measure the space\nused by each sparse block to allow resparsing files.\n\nAlso add sparse_file_callback, which will write out a sparse\nfile by calling the provided write function.\n\nChange-Id: I18707bd9c357b68da319cc07982e93d1c2b2bee2\n"
    },
    {
      "commit": "b4cd267db30c152245e6308598e0066d87c5c55d",
      "tree": "e888dfa52c033e91247daa5ad33c77696bfe6ff4",
      "parents": [
        "0c4c47f88dfc15cada154a1cf9b4db88b49890f0"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri May 18 14:49:50 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: pseudo-subclass output_file for normal and gz files\n\nCreate two subclasses of output_file that can handle normal\nand gzipped files, and refactor open_output_fd.  Will allow\nadding support for an output_file type that is not file\nbacked.\n\nChange-Id: I26744c74d13f205cf17df1ea9caac1eea9c57357\n"
    },
    {
      "commit": "0c4c47f88dfc15cada154a1cf9b4db88b49890f0",
      "tree": "36b4a1635c149cbdb26347387185a5c824cd203a",
      "parents": [
        "13a560659381b34ce3edbfa8dbe6c0aa6c076f20"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 19:02:58 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add sparse_file read and convert tools to use it\n\nAbstract the logic from simg2img into libsparse, and add logic\nfor reading a regular image into libsparse.  simg2img then\nbecomes a simple wrapper around libsparse.\n\nimg2simg was not actually making the file sparse, it was using\nsparse files to create multiple files that could be pieced back\ntogether.  Replace it with a simple wrapper around libsparse.\nIts functionality will be replaced by an simg2simg that can\nresparse a file into smaller chunks.\n\nChange-Id: I266f70e1c750454183ce46c71a7bb66bbb033a26\n"
    },
    {
      "commit": "13a560659381b34ce3edbfa8dbe6c0aa6c076f20",
      "tree": "cb0b3473d61f63a73e8832c182970939e29a736c",
      "parents": [
        "be8ddcb35a459481c0bcf5bfe645c1fefe963f5c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jun 19 16:45:48 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: fix windows image writing\n\nFix write_fd_chunk on windows.  Uses malloc and read instead of mmap.\n\nChange-Id: I75f10db2e04f19e7f3a6ff46b6978d143cb5254e\n"
    },
    {
      "commit": "be8ddcb35a459481c0bcf5bfe645c1fefe963f5c",
      "tree": "f3ab4517291fd1a8fc6c75d8670ba3cd3015be11",
      "parents": [
        "a21930b6b0dbb04a52948566d58fb48c6db58bab"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 21:02:16 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: merge adjacent blocks of the same type\n\nWhen a block is added that is adjacent to another block and of the same\ntype, merge it.  This will be useful for converting regular images to\nsparse images, allowing the reader to add a single block at a time and\nletting libsparse optimize into larger blocks as it goes.\n\nDoes not support merge two blocks that are backed by a data pointer,\nonly blocks that are backed by a file for now.\n\nChange-Id: I95aa231714cbe01ac194e868c21385806c0bdb97\n"
    },
    {
      "commit": "a21930b6b0dbb04a52948566d58fb48c6db58bab",
      "tree": "e74cfb32ad232c3b99364cd0931502519ca72111",
      "parents": [
        "9e1f17e926fa20255c5f4b4d2f68aa98a964253a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Apr 26 14:24:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add error reporting functions\n\nChange-Id: I2f21355b6c5339d1d724b4c121ea30d575b2d366\n"
    },
    {
      "commit": "9e1f17e926fa20255c5f4b4d2f68aa98a964253a",
      "tree": "142907cdec91851c3e162bdfc23638df9a0d675b",
      "parents": [
        "b55dceea986ab24f8b836b5116b389ed619c816e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 18:31:39 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add support for including fds\n\nAdd sparse_file_add_fd to include all or part of the contents\nof an fd in the output file.  Will be useful for re-sparsing files\nwhere fd will point to the input sparse file.\n\nChange-Id: I5d4ab07fb37231e8e9c1912f62a2968c8b0a00ef\n"
    },
    {
      "commit": "b55dceea986ab24f8b836b5116b389ed619c816e",
      "tree": "aa4f4ed6384931ec362c70eca7b25a7cb8dab450",
      "parents": [
        "411619e921904b896eddae81c086c1f687c8304d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 23:07:49 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: cleanups\n\nMove block loops into sparse.c with iterator helpers in backed_block.c.\nSimplify chunk writing by moving skip chunk calls from output_file.c to\nsparse.c.\nRename variables to be consistent with new naming.\nRemove use of u8, u32, u64.\n\nChange-Id: Ic138ad58bef9f96239266ccee12ee83ea285e7eb\n"
    },
    {
      "commit": "411619e921904b896eddae81c086c1f687c8304d",
      "tree": "d7b7f2f18b42c0aa6974e6d21c38109a01af3a48",
      "parents": [
        "28fa5bc347390480fe190294c6c385b6a9f0d68b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 18:51:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "libsparse: remove static variables\n\nRemoves static variables in backed_block.c to allow multiple\nsparse files to be open at the same time.\n\nChange-Id: I012d8a424c6e21a7352408416adb7c72ee8add21\n"
    },
    {
      "commit": "28fa5bc347390480fe190294c6c385b6a9f0d68b",
      "tree": "59189cf41baf263befeba392fc5bab814740eab1",
      "parents": [
        "2177c79bddc66e295599d87007d4cbec549e1cac"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sun May 20 13:28:05 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "system/core: move libsparse into system/core\n\nThis moves an exact copy of libsparse from\nsystem/extras/ext4_utils/libsparse to system/core/libsparse in\npreparation for linking tools in system/core against it.\n\nChange-Id: If664e4fcfd6612844ac745589beb1517e7f9fe58\n"
    }
  ]
}
