)]}'
{
  "log": [
    {
      "commit": "81c4e225bf1546ff3f9ce4019f5bd3a58c57ba5f",
      "tree": "207c77d9d8cce5f4a3e53a96dcba6e62966f7cbc",
      "parents": [
        "9578c774a94f7e3d2744a5c1475687dab4ffcf21"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Fri Aug 25 15:34:08 2023 -0700"
      },
      "committer": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Aug 28 09:53:30 2023 -0700"
      },
      "message": "Make simg2img host-only\n\nThis is supposed to be a host tool, but was being installed on\ncuttlefish devices.\n\nBug: 205632228\nTest: Presubmits\nChange-Id: I9eb1ae1a5c171253617fa12283e2ec651afb5539\n"
    },
    {
      "commit": "0236af54cd25eb3e3f9c7238affc53df07e4b1a2",
      "tree": "6d51db2c52b4c1b50fadc4418d66422a8341051d",
      "parents": [
        "6c58df5766726259cc6912b3c28a728fa3d6fd66"
      ],
      "author": {
        "name": "A. Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Thu Jun 22 17:06:40 2023 -0700"
      },
      "committer": {
        "name": "A. Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Thu Jun 22 17:11:37 2023 -0700"
      },
      "message": "Build libsparse and simg2img for Mac OS X as part of Cuttlefish launcher tools\n\nBug: 288493595\nTest: m libsparse simg2img\nChange-Id: I9e0c5c77b9b2b5994bf52e1ca9fdb84bc1523d5d\n"
    },
    {
      "commit": "ef4507b6c885af7fb3ffd88cb631a005555f6f18",
      "tree": "e29f35048362fbe231995129f9c1c43a7f1e7717",
      "parents": [
        "ecdbbbda825bb26715881037a6f3a5aaf2f95de7"
      ],
      "author": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Thu Mar 23 19:55:50 2023 +0000"
      },
      "committer": {
        "name": "Eric Biggers",
        "email": "ebiggers@google.com",
        "time": "Thu Mar 23 20:23:00 2023 +0000"
      },
      "message": "libsparse: fix double free after block splitting\n\nDue to https://r.android.com/1310496, sparse_file_write() splits all\nblocks larger than 64 MiB.  However, the code that splits file-backed\nblocks copies the pointer to the filename without duplicating the\nunderlying memory, causing a double free in backed_block_destroy()\nlater.  Fix this by using strdup().  Also, as long as that is being\nfixed, also check for failure.\n\nTest: SANITIZE_HOST\u003daddress mmm external/e2fsprogs\n      mkdir mnt\n      mkfs.ext4 img 1G\n      sudo mount img mnt\n      sudo cp /dev/urandom mnt/file\n      sudo umount mnt\n      ext2simg img simg\n\nBefore this fix it gave:\n\n    \u003d\u003d2216498\u003d\u003dERROR: AddressSanitizer: attempting double-free on 0x602000000090 in thread T0:\n        #0 0x55a52454c9a2 in free out/stage2/runtimes/runtimes-x86_64-unknown-linux-gnu-bins/out/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:52:3\n        #1 0x7ffa247c82ee in backed_block_destroy(backed_block*) system/core/libsparse/backed_block.cpp:106:5\n        #2 0x7ffa247c82ee in backed_block_list_destroy(backed_block_list*) system/core/libsparse/backed_block.cpp:124:7\n        #3 0x7ffa247cd055 in sparse_file_destroy system/core/libsparse/sparse.cpp:49:3\n        #4 0x55a524587b75 in main external/e2fsprogs/contrib/android/ext2simg.c:239:2\n\nChange-Id: I4607ef5adcf6512645342beaf91aff6033414e54\n"
    },
    {
      "commit": "f06debcf24509a2bd33ebae51aaeffdc675fc2be",
      "tree": "08980f23ec44fb297f6dd3456b236c0e7f71b871",
      "parents": [
        "bfe56d3e205035388f6d9697dd5f3e93f4922dd0"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Mar 16 21:23:53 2023 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Mon Mar 20 15:55:57 2023 -0700"
      },
      "message": "libsparse: Fix allocation failures on 32-bit systems.\n\nlibsparse uses mapped files for length computation checks and writing\noutput data. The platform-tools package for Windows is 32-bit, and if\nan embedded file in the stream is large enough, mapping will fail. In\ntheory, this failure mode could happen on 64-bit systems as well.\n\nAs a workaround, map files in chunks of 256MB instead. This is\nimplemented by adding a new \"fd_chunk\" callback to the sparse ops\nstruct.\n\nBug: 273933042\nBug: 268872725\nTest: fastboot update on Windows\nChange-Id: Ic40696b34a1d0951787c899db701fc2fa204eb18\n"
    },
    {
      "commit": "bfe56d3e205035388f6d9697dd5f3e93f4922dd0",
      "tree": "94855f004c110f2b90496b63788abeee399bfd82",
      "parents": [
        "10c200db281fde892878ba92363c26d9fd5ee871"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Mar 16 08:56:14 2023 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu Mar 16 21:50:03 2023 -0700"
      },
      "message": "libsparse: Propagate failures when resparsing files.\n\nMappedFile creation can fail due to out of memory, but this condition is\nnot handled properly when resparsing. The error is silently ignored and\nthe result is a corrupt file.\n\nBug: 273933042\nBug: 268872725\nTest: fastboot update on Windows\nChange-Id: I4d0f24d6ba390e2328de8f0e3637d17663743df5\n"
    },
    {
      "commit": "8a9495aba66d8274d13a6d10bd5a5c8114c3c799",
      "tree": "0a6d63676a0a46cbd8cbb1c4f96c211ad69b47d8",
      "parents": [
        "1dcc32555ec6bc526b0ee7f773d4e5397ef0f085"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 11 21:56:34 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 11 21:56:34 2022 +0000"
      },
      "message": "Remove a file we haven\u0027t built since 2013.\n\nIt was only added in 2012, so it\u0027s been dead for 10 times longer than it\nwas ever built for at this point... YAGNI.\n\nTest: treehugger\nChange-Id: I6f31a3d1354f4d3304da463322cd1d9eff9e0597\n"
    },
    {
      "commit": "c91d1a6b1791f4dfb14a6c502a834336bc761b4b",
      "tree": "2568deda704ab7aea814a20e5ad0c7a04a856cdf",
      "parents": [
        "9cc8a29e3362a76fc52cc56c93d8ed1a39baa457"
      ],
      "author": {
        "name": "rapperskull",
        "email": "rapper.skull@hotmail.it",
        "time": "Thu Nov 10 21:24:40 2022 +0100"
      },
      "committer": {
        "name": "rapperskull",
        "email": "rapper.skull@hotmail.it",
        "time": "Thu Nov 10 21:24:40 2022 +0100"
      },
      "message": "Replace exit codes with EXIT_SUCCESS and EXIT_FAILURE.\n\nChange-Id: I6777420892629ea6705806ba624ffb200d395114\n"
    },
    {
      "commit": "9cc8a29e3362a76fc52cc56c93d8ed1a39baa457",
      "tree": "da43b8504e0b108bff3e1da30371a782b0fdc02a",
      "parents": [
        "7e17f702e410e62fb8ea1cac9567ad70c0678bd3"
      ],
      "author": {
        "name": "rapperskull",
        "email": "rapper.skull@hotmail.it",
        "time": "Thu Nov 10 20:38:34 2022 +0100"
      },
      "committer": {
        "name": "rapperskull",
        "email": "rapper.skull@hotmail.it",
        "time": "Thu Nov 10 20:42:10 2022 +0100"
      },
      "message": "Fix clang error about incompatible assignment in simg2simg.cpp\n\nChange-Id: Ibb5c9431e51525c083e2981979e831d7f0b8ea1d\n"
    },
    {
      "commit": "dbf62d939a0faa0ecf5a55c8633b1c6bf2182d03",
      "tree": "6b35588edc8a3e92dd877fda65e91c018f9c7c23",
      "parents": [
        "9f7a19d0f349f984b965c837e4bb466f87e92f7c"
      ],
      "author": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Mon Oct 03 16:15:21 2022 +0800"
      },
      "committer": {
        "name": "Bowgo Tsai",
        "email": "bowgotsai@google.com",
        "time": "Mon Oct 03 16:27:49 2022 +0800"
      },
      "message": "simg_dump.py: fix error for CHUNK_TYPE_FILL\n\nIn python3, division of two integers produces a float,\nwhich cannot be used to multiply a bytes sequence.\n\nUsing // to produce an integer quotient.\n\nBug: 245257511\nTest: ./system/core/libsparse/simg_dump.py -sv path/to/image\nChange-Id: Ibe95056409ac3676a68f5e7693331ca4a66e9fb7\n"
    },
    {
      "commit": "7e279e97a3b8ac43fe93f9f3f8287a6965f7fb30",
      "tree": "6dd48779d534b7a63e8a0515ba9b018c907bcc7d",
      "parents": [
        "2dcde2a36a2323b29988a45d2e11480824f338ea"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Sep 05 18:12:42 2022 -0700"
      },
      "committer": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Tue Sep 20 12:33:47 2022 -0700"
      },
      "message": "Fix module-file name collisions\n\nBazel doesn\u0027t allow a module and file with the same name.\n\nBug: 198619163\nTest: Presubmits\nChange-Id: I345086764071ca649de1ac11804e21675cd5e59d\n"
    },
    {
      "commit": "519fdce310fa1ff782e9eaf56623aad6d984f92d",
      "tree": "32a1ce3a38c3ab03e11e484f12a4c4ce2ef06625",
      "parents": [
        "57ea923f3084318d7535f86b58f05d7449a91282"
      ],
      "author": {
        "name": "Krzysztof Kosiński",
        "email": "krzysio@google.com",
        "time": "Sun Sep 18 01:47:14 2022 +0000"
      },
      "committer": {
        "name": "Krzysztof Kosiński",
        "email": "krzysio@google.com",
        "time": "Sun Sep 18 01:47:14 2022 +0000"
      },
      "message": "Remove Python enables identical to global defaults.\n\nBug: 245854393\nTest: presubmit\nChange-Id: I67540844a28975f8f32539774748930907267764\n"
    },
    {
      "commit": "a7fd7b168905bca489a9ff43a507293de7b067ce",
      "tree": "d944e1a65aa549d94d16c0216aba1d8f7265931d",
      "parents": [
        "d17cefe7e4f44bb4ec3e72bf2088e895ce83714d"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jun 01 18:18:49 2022 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Wed Jun 01 18:36:04 2022 -0700"
      },
      "message": "libsparse: Don\u0027t spam errors in sparse_file_import_auto.\n\nThis function is intended for use on sparse or non-sparse files. But\nwhen used on non-sparse files, it unintentionally reports errors when\ntrying to detect if the file is sparse or not.\n\nSince the behavior is the same whether or not the detection fails, this\npatch disables verbose errors during the import. Verbose errors are\nturned on if a resparse is needed.\n\nBug: 210846593\nTest: fastboot flashall\nChange-Id: I8404ca7a67adc7fba8a3ac7b4ffa18abfbcafa9d\n"
    },
    {
      "commit": "79677f8b4928e1cda39b8f561001769b955fa2a0",
      "tree": "4faf1016872a5f76ada790bc54f42c95643d1a82",
      "parents": [
        "ec76b5cb4efb342e20b7b05dd016e4daec2d6f2b",
        "6150b00b6025918da8c28e5c2f929ecdf480a9d6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri May 13 19:07:36 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 13 19:07:36 2022 +0000"
      },
      "message": "Merge \"img2simg: Add support for converting holes to \"don\u0027t care\" chunks\""
    },
    {
      "commit": "1431665cb02ab19a5fdf59882ee9594e22a63007",
      "tree": "5152004ba5c971799ba958bb8b6286aa69ab0032",
      "parents": [
        "11602701d41689252f81d80fdd3fb527782fc1dd"
      ],
      "author": {
        "name": "Devendra Singhi",
        "email": "devendra.singhi@ittiam.com",
        "time": "Mon Apr 04 14:03:55 2022 +0530"
      },
      "committer": {
        "name": "Devendra Singhi",
        "email": "devendra.singhi@ittiam.com",
        "time": "Mon Apr 04 14:03:55 2022 +0530"
      },
      "message": "sparse_fuzzer: Bug fix\n\nResolved Memory Leak\n\nTest: ./sparse_fuzzer clusterfuzz-testcase-minimized-sparse_fuzzer-6050329726943232\nBug: 214604770\n\nChange-Id: I8df4be935ff586efeebf7e32dccc52dbf82e5076\n"
    },
    {
      "commit": "f401dcdf5a2f350fa46dd29a1389c98a4ab84482",
      "tree": "36db5fb5b0fd029ff0c3d169cbaa04f7d75da80f",
      "parents": [
        "acd4121dbcdd9edfe7336d22d90f5393dca1ea6e",
        "f96466b05543b984ef7315d830bab4a409228d35"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 28 05:28:04 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 28 05:28:04 2022 +0000"
      },
      "message": "Merge changes from topic \"sparse-file-read-enum\"\n\n* changes:\n  libsparse: Add \"hole\" mode to sparse_file_read\n  libsparse: Split off most of sparse_file_read_normal into a helper function\n"
    },
    {
      "commit": "6150b00b6025918da8c28e5c2f929ecdf480a9d6",
      "tree": "e94700af5f4936aa728a8f5323604bb86f94ad17",
      "parents": [
        "f96466b05543b984ef7315d830bab4a409228d35"
      ],
      "author": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Dec 30 15:34:28 2021 -0500"
      },
      "committer": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Jan 27 14:49:46 2022 -0500"
      },
      "message": "img2simg: Add support for converting holes to \"don\u0027t care\" chunks\n\nThis adds support for converting files with holes to \"don\u0027t care\"\nchunks. This can result in a substantial reduction in the time it takes\nto program an image if it has many holes.\n\nGenerally, constants compared to argc have been reduced by one, since we\nno longer have the program name as the first argument.\n\nChange-Id: I00750edc07d6415dcc07ae0351e9397b0222b7ba\n"
    },
    {
      "commit": "f96466b05543b984ef7315d830bab4a409228d35",
      "tree": "7d102d62021013fee855ee763110817ff93d93d9",
      "parents": [
        "95657f3e5976d96073f7bbfe3a49192509999d1d"
      ],
      "author": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Dec 30 15:19:41 2021 -0500"
      },
      "committer": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Jan 27 14:49:46 2022 -0500"
      },
      "message": "libsparse: Add \"hole\" mode to sparse_file_read\n\nThis adds support for filesystem-level sparse files. These files have\nholes which are not stored in the filesystem and when read are full of\nzeros. While these zeros may be significant in some types of files,\nother types of files may not care about the contents of holes. For\nexample, most filesystem creation tools write to all the blocks they\ncare about. Those blocks not written to will remain holes, and can be\nsafely represented by \"don\u0027t care\" chunks. Using \"don\u0027t care\" chunks\ninstead of fill chunks can result in a substantial reduction of the time\nit takes to program a sparse image.\n\nTo accomplish this, we extend the existing \"sparse\" boolean parameter to\nbe an enum of mode types. This enum represents the strategy we take when\nreading in a file. For the most part the implementation is\nstraightforward. We use lseek to determine where the holes in the file\nare, and then use do_sparse_file_read_normal to create chunks for the\ndata section. Note that every file has an implicit hole at its end.\n\nChange-Id: I0cfbf08886fca9a91cb753ec8734c84fcbe52c9f\n"
    },
    {
      "commit": "59171962a6a9012797d652497781e67e7ffbc66a",
      "tree": "2938ec2a8501c2439f27510224267ec5c897c7d7",
      "parents": [
        "3ecaae4fdf8678510991d5eb1e55303bfcfdf31b",
        "f75518ee5c5d9e266f8c76253365b25147d87b09"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 21 00:53:23 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 21 00:53:23 2022 +0000"
      },
      "message": "Merge \"libsparse: no xrange() in python3.\""
    },
    {
      "commit": "f75518ee5c5d9e266f8c76253365b25147d87b09",
      "tree": "0011eee7053ada1b4300e9fd23a37fe0db561aaa",
      "parents": [
        "da0756b5752c694d7e6dc7dc6f3a93b3f232b33e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 18 17:26:56 2022 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 18 17:26:56 2022 -0800"
      },
      "message": "libsparse: no xrange() in python3.\n\nBug: http://b/205996442\nTest: treehugger\nChange-Id: Ifcbbc2e67e9f54b2c4e1fd2aacf52427bc7d2831\n"
    },
    {
      "commit": "a3b72067de65d37d8b646e699b900e984d70165d",
      "tree": "0e3c901d3fcb4285f2778a95285e3686e5093f0d",
      "parents": [
        "e060580c31630d325323ee4341be9d30072387b1"
      ],
      "author": {
        "name": "Keith Mok",
        "email": "keithmok@google.com",
        "time": "Fri Dec 31 05:09:32 2021 +0000"
      },
      "committer": {
        "name": "Keith Mok",
        "email": "keithmok@google.com",
        "time": "Fri Jan 14 00:37:48 2022 +0000"
      },
      "message": "Add checking for sparse file format\n\nSparse file can come from an untrusted source.\nNeed more checking to ensure that it is not a malformed\nfile and would not cause any OOB read access.\n\nUpdate fuzz test for decoding also.\n\nTest: adb reboot fastboot\n      fuzzy_fastboot --gtest_filter\u003dFuzz.Sparse*\n      fuzzy_fastboot --gtest_filter\u003dConformance.Sparse*\n      sparse_fuzzer\nBug: 212705418\nChange-Id: I7622df307bb00e59faaba8bb2c67cb474cffed8e\n"
    },
    {
      "commit": "95657f3e5976d96073f7bbfe3a49192509999d1d",
      "tree": "1ca3d8362d15f06c61f22e56f45be28fdc3e440f",
      "parents": [
        "fcf3fefe0bb4d3f3cda8841e783f0db6b230a454"
      ],
      "author": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Dec 30 15:16:08 2021 -0500"
      },
      "committer": {
        "name": "Sean Anderson",
        "email": "sean.anderson@seco.com",
        "time": "Thu Dec 30 15:50:20 2021 -0500"
      },
      "message": "libsparse: Split off most of sparse_file_read_normal into a helper function\n\nThis carves out the core of sparse_file_read_normal and splits it off so\nit can be reused in the next patch. No functional change intended.\n\nChange-Id: Id00491fd7e5bb6fa28c517a0bb32b8b506539d4d\n"
    },
    {
      "commit": "726a6a915921d08b6429c1ef5598dad2ce1840a0",
      "tree": "d4bbb54e4ab8695110951959053495484e88b339",
      "parents": [
        "489f09abd4cbbea26c45a189ce4d26434d437e59"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 17 15:02:00 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 17 15:02:00 2021 -0700"
      },
      "message": "libsparse: python3.\n\nTest: treehugger\nTest: ran simg_dump.py on a file created by img2simg\nChange-Id: I999747867733a2e789c0da95add0bba83c36133f\n"
    },
    {
      "commit": "d69ad69a938a27021adfcc2435dc1fd2ad0c8e1a",
      "tree": "184b620c9b0cddc4b15efa718ddc3961d2ce3d64",
      "parents": [
        "d57652f15b078d06d9258094f8a951374a677f2c"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Tue Feb 16 19:02:14 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 19 12:59:05 2021 -0800"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to system/core\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  bootstat/Android.bp\n  cli-test/Android.bp\n  code_coverage/Android.bp\n  cpio/Android.bp\n  debuggerd/crasher/Android.bp\n  debuggerd/proto/Android.bp\n  diagnose_usb/Android.bp\n  fs_mgr/libdm/Android.bp\n  fs_mgr/libfiemap/Android.bp\n  fs_mgr/liblp/Android.bp\n  fs_mgr/libsnapshot/Android.bp\n  fs_mgr/libstorage_literals/Android.bp\n  fs_mgr/libvbmeta/Android.bp\n  fs_mgr/tests/Android.bp\n  fs_mgr/tools/Android.bp\n  gatekeeperd/Android.bp\n  healthd/Android.bp\n  healthd/testdata/Android.bp\n  init/Android.bp\n  init/Android.mk\n  init/sysprop/Android.bp\n  init/test_kill_services/Android.bp\n  init/test_service/Android.bp\n  libappfuse/Android.bp\n  libasyncio/Android.bp\n  libbinderwrapper/Android.bp\n  libcrypto_utils/Android.bp\n  libcrypto_utils/tests/Android.bp\n  libdiskconfig/Android.bp\n  libgrallocusage/Android.bp\n  libkeyutils/mini_keyctl/Android.bp\n  libmodprobe/Android.bp\n  libnetutils/Android.bp\n  libpackagelistparser/Android.bp\n  libprocessgroup/Android.bp\n  libprocessgroup/cgrouprc/Android.bp\n  libprocessgroup/cgrouprc_format/Android.bp\n  libprocessgroup/profiles/Android.bp\n  libprocessgroup/setup/Android.bp\n  libqtaguid/Android.bp\n  libsparse/Android.bp\n  libstats/push_compat/Android.bp\n  libsuspend/Android.bp\n  libsync/Android.bp\n  libsystem/Android.bp\n  libsysutils/Android.bp\n  libusbhost/Android.bp\n  libutils/Android.bp\n  libvndksupport/Android.bp\n  libvndksupport/tests/Android.bp\n  llkd/Android.bp\n  llkd/tests/Android.bp\n  property_service/libpropertyinfoparser/Android.bp\n  property_service/libpropertyinfoserializer/Android.bp\n  property_service/property_info_checker/Android.bp\n  qemu_pipe/Android.bp\n  reboot/Android.bp\n  rootdir/Android.bp\n  rootdir/Android.mk\n  rootdir/avb/Android.bp\n  rootdir/avb/Android.mk\n  run-as/Android.bp\n  sdcard/Android.bp\n  set-verity-state/Android.bp\n  shell_and_utilities/Android.bp\n  storaged/Android.bp\n  toolbox/Android.bp\n  trusty/apploader/Android.bp\n  trusty/confirmationui/Android.bp\n  trusty/confirmationui/fuzz/Android.bp\n  trusty/coverage/Android.bp\n  trusty/fuzz/Android.bp\n  trusty/fuzz/test/Android.bp\n  trusty/gatekeeper/Android.bp\n  trusty/gatekeeper/fuzz/Android.bp\n  trusty/keymaster/Android.bp\n  trusty/keymaster/fuzz/Android.bp\n  trusty/libtrusty/Android.bp\n  trusty/libtrusty/tipc-test/Android.bp\n  trusty/secure_dpu/Android.bp\n  trusty/storage/interface/Android.bp\n  trusty/storage/lib/Android.bp\n  trusty/storage/proxy/Android.bp\n  trusty/storage/tests/Android.bp\n  trusty/utils/spiproxyd/Android.bp\n  trusty/utils/trusty-ut-ctrl/Android.bp\n  usbd/Android.bp\n  watchdogd/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  debuggerd/Android.bp\n  fastboot/Android.bp\n  libkeyutils/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    SPDX-license-identifier-MIT\nto:\n  libcutils/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-MIT\nto:\n  fs_mgr/Android.bp\n  fs_mgr/libfs_avb/Android.bp\n  trusty/Android.bp\n  trusty/utils/rpmb_dev/Android.bp\n\nAdded SPDX-license-identifier-BSD\nto:\n  fastboot/fuzzy_fastboot/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\nChange-Id: Id740a7d2884556081fdb68876584b25eb95e1bef\n"
    },
    {
      "commit": "c3a206ccda9a78dd45d06b7d68dbe83e1fba779e",
      "tree": "cd137e76557bf1aadffe3cb43e02ab642bc81c71",
      "parents": [
        "187b7d19504ca8bdcbc6217c06a117017b4c6287"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 16 20:01:20 2021 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 16 20:01:20 2021 +0000"
      },
      "message": "Revert \"[LSC] Add LOCAL_LICENSE_KINDS to system/core\"\n\nThis reverts commit 187b7d19504ca8bdcbc6217c06a117017b4c6287.\n\nReason for revert: system/core is multiple projects, not one.\n\nChange-Id: I790ea41741f8cd9b8b6db2f59a49e71fb0958fd6\n"
    },
    {
      "commit": "187b7d19504ca8bdcbc6217c06a117017b4c6287",
      "tree": "0656ad03ff6e56b17ab0d4a8677955cab2c16cba",
      "parents": [
        "83eae36647eef27b75b128c5bce4732229d2ca0d"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 12 17:48:16 2021 -0800"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Tue Feb 16 04:10:03 2021 -0800"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to system/core\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  bootstat/Android.bp\n  cli-test/Android.bp\n  code_coverage/Android.bp\n  cpio/Android.bp\n  debuggerd/crasher/Android.bp\n  debuggerd/proto/Android.bp\n  diagnose_usb/Android.bp\n  fs_mgr/libdm/Android.bp\n  fs_mgr/libfiemap/Android.bp\n  fs_mgr/liblp/Android.bp\n  fs_mgr/libsnapshot/Android.bp\n  fs_mgr/libstorage_literals/Android.bp\n  fs_mgr/libvbmeta/Android.bp\n  fs_mgr/tests/Android.bp\n  fs_mgr/tools/Android.bp\n  gatekeeperd/Android.bp\n  healthd/Android.bp\n  healthd/testdata/Android.bp\n  init/Android.bp\n  init/Android.mk\n  init/sysprop/Android.bp\n  init/test_kill_services/Android.bp\n  init/test_service/Android.bp\n  libappfuse/Android.bp\n  libasyncio/Android.bp\n  libbinderwrapper/Android.bp\n  libcrypto_utils/Android.bp\n  libcrypto_utils/tests/Android.bp\n  libdiskconfig/Android.bp\n  libgrallocusage/Android.bp\n  libkeyutils/mini_keyctl/Android.bp\n  libmodprobe/Android.bp\n  libnetutils/Android.bp\n  libpackagelistparser/Android.bp\n  libprocessgroup/Android.bp\n  libprocessgroup/cgrouprc/Android.bp\n  libprocessgroup/cgrouprc_format/Android.bp\n  libprocessgroup/profiles/Android.bp\n  libprocessgroup/setup/Android.bp\n  libqtaguid/Android.bp\n  libsparse/Android.bp\n  libstats/push_compat/Android.bp\n  libsuspend/Android.bp\n  libsync/Android.bp\n  libsystem/Android.bp\n  libsysutils/Android.bp\n  libusbhost/Android.bp\n  libutils/Android.bp\n  libvndksupport/Android.bp\n  libvndksupport/tests/Android.bp\n  llkd/Android.bp\n  llkd/tests/Android.bp\n  property_service/libpropertyinfoparser/Android.bp\n  property_service/libpropertyinfoserializer/Android.bp\n  property_service/property_info_checker/Android.bp\n  qemu_pipe/Android.bp\n  reboot/Android.bp\n  rootdir/Android.bp\n  rootdir/Android.mk\n  rootdir/avb/Android.bp\n  rootdir/avb/Android.mk\n  run-as/Android.bp\n  sdcard/Android.bp\n  set-verity-state/Android.bp\n  shell_and_utilities/Android.bp\n  storaged/Android.bp\n  toolbox/Android.bp\n  trusty/apploader/Android.bp\n  trusty/confirmationui/Android.bp\n  trusty/confirmationui/fuzz/Android.bp\n  trusty/coverage/Android.bp\n  trusty/fuzz/Android.bp\n  trusty/fuzz/test/Android.bp\n  trusty/gatekeeper/Android.bp\n  trusty/gatekeeper/fuzz/Android.bp\n  trusty/keymaster/Android.bp\n  trusty/keymaster/fuzz/Android.bp\n  trusty/libtrusty/Android.bp\n  trusty/libtrusty/tipc-test/Android.bp\n  trusty/secure_dpu/Android.bp\n  trusty/storage/interface/Android.bp\n  trusty/storage/lib/Android.bp\n  trusty/storage/proxy/Android.bp\n  trusty/storage/tests/Android.bp\n  trusty/utils/spiproxyd/Android.bp\n  trusty/utils/trusty-ut-ctrl/Android.bp\n  usbd/Android.bp\n  watchdogd/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  debuggerd/Android.bp\n  fastboot/Android.bp\n  libkeyutils/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    SPDX-license-identifier-MIT\nto:\n  Android.bp\n  libcutils/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-MIT\nto:\n  fs_mgr/Android.bp\n  fs_mgr/libfs_avb/Android.bp\n  trusty/utils/rpmb_dev/Android.bp\n\nAdded SPDX-license-identifier-BSD\nto:\n  fastboot/fuzzy_fastboot/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\nChange-Id: I5bd81adb5cdcf2b4dd4141b204eb430ff526af8f\n"
    },
    {
      "commit": "3ed3d4cd9416414eecd8a63ce30fa1628d11908f",
      "tree": "139326c18158c6ce83190a99bfa47e70140d5f94",
      "parents": [
        "0f2c5417c39ed91fb520f7f2df4fcaeedcc432d0"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Tue Jan 05 14:46:01 2021 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Tue Jan 05 14:46:01 2021 +0900"
      },
      "message": "Add assemble_cvd to com.android.virt\n\nassemble_cvd directly or indirectly depends on these modules. To add\nassemble_cvd to the com.anroid.virt APEX, these modules are marked as\nbeing available to the APEX.\n\nBug: 174639526\nTest: m com.android.virt\nChange-Id: Id3b2989a9f038a1cdc769a2021a116cf09ab1b15\n"
    },
    {
      "commit": "e85233c5601a3140f1941226d26be2499151e7a8",
      "tree": "3c7d8fc4b4778fc09fca71b5d517a62359dc5bf6",
      "parents": [
        "7e7f881508cbda09f7092919052f28b84a63a30d"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Wed Nov 18 20:22:47 2020 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Thu Nov 19 17:35:21 2020 -0800"
      },
      "message": "libsparse: make vendor_ramdisk_available.\n\nTest: pass\nBug: 173425293\nChange-Id: Id360f205b9135b83edb59d13f978eb28cad041de\n"
    },
    {
      "commit": "9e28cd32fd5b7cc0b9564414994a93b027f46c38",
      "tree": "54a57a58dd24549b43f9b844f6746bfa9bb56d73",
      "parents": [
        "29e7b2af306c69a3e121bca1830a642eeac64019"
      ],
      "author": {
        "name": "Alistair Delva",
        "email": "adelva@google.com",
        "time": "Thu Sep 03 08:43:43 2020 -0700"
      },
      "committer": {
        "name": "Alistair Delva",
        "email": "adelva@google.com",
        "time": "Thu Sep 03 08:43:46 2020 -0700"
      },
      "message": "Make libsparse vendor_available\n\nWe are porting cuttlefish to Android, it currently uses libsparse to\ndesparse Android filesystems to be used directly as disk images by\ncrosvm. Making this library available to \u0027vendor\u0027 enables us to support\ndesparsing downloaded images on-device as well.\n\nBug: 167675429\nChange-Id: I8ae4a916cfb0b2002dd9e462f32e8cb0e533d821\n"
    },
    {
      "commit": "e8d02c50d76e278f91455bd90e1db2ae79eac035",
      "tree": "e768a72f0edf6caf3055cd9d7fcb1ef4c032cf1e",
      "parents": [
        "52c8422ea19b5719f8128b85fb01d985bd415c46"
      ],
      "author": {
        "name": "Hyeongseok Kim",
        "email": "hyeongseok@gmail.com",
        "time": "Mon Aug 10 12:11:57 2020 +0900"
      },
      "committer": {
        "name": "Hyeongseok Kim",
        "email": "hyeongseok@gmail.com",
        "time": "Tue Aug 11 08:34:28 2020 +0900"
      },
      "message": "libsparse: Fix overflow of merged sparse chunk length\n\nMerging sparse chunk can make sparse map block bigger than 4GiB,\nthat can\u0027t be covered by unsigned integer type. Fix this by\nchanging unsigned int to uint64_t type.\n\nTest: sparse build\nBug: 162808120\nChange-Id: Id4d3f88f9d531c25c3937c99b2c81efb915605ee\nSigned-off-by: Hyeongseok Kim \u003chyeongseok@gmail.com\u003e\nCc: hyeongseok.kim \u003chyeongseok.kim@lge.com\u003e\n"
    },
    {
      "commit": "a386482f1d2e29e893a59289f71ccdc715472514",
      "tree": "c4322bedbe9e20d7280dc64cb4a733bad426d335",
      "parents": [
        "450e83eb8f2dea14f57ccd63973c27d9523ff73d"
      ],
      "author": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Wed May 13 20:50:54 2020 +0800"
      },
      "committer": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Wed Jun 03 11:45:17 2020 +0800"
      },
      "message": "libsparse: Limit block size to 64 MB\n\nLimit the block size to 64 MB before fastboot executable binary for\nwindows 64-bit is released.\n\nBug: 156057250\nChange-Id: Ic4edb963a3d99f718d7630aba3f351729a84e994\n"
    },
    {
      "commit": "c44f50ca587aefac5505a1f1298e5c01da63baca",
      "tree": "6379e4ef6e5f985055f07eaeefc412ad61252473",
      "parents": [
        "a269c7c3d12a5a0ab604343815ba12a65afe8422"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 14 16:52:18 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 14 16:52:18 2020 -0700"
      },
      "message": "libsparse: use memory-mapping on Windows too.\n\nBug: 156057250\nTest: treehugger\nChange-Id: Icdd2dfa43208ca4086e709d09c4cafbec4b84791\n"
    },
    {
      "commit": "7dd4553991ff7714935eea1fb81f83d194da71ae",
      "tree": "63f9864af109e10b7632873d7bdddf2ef6a650a3",
      "parents": [
        "929c9e8b40fe6adb23a140a8584d69edb2cab636"
      ],
      "author": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Tue Jan 21 18:17:19 2020 -0800"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Wed Jan 22 16:47:14 2020 -0800"
      },
      "message": "Make ramdisk_available.\n\nTest: pass\nBug: 147347110\nChange-Id: I9787e386e552393efc5beed5aac577be9ce1a3c5\n"
    },
    {
      "commit": "48c9f6196ffb387f423c7f711df079baffeed6d6",
      "tree": "5f8d9b3cb342b46f42ee3b64c4664270a49c07db",
      "parents": [
        "d9381651ee52ca6a081458d8b98806eda5aa579e"
      ],
      "author": {
        "name": "Robin Hsu",
        "email": "robinhsu@google.com",
        "time": "Thu Nov 07 13:44:08 2019 +0800"
      },
      "committer": {
        "name": "Robin Hsu",
        "email": "robinhsu@google.com",
        "time": "Tue Nov 12 18:52:29 2019 +0800"
      },
      "message": "libsparse: fix memory leak in output_file_close()\n\nFix memory leak in output_file_close():\nArguable whose resposibility to free structs allocated inside a file\nstruct (the caller or the library function), but the following protocol\n(i.e. this fix) would better prevent memory leaks:\n1) output_file_close() function will free those structs inside a file struct,\n   right before closing the file.\n   * Note: those structs are originally allocated by other libsparse function.\n2) If the caller wants to clean up those struct inside a file struct,\n   it may.  Just free those structs, and set the pointer to NULL.\n   Afterward, when file_close()\u0027s are called, they won\u0027t be free\u0027ed twice.\n\nBug: 142483439\nTest: verified by script MemLeak_LastCmd.sh (attached in Bugnizer)\nChange-Id: I8bb9f7c9f7d19268663e2830d1a90d27bd5f99bd\nSigned-off-by: Robin Hsu \u003crobinhsu@google.com\u003e\n"
    },
    {
      "commit": "d17dc6af5262cdf5ea93457f874225af59b860a1",
      "tree": "6d85eec9a73f27797d9582be3e4e8e993cb8e16f",
      "parents": [
        "a550e7f4128a4e5747950d239fd41cbbc436649b"
      ],
      "author": {
        "name": "hamzeh",
        "email": "hamzeh@google.com",
        "time": "Wed Sep 25 11:00:31 2019 -0700"
      },
      "committer": {
        "name": "hamzeh",
        "email": "hamzeh@google.com",
        "time": "Wed Sep 25 13:27:52 2019 -0700"
      },
      "message": "Add fuzzer for libsparse\n\nBug: 141129284\nTest: SANITIZE_TARGET\u003d\"hwaddress fuzzer\u0027 make libsparse_fuzzer\nChange-Id: I54e19d399f7ea29a45734f1ddc520ceec56add09\n"
    },
    {
      "commit": "946da7c5283c1c452a92f7e9e4aac5fc3ec853b6",
      "tree": "59ffb1d5cb5b6a63986830a95ccd787ef69819a2",
      "parents": [
        "19b68a66e52bfce110f687ff0eb465363f7912bd"
      ],
      "author": {
        "name": "cfig",
        "email": "yuyezhong@gmail.com",
        "time": "Thu Aug 15 10:07:07 2019 +0800"
      },
      "committer": {
        "name": "cfig",
        "email": "yuyezhong@gmail.com",
        "time": "Thu Aug 15 14:07:51 2019 +0800"
      },
      "message": "libsparse: replace legacy min() with std::min()\n\nthis makes libsparse compile with MacOS clang++\nTest: \"libsparse\" compiles and works fine under both Linux and MacOS\n\nChange-Id: Ifcf018b856d2fe5f1dac7eeddd72de2810be66c5\n"
    },
    {
      "commit": "45b11d9035b8a8c6289e31db52d0ed840985bd2a",
      "tree": "aeb00b038d41bea65a10a6db699637e7ffcf1d01",
      "parents": [
        "6688eaf23f9126c2f100e7fe848ec5832247d2cd"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu May 02 12:54:09 2019 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu May 02 12:54:09 2019 -0700"
      },
      "message": "Fix an unintialized return value.\n\nBug: http://b/131390872\nTest: Built aosp_blueline successfully.\nChange-Id: Iea5255be280dfc089a95fc25a0f988e913c18679\n"
    },
    {
      "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"
    }
  ],
  "next": "b4cd267db30c152245e6308598e0066d87c5c55d"
}
