)]}'
{
  "log": [
    {
      "commit": "c6ce48ef190d74b11c265076518dcc69f6fe4665",
      "tree": "cbd6831f8dc319089889d1e6bf3bd5de8e0ca6c5",
      "parents": [
        "cb199b47955623746a021bdb91a04478b3bd3a7e"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Fri Jul 14 16:35:09 2023 -0700"
      },
      "committer": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Tue Jul 18 16:02:07 2023 -0700"
      },
      "message": "String8: fix infinite loop and segmentation fault in removeAll()\n\nBug: 290835996\nTest: libutils_fuzz_string8 for several minutes\n\nString8::removeAll() has 2 serious problems:\n\n1. When `other` is an empty string, `removeAll()` will loop infinitely\n   due to below process:\n\n   a) with `other` being empty string `\"\"`, find() will call strstr()\n      on an empty string, which always returns `mString`, and thus\n      find() always return 0 in this case\n   b) with find() returns 0 for empty string, the next while loop in\n      String8::removeAll() will keep loop infinitely as `index` will\n      always be 0\n\n   This CL fixes this problem by returning true if `other` is an empty\n   string (i.e. `strlen(other) \u003d\u003d 0`), this follows the logic that an\n   empty string will always be found and no actual remove needs to be\n   done.\n\n2. When `other` is a NULL string, strstr() has undefined behavior. See\n   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf.\n\n   This undefined behavior on Android unfortunately causes immediate\n   segmentation fault as the current `strstr` implementation in bionic\n   libc doesn\u0027t check `needle` being NULL, and an access to a NULL\n   location is performed to check if the `needle` string is an empty\n   string, and thus causes segmentation fault.\n\n   This CL gives an error message and aborts instead of having a\n   segfault, and to keep some backward compatibility.\n\n   This CL also adds test for String8::removeAll()\n\nChange-Id: Ie2ccee6767efe0fed476db4ec6072717198279e9\n"
    },
    {
      "commit": "9e25bf0136d085b1a825afeed308f2f364110c61",
      "tree": "1dbbe8b4f83f07a6d565979ac7894242b3c9f62b",
      "parents": [
        "7014fa9fa31412e6241a8dd47bce62a2ca55af68"
      ],
      "author": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Oct 21 10:26:01 2022 +0530"
      },
      "committer": {
        "name": "Biswapriyo Nath",
        "email": "nathbappai@gmail.com",
        "time": "Fri Oct 21 10:26:08 2022 +0530"
      },
      "message": "libutils: Include limits for std::numeric_limits::max\n\nThis fixes the following error:\ncore/libutils/String8.cpp:316:67: error: incomplete type \u0027std::numeric_limits\u003clong long unsigned int\u003e\u0027 used in nested name specifier\n  316 |         if (static_cast\u003csize_t\u003e(n) \u003e std::numeric_limits\u003csize_t\u003e::max() - 1 ||\n      |                                                                   ^~~\n\nChange-Id: I80cdd2442e2798c37e066e3fdeee7dd5ac34b669\n"
    },
    {
      "commit": "1a867dcb6e28956b98444209be1fa20baa41381e",
      "tree": "49f1f8ef99baaa211f5119378b9bb9965c55bc79",
      "parents": [
        "4a40c57e74f8b7b492e7eb970102959ad5061683"
      ],
      "author": {
        "name": "Andrei Homescu",
        "email": "ahomescu@google.com",
        "time": "Tue Mar 29 00:30:34 2022 +0000"
      },
      "committer": {
        "name": "Andrei Homescu",
        "email": "ahomescu@google.com",
        "time": "Tue Mar 29 00:30:34 2022 +0000"
      },
      "message": "Fix build error from signed/unsigned comparison\n\nBug: 224644083\nTest: m\nChange-Id: I9adbe1ea53193d8c59f9022754cd3e23533e54ad\n"
    },
    {
      "commit": "f34b2446bb3f111f41b44ba4e04b80f7844e69a4",
      "tree": "1f5ed460b632a4f09ce7e40905d18926ffd64cc1",
      "parents": [
        "9d712cf43f7fd3d038cb25f4263822dff8612895",
        "e9a9a4f0719f47da374713f0b7db6e01e6dd90a5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 20 20:07:22 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Tue Jul 20 20:07:22 2021 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Remove unused String8::setPathName.\"\"\" am: f9a9ee048c am: e9a9a4f071\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1771595\n\nChange-Id: I815e30f78c4a129de8186bd1b08278024fdf01d6\n"
    },
    {
      "commit": "d03851e54999c11076468d61e85d343972a99942",
      "tree": "212f2b643efb10cf454a32251471e568e9c77c29",
      "parents": [
        "70d9fb63e60392d1e3f59cc2967f3247a0645e6c"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Jul 19 20:19:44 2021 +0000"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Jul 19 20:19:44 2021 +0000"
      },
      "message": "Revert \"Revert \"Remove unused String8::setPathName.\"\"\n\nThis reverts commit 70d9fb63e60392d1e3f59cc2967f3247a0645e6c.\n\nReason for revert: Outstanding usage of this method removed internally\n\nChange-Id: Idcc00ec261aa1d97f11e47abdb08b10a37b5d20f\nTest: Local build; treehugger (which I\u0027ll manually confirm runs on the appropriate targets)\n"
    },
    {
      "commit": "2cca5cc992f115c9c8d7f34d4c15b2cec768161e",
      "tree": "e8ca46cfb0cc4896deaecdbf8ef65af1a2296416",
      "parents": [
        "a7ac81074938e91d4f5cdc29ea27a86979399dc8",
        "01f3306b69ee57471ea8582c2e39ab00efe5097c"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Thu Jul 15 13:56:01 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Jul 15 13:56:01 2021 +0000"
      },
      "message": "Merge \"Revert \"Remove unused String8::setPathName.\"\" am: 615bf4ef14 am: 01f3306b69\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1768145\n\nChange-Id: I9856b917353e57b048eeec2d3ed6d157165e1148\n"
    },
    {
      "commit": "70d9fb63e60392d1e3f59cc2967f3247a0645e6c",
      "tree": "611aa121b763ef9ed259d7b7771e91f704486d2d",
      "parents": [
        "c214426e0ce5f38aed925d24b1f3ec43aab2fd55"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Thu Jul 15 13:33:10 2021 +0000"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Thu Jul 15 13:33:10 2021 +0000"
      },
      "message": "Revert \"Remove unused String8::setPathName.\"\n\nThis reverts commit c214426e0ce5f38aed925d24b1f3ec43aab2fd55.\n\nReason for revert: This is not unused; broke build internally\n\nChange-Id: I18e8b7954256ae015ad32743fa6a75850b00913e\n"
    },
    {
      "commit": "941b1a61b0993a033bdcf10208ee8a909e08230e",
      "tree": "4d09c129c6c0013c49c1b22643b6f4708265d819",
      "parents": [
        "b63e339314029874952d778e72ec3ffa306ef14b",
        "5f7d548dc65f8a05516f4f445a135d7de7712f9c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 14 21:48:06 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Jul 14 21:48:06 2021 +0000"
      },
      "message": "Merge \"Remove unused String8::setPathName.\" am: 40a0664b84 am: 5f7d548dc6\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1765465\n\nChange-Id: If7b66e7de22107110fa595827611f1bb1a83a9dc\n"
    },
    {
      "commit": "c214426e0ce5f38aed925d24b1f3ec43aab2fd55",
      "tree": "212f2b643efb10cf454a32251471e568e9c77c29",
      "parents": [
        "a436f589ab0b23cb7f4baafe9bc2625c01961981"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 13 17:20:25 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 13 17:20:53 2021 -0700"
      },
      "message": "Remove unused String8::setPathName.\n\nTest: treehugger\nChange-Id: Idc8d7e748b0df4ce8a26227dc73a5eef2b04244f\n"
    },
    {
      "commit": "59682761fb4ea24b91292bc53cfe9fbf5e3cfc63",
      "tree": "b0908677474a373189fdca003eb4f9eee1b5cafc",
      "parents": [
        "8f654d8a99738d096e2a7bf87324a515ec0c33bc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 10 16:42:20 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 10 16:42:20 2021 -0700"
      },
      "message": "Check for overflow in String8::real_append.\n\nBug: http://b/178822418\nTest: new tests\nChange-Id: I73631a070ade0689441abe5645ba5a5f64a58675\n"
    },
    {
      "commit": "6182b330f2bdf82d5cbfef65328b03f48985b7ae",
      "tree": "2cc67d3e2fe2194e4c25a5c0be460ffeb7761f1d",
      "parents": [
        "c367736461c53afde71ae3e697d0fb0c0064e4bd",
        "906a03fc499455b6b14c7563ab2bd7c3454b1d06"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 16 17:53:46 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Apr 16 17:53:46 2021 +0000"
      },
      "message": "Merge \"Remove move dead code.\" am: acec0918e5 am: 1fc404900c am: 906a03fc49\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1677028\n\nChange-Id: I7fb50216bcf983584f664a691321683dd79ae38d\n"
    },
    {
      "commit": "4b7b4d6d7b43b42a86cb17a72df0d810f0cb4662",
      "tree": "66cc09faf0dac99462d35d70069fc6d649117b25",
      "parents": [
        "5e89a35ae39c6416157d870eab17ecb275852e63"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 15 15:18:54 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 15 15:18:54 2021 -0700"
      },
      "message": "Remove move dead code.\n\nTest: treehugger\nChange-Id: I6a23b19d078400dfe90329a49ae1abbcb24ef2bf\n"
    },
    {
      "commit": "b996f3f51204f95a7233d148afb872d059ef6479",
      "tree": "aef25a19e87afe751797f859d600234775d9573b",
      "parents": [
        "4df2859ad4a54b78a24a66605176f5d8db2e2bad",
        "334a0b1c107644c803402dff2de1f772eaae4651"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 14 19:58:02 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Wed Apr 14 19:58:02 2021 +0000"
      },
      "message": "Merge \"Remove String8::toUpper().\" am: 450f66bd8f am: ca3794ea68 am: 334a0b1c10\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1673886\n\nChange-Id: Ica526ca8cb76065e4008a8dbd494beb795ea1390\n"
    },
    {
      "commit": "9434f59c178ed8fddb96159101e8bb6d09ddf6d6",
      "tree": "f39b1157001f444ac863974b12e53e3b65fe5948",
      "parents": [
        "561209ee664eeecd3e7c291d0e88b9730bec84be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 12 13:38:31 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 12 13:38:31 2021 -0700"
      },
      "message": "Remove String8::toUpper().\n\nActually, it looks like it\u0027s only toLower() that\u0027s used, so let\u0027s remove\ntoUpper() separately, since it\u0027s so easy.\n\nTest: treehugger\nChange-Id: I8fae9fa513b2a34d5bd6b3f64e9305a1ee3c1ec4\n"
    },
    {
      "commit": "b546cf8c5c158e6c7f3cdcd3add896154e8f6c34",
      "tree": "bb83b5b1f1b05ce7e17921416504a055dbe6a0ae",
      "parents": [
        "1e0028a917f6f49f318ba39f40cfc57f299514e6",
        "685c0c9a7f7c6bf4f90ed375ba5c5a5421c531b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 12 20:35:29 2021 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Mon Apr 12 20:35:29 2021 +0000"
      },
      "message": "Merge \"Remove the weird range variants of String8::toLower() and String8::toUpper().\" am: 561209ee66 am: 7e7ff3635d am: 685c0c9a7f\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/core/+/1670567\n\nChange-Id: Iedb8ab438496e0fa3f6697fb18b060e3a1acbc89\n"
    },
    {
      "commit": "a858395f91d09ddedfaab4f3094000ac32f3d124",
      "tree": "d7117bdc107c55f024a8046388d9df4ae9d2d294",
      "parents": [
        "05a7dfa104c8eb7e2c4f0485ecc187ad6e93bb0d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 08 13:26:49 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 09 13:06:20 2021 -0700"
      },
      "message": "Remove the weird range variants of String8::toLower() and String8::toUpper().\n\nI want to remove these bad ASCII-only APIs completely, but it might be\neasier to remove the range variants first.\n\nTest: treehugger\nChange-Id: I4c11f959a7bd8e670708cc03281ea72e9c461ff7\n"
    },
    {
      "commit": "7fd5f8d2bcaf36391f0b7c10540f2171f6795d08",
      "tree": "cbde48cfbe88492ece3d90a5c0ddbc1a359ed95e",
      "parents": [
        "1bacb2c389efda4f6a946a1aa271470acb65800f",
        "a790490ec973cd1799384a367da59d0200591c0a"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Oct 05 21:00:29 2020 -0700"
      },
      "committer": {
        "name": "Xin Li",
        "email": "delphij@google.com",
        "time": "Tue Oct 06 04:30:21 2020 +0000"
      },
      "message": "DO NOT MERGE - Merge RP1A.201005.006\n\nBug: 168212094\nChange-Id: I79a7517bce1c012eac2a2a7c1c2cffc5a3516eaa\nMerged-In: Ia85067d4258bde4b875c832d6223db5dd26b8838\n"
    },
    {
      "commit": "bad50ed24f9d48d001fcedd332d59f162dc3432d",
      "tree": "1443e8741df9aa77cb6410d23f52c97df24fe96b",
      "parents": [
        "6072de17cd812daf238092695f26a552d3122f8c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 28 21:41:54 2020 +0000"
      },
      "committer": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Wed Aug 12 21:45:05 2020 +0000"
      },
      "message": "libutils: check vsnprintf error\n\nFor encoding errors, this function will return a negative value which\ncauses problems down the line. Check for an error and return. Also,\ninteger overflows are guarded.\n\nBug: 161894517\nTest: fuzzer test case\nChange-Id: Ia85067d4258bde4b875c832d6223db5dd26b8838\nMerged-In: Ia85067d4258bde4b875c832d6223db5dd26b8838\n(cherry picked from commit ee22384c54d42149491c8b9dbcda0d8c5e88eddc)\n"
    },
    {
      "commit": "0f0cb957b26b72c618f0e86846e616cc47a86cc6",
      "tree": "caaa210c6e4e928c438e9d2629f623226c98f9ca",
      "parents": [
        "dc0803037606bd5d94a0c6adb963a60120eafd5c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 28 21:41:54 2020 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 28 21:43:13 2020 +0000"
      },
      "message": "libutils: check vsnprintf error\n\nFor encoding errors, this function will return a negative value which\ncauses problems down the line. Check for an error and return. Also,\ninteger overflows are guarded.\n\nBug: 161894517\nTest: fuzzer test case\nChange-Id: Ia85067d4258bde4b875c832d6223db5dd26b8838\n"
    },
    {
      "commit": "fdbc565dd5a4ce68303dc6d9eeef2f2c9387bd0f",
      "tree": "a4a09197cc30b7036fbdd5793f640f8eca377b25",
      "parents": [
        "c8e4154d899847a32f0fb7bbf999c39c7cb0dba7"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 13 23:31:45 2020 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Jul 13 23:33:25 2020 +0000"
      },
      "message": "String8: explicit int -\u003e char cast.\n\nSince tolower/toupper take and return integer arguments, ascii chars in\nthe extended range will be converted from positive int values to\nnegative char values. In order to silence an error here, which was added\nrecently with integer sanitization here, casting explicitly.\n\nFixes: 160831549\nTest: w/ libutils_fuzz_string8\nChange-Id: Iedcd6643f95f84ce662a80e38931d918a200f508\n"
    },
    {
      "commit": "727a6dd5f533fd823d48d60f0752273aa5dd5ae0",
      "tree": "79281bd09c6d221ef5344fb80c151eb9b25de7d0",
      "parents": [
        "8c2d4d6146c85b8ac1aea58d06ccb763d0b3a4db"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Feb 10 13:56:44 2020 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Feb 10 13:56:44 2020 -0800"
      },
      "message": "String*: remove \u0027StaticLinkage\u0027 constructor\n\nUnneeded.\n\nBug: N/A\nTest: N/A\nChange-Id: I3ff473d1e2fec98e47abd8abb45dd36e0a808170\n"
    },
    {
      "commit": "0e19f3b4cc32404f25e87ff3e00d2f06982f7f68",
      "tree": "db38c9e8a5f34ae6716aaf86f37554e35f16149d",
      "parents": [
        "7e473e262dc1cc5ce09d1a1935cc9bc9b43b0e7e"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 02 18:15:03 2019 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 02 18:15:03 2019 -0700"
      },
      "message": "Remove utf32 functions.\n\nThese don\u0027t appear to be used by anything.\n\nBug: N/A\nTest: binary inspection + code inspection\nChange-Id: I6c12db26c320a66bcf6e28618c6e9f61b40d985e\n"
    },
    {
      "commit": "643268f325e2bda64248df24913f8b68c842c95a",
      "tree": "4ddf6fdaa71ad280a6df08821c15ce97955a4c64",
      "parents": [
        "f3186de123c742166ec5e61b27b61af3ef929dfb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 08 11:10:11 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 08 11:15:52 2018 -0700"
      },
      "message": "Move system/core/ off NO_ERROR.\n\nIt causes trouble for Windows, and OK already exists.\n\nBug: N/A\nTest: builds\nChange-Id: Ida22fd658b0ebb259c710ba39049b07c9e495d9c\n"
    },
    {
      "commit": "e1731a4f2e05f1abb4a45602067708851eaf1e14",
      "tree": "339c0ce3d3de7d6f5e0fb9bdada9b6210d1d470f",
      "parents": [
        "895acebe946e34d2626716c5c4d7d7f2cc28c39d"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 16 18:11:34 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 16 18:11:34 2018 -0700"
      },
      "message": "[libutils]  Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5e89ec8c42151875439d2656475a8739ab9cb7dc\n"
    },
    {
      "commit": "241b93cfd3ffadd3e8b4342d8ec869ca197fb575",
      "tree": "2ca32c49d3e9a194272d46dcd25ed267fc48d940",
      "parents": [
        "1d5b102671ba3cf5da51026328a75012d56f3b98"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Mar 06 09:11:29 2018 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Mar 06 17:44:08 2018 +0000"
      },
      "message": "libutils: Remove Static.cpp and darwin hacks.\n\nBug: N/A\nTest: in internal master, the only libraries that reference this\n  symbol are:\n./prebuilts/sdk/tools/linux/bin/split-select android::gDarwinIsReallyAnnoying\n./prebuilts/sdk/tools/linux/bin/aapt android::gDarwinIsReallyAnnoying\n./prebuilts/sdk/tools/linux/bin/aapt2 android::gDarwinIsReallyAnnoying\n./prebuilts/sdk/tools/linux/lib64/libaapt2_jni.so android::gDarwinIsReallyAnnoying\n./prebuilts/sdk/tools/linux/lib64/libaapt2_jni.so android::gDarwinIsReallyAnnoying\n+ VNDK libraries\nTest: libutils_test\n\nChange-Id: Id39e5ef6438e48fa225ba06dbb59902ca5b60f70\n"
    },
    {
      "commit": "d21cfab2446f07945b822641681e6b59c839158d",
      "tree": "c4d5392ec02f860abdf03a57f4d1124af202a34b",
      "parents": [
        "601ccfbcb75355852e5dba40ba4d169aee2331ec"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Mar 10 08:58:36 2017 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Mar 10 09:05:30 2017 -0800"
      },
      "message": "Add missing includes.\n\nIncludes are transitively imported by \u003cstring\u003e in String8.h + String16.h\nbut that include is being removed.\n\nTest: pass\nChange-Id: Ide5c011b40b4a4f031dd26ead08b5c8d5d299693\n"
    },
    {
      "commit": "22dbf3947fedf988e714a4703ddf85fc41413f90",
      "tree": "ad823e9592de58265e4740a4d1ae251bfa260348",
      "parents": [
        "6048d9db5f11045412504b533ea9a92a7df6354c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 28 15:06:51 2017 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 03 14:47:47 2017 -0800"
      },
      "message": "clean-up libutils includes\n\nmoved Foo.h as first include of Foo.cpp, and\nremoved redundant includes.\n\nMade NativeHandle non virtual.\n\n\nTest: run \u0026 compile\nBug: n/a\n\nChange-Id: I37fa746cd42c9ba23aba181f84cb6c619386406a"
    },
    {
      "commit": "502602366c3bc4c2290ad36f3827de20a11a6753",
      "tree": "c1d3f4a6f0fe8ad49de09d25a762f99281013489",
      "parents": [
        "d377004c987e0509ba4cb706aa5dc0dfd3379219",
        "7714abac6bddf3c27622730645400a474a6ad2b5"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Mon Jul 11 12:22:43 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Jul 11 12:22:43 2016 +0000"
      },
      "message": "Merge \\\"libutils/Unicode.cpp: Correct length computation and add checks for utf16-\u003eutf8\\\" into nyc-mr1-dev\nam: 7714abac6b\n\nChange-Id: I63e0299219dc1e50b31a88384fed7f3f43e9f86e\n"
    },
    {
      "commit": "c4966a363e46d2e1074d1a365e232af0dcedd6a1",
      "tree": "48a3f3120553257297f7f2d3f4a4162100531a0b",
      "parents": [
        "34ae543dc3b9c577c39eb9d7063e2f72747f5d26"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Jun 28 18:02:29 2016 +0100"
      },
      "committer": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Mon Jul 11 09:46:32 2016 +0000"
      },
      "message": "libutils/Unicode.cpp: Correct length computation and add checks for utf16-\u003eutf8\n\nInconsistent behaviour between utf16_to_utf8 and utf16_to_utf8_length\nis causing a heap overflow.\n\nCorrecting the length computation and adding bound checks to the\nconversion functions.\n\nTest: ran libutils_tests\nBug: 29250543\nChange-Id: I6115e3357141ed245c63c6eb25fc0fd0a9a7a2bb\n"
    },
    {
      "commit": "95fd5270653d9004466ab54bfc3d7f82a5014baf",
      "tree": "9031db53ed81f1156af7516ac2a89c693f7d0301",
      "parents": [
        "2773d4f96a8e9f06710e36f7c33459eeaa5cb23a"
      ],
      "author": {
        "name": "Samuel Tan",
        "email": "samueltan@google.com",
        "time": "Thu Feb 18 16:56:21 2016 -0800"
      },
      "committer": {
        "name": "Samuel Tan",
        "email": "samueltan@google.com",
        "time": "Thu Feb 18 17:04:20 2016 -0800"
      },
      "message": "libutils: remove whitespace from String8 files\n\nRemove trailing whitespace from String8 header and\ncpp files.\n\nBUG: None\nChange-Id: Ie77da3f0fbce9cdce20225ce1310cf62295179a4\n"
    },
    {
      "commit": "b5a00d6b2e9a386701cf9f3f5997837496a5aa57",
      "tree": "0b67f3ac647272a09cdaa2fa5c367e70d53a1bb0",
      "parents": [
        "0e7fb13d57d50ebf104943b2dc720a40c3fc284d",
        "e045333445ab3ebb8d602d25ed750169f135baa6"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 30 20:04:50 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 30 20:04:50 2015 +0000"
      },
      "message": "am e0453334: Merge \"system/core: remove methods returning SharedBuffer in String8, String16\"\n\n* commit \u0027e045333445ab3ebb8d602d25ed750169f135baa6\u0027:\n  system/core: remove methods returning SharedBuffer in String8, String16\n"
    },
    {
      "commit": "282efae9c3d14ca2641e5fea223cb1be204feff1",
      "tree": "4c2dfa576e743d3cf7780c017ca9757a95a2e1a2",
      "parents": [
        "fca4821e05f1d4684185b559d177ffde6937bf61"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 30 15:28:30 2015 +0100"
      },
      "committer": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 30 15:42:02 2015 +0100"
      },
      "message": "system/core: remove methods returning SharedBuffer in String8, String16\n\nTowards deprecation of SharedBuffer\n\nChange-Id: I3069837db32837bcc0f5d8f1118ccd502c9070dc\n"
    },
    {
      "commit": "f777655d85af3aefa4a1683f289da1ec67988330",
      "tree": "450c8b2064bd5a7a4e04a8bb85b784ea0f9048e2",
      "parents": [
        "64c058da2335b37b7a179fd3ffef5cbf7b5e2a25",
        "6ee734cfa029e7d2d61fe577af23c28cd831b8b6"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 23 17:58:25 2015 +0100"
      },
      "committer": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 23 17:58:25 2015 +0100"
      },
      "message": "resolved conflicts for 6ee734cf to stage-aosp-master\n\nChange-Id: Ia06c4d941d9b8828707299bb363f51fab5549897\n"
    },
    {
      "commit": "d2529f28308ba7583f4d8baaa937218d81cbe8bd",
      "tree": "08e7ec119fa22c98d69f649e7ffa05f544a7d9f0",
      "parents": [
        "1d758c90959225c76ed4d318290ad1bf11532409"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 23 16:22:59 2015 +0100"
      },
      "committer": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Wed Sep 23 16:22:59 2015 +0100"
      },
      "message": "libutils: hide SharedBuffer by moving SharedBuffer.h to the implementation directory\n\nSome methods in header files of classes using SharedBuffer need\nto be moved to the implementation files accordingly\n\nChange-Id: I891f3ace2b940ab219e4e449040bfed71c0547db\n"
    },
    {
      "commit": "64e2d8c0dc2bbe3b61fc1fa3f66ae033be727b2b",
      "tree": "cd970228d639a36b5269c00d5e36e88df95feee3",
      "parents": [
        "d1af60186bea73f93f776db5c2858f2ef5d76f13",
        "219a006f89a5448a9a6eeb1f37ad0088e85bd3f8"
      ],
      "author": {
        "name": "Abhishek Arya",
        "email": "aarya@google.com",
        "time": "Fri Aug 21 07:12:31 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 21 07:12:31 2015 +0000"
      },
      "message": "am 219a006f: am fc5fdc85: am e45d96d6: am 19398a71: am d34846b7: am cd407a17: am e0dce90b: Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n\n* commit \u0027219a006f89a5448a9a6eeb1f37ad0088e85bd3f8\u0027:\n  Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n"
    },
    {
      "commit": "fc5fdc85683f87c42d5ce7bcee4e2b70ef0acdd0",
      "tree": "3d4eca4cf77a226c9a64ae1da60524f6c9a6f4eb",
      "parents": [
        "93f106b8d0207ce685ad56704df8a568f3edebb6",
        "e45d96d6bf592f0ae20bb021ea529acc94e0cb55"
      ],
      "author": {
        "name": "Abhishek Arya",
        "email": "aarya@google.com",
        "time": "Fri Aug 21 06:54:21 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 21 06:54:21 2015 +0000"
      },
      "message": "am e45d96d6: am 19398a71: am d34846b7: am cd407a17: am e0dce90b: Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n\n* commit \u0027e45d96d6bf592f0ae20bb021ea529acc94e0cb55\u0027:\n  Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n"
    },
    {
      "commit": "d34846b70b7f6eb167722d45e0c717fa64116e90",
      "tree": "ecb040af135ffb1b31197a77489db38c7aecf6b9",
      "parents": [
        "e67b584869eea8d4e955e82de1e38ede080a2ed4",
        "cd407a17fe326f3e18866ddddb1c747b06a45fc0"
      ],
      "author": {
        "name": "Abhishek Arya",
        "email": "aarya@google.com",
        "time": "Fri Aug 21 06:23:50 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 21 06:23:50 2015 +0000"
      },
      "message": "am cd407a17: am e0dce90b: Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n\n* commit \u0027cd407a17fe326f3e18866ddddb1c747b06a45fc0\u0027:\n  Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n"
    },
    {
      "commit": "e0dce90b0de2b2b7c2baae8035f810a55526effb",
      "tree": "d26c2ec6eedc516710d75ec3304d54b3df3a00ed",
      "parents": [
        "5b85b1d40d619c2064d321364f212ebfeb6ba185"
      ],
      "author": {
        "name": "Abhishek Arya",
        "email": "aarya@google.com",
        "time": "Thu Aug 20 17:38:16 2015 -0700"
      },
      "committer": {
        "name": "Abhishek Arya",
        "email": "aarya@google.com",
        "time": "Thu Aug 20 21:55:55 2015 -0700"
      },
      "message": "Fix compile failure after rIfe1dc0791040150132bea6884f1e6c8d31972d1b\n\nBug: 23290056\nChange-Id: If6e22b0159de6635a8ca5305895b7718f15becc7\n"
    },
    {
      "commit": "93f106b8d0207ce685ad56704df8a568f3edebb6",
      "tree": "9e49719e942355ecb6a1e46e73d4a291ce4edf19",
      "parents": [
        "87b02f23c0996ab487ef15794bf862b3cd3e5137",
        "e97682be0634fe773f70097bc518e5d034efe8f7"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Thu Aug 20 22:58:19 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 20 22:58:19 2015 +0000"
      },
      "message": "am e97682be: am a1a22b57: am e67b5848: am 4956c0fe: am 5b85b1d4: libutils: fix overflow in String8::allocFromUTF8\n\n* commit \u0027e97682be0634fe773f70097bc518e5d034efe8f7\u0027:\n  libutils: fix overflow in String8::allocFromUTF8\n"
    },
    {
      "commit": "e67b584869eea8d4e955e82de1e38ede080a2ed4",
      "tree": "a687aebb5a6a03eaf291ae5f25d6ea4d46332dab",
      "parents": [
        "058ad0b6612457c54c7ad6e3b5d5a618d94ae966",
        "4956c0fe1e582a8497aff34a41aeb8bf4748eef0"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Thu Aug 20 22:28:53 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Aug 20 22:28:53 2015 +0000"
      },
      "message": "am 4956c0fe: am 5b85b1d4: libutils: fix overflow in String8::allocFromUTF8\n\n* commit \u00274956c0fe1e582a8497aff34a41aeb8bf4748eef0\u0027:\n  libutils: fix overflow in String8::allocFromUTF8\n"
    },
    {
      "commit": "5b85b1d40d619c2064d321364f212ebfeb6ba185",
      "tree": "d06789741c03944ee138c185a1f79fc79ad07c17",
      "parents": [
        "9bd7afc0a1de9589c13355178b6edc709bd0bddf"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 14:44:54 2015 +0100"
      },
      "committer": {
        "name": "Jon Larimer",
        "email": "jlarimer@google.com",
        "time": "Tue Aug 18 20:52:25 2015 +0000"
      },
      "message": "libutils: fix overflow in String8::allocFromUTF8\n\nPatch contributed in:\nhttps://code.google.com/p/android/issues/detail?id\u003d182908\n\nBug: 23290056\n\n(cherry picked from commit 4eeacbeec0ae66e9d9395abbf83666709f2e11e3)\n\nChange-Id: Ife1dc0791040150132bea6884f1e6c8d31972d1b\n(cherry picked from commit ebabef275283f771151ec93c17469374b789b2c8)\n"
    },
    {
      "commit": "ba71601aacb3846d7c83cfc89fff689e1b774c54",
      "tree": "f49ba9db4447777b801a2620fb40ad42229502ce",
      "parents": [
        "8e9a1ae5936d2bfae23dc0f7414a68973a894209",
        "29c1275519ef85fa3f30be351f19dc6e7eedbee9"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 17:19:10 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 18 17:19:10 2015 +0000"
      },
      "message": "am 29c12755: Merge \"libutils: fix overflow in String8::allocFromUTF8\" into mnc-dev\n\n* commit \u002729c1275519ef85fa3f30be351f19dc6e7eedbee9\u0027:\n  libutils: fix overflow in String8::allocFromUTF8\n"
    },
    {
      "commit": "ebabef275283f771151ec93c17469374b789b2c8",
      "tree": "bfd80fa501af3c1e894a4c9d76ae5d246dd2473e",
      "parents": [
        "8104616696ac5e806b16a393ea02c4f5d8efc328"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 14:44:54 2015 +0100"
      },
      "committer": {
        "name": "]",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 18:06:38 2015 +0100"
      },
      "message": "libutils: fix overflow in String8::allocFromUTF8\n\nPatch contributed in:\nhttps://code.google.com/p/android/issues/detail?id\u003d182908\n\nBug: 23290056\n\n(cherry picked from commit 4eeacbeec0ae66e9d9395abbf83666709f2e11e3)\n\nChange-Id: Ife1dc0791040150132bea6884f1e6c8d31972d1b\n"
    },
    {
      "commit": "4eeacbeec0ae66e9d9395abbf83666709f2e11e3",
      "tree": "54b71bd364e6d2fe716267d893425011bdd924ad",
      "parents": [
        "516d30d5029c101ef32b600d3143513d3ce16933"
      ],
      "author": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 14:44:54 2015 +0100"
      },
      "committer": {
        "name": "Sergio Giro",
        "email": "sgiro@google.com",
        "time": "Tue Aug 18 14:44:54 2015 +0100"
      },
      "message": "libutils: fix overflow in String8::allocFromUTF8\n\nPatch contributed in:\nhttps://code.google.com/p/android/issues/detail?id\u003d182908\n\nBug: 23290056\nChange-Id: Ide0e9a8acc4e95a9104bab3ae803aa3a40098222\n"
    },
    {
      "commit": "1f8bc86a7d1c49cd666c5f80d1507e6351a65aa0",
      "tree": "faecdb6502d78ddbb476d793e3287347f77780cb",
      "parents": [
        "c0e8d0fc50dc635c6723497900cf3b0d2eb572dc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 14:02:29 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 14:31:54 2015 -0700"
      },
      "message": "Move libutils off AndroidConfig.h.\n\nChange-Id: Ia0e4a4f968c640eb44317821d2dc6b195f9f490e\n"
    },
    {
      "commit": "dd060f01f68ee0e633e9cae24c4e565cda2032bd",
      "tree": "cbabc21db45e5f92172acd1ab582d5d9e7bfe96a",
      "parents": [
        "b0a10b53eeeef6428bd034e3097391e9a7a4788b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 15:50:17 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 13 15:50:17 2014 -0800"
      },
      "message": "System/core: Use memmove\n\nShould use memmove when you expect overlap.\n\nChange-Id: I268a173db40a4be54232958e37aa8a03c2a885ee\n"
    },
    {
      "commit": "5ee915afe17b7190f992addc48cb53ed6371a68d",
      "tree": "b9d17977eac672201411fbb01c17bc4f16464aa5",
      "parents": [
        "45e2756409bee6b766fd965bd945f9d42789fb33"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 06 19:30:15 2014 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 09 14:02:52 2014 -0700"
      },
      "message": "Add a couple of useful string functions.\n\nChange-Id: I158f69917bab5f15482dd8f2b66b36a4cc0f11ad\n"
    },
    {
      "commit": "5bed8036644f552210a7cfcbed2d6d20cf2981b0",
      "tree": "37f784e181086e99b17e00d46b6da30529751539",
      "parents": [
        "bf0f25905b12581f05b65b1ebe95211c727ae483"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 30 11:10:46 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 02 15:57:50 2014 -0700"
      },
      "message": "libutils: turn on -Werror\n\n- Deal with some -Wunused issues\n- Override PRI macros (windows)\n- Revert use of PRI macros on off64_t (linux)\n- Deal with a gnu++11 complaince issue\n\nChange-Id: Ie66751293bd84477a5a6dfd8a57e700a16e36964\n"
    },
    {
      "commit": "fff9d11be528ad8f581cc7223b879c55009d7396",
      "tree": "9ca229a0254dcd2c76a3e4cb5721e410e5d3cb63",
      "parents": [
        "ebb46d76e4bf4ee4f34b42709ea69cce07e3e322"
      ],
      "author": {
        "name": "Fengwei Yin",
        "email": "fengwei.yin@intel.com",
        "time": "Thu Feb 27 01:17:09 2014 +0800"
      },
      "committer": {
        "name": "Fengwei Yin",
        "email": "fengwei.yin@intel.com",
        "time": "Thu Feb 27 01:17:09 2014 +0800"
      },
      "message": "Fix undefined args access for x86_64.\n\nFrom libc manual for vsnprintf:\n   The  functions  vprintf(),  vfprintf(), vsprintf(), vsnprintf()\n   are equivalent to the functions printf(), fprintf(), sprintf(), snprintf(),\n   respectively, except that they are called with a va_list instead of a\n   variable number of arguments.  These  functions  do  not  call  the  va_end  macro.\n   Because they invoke the va_arg macro, the value of ap is undefined after the call.\n\nWe need to allocate/end new va_list for each vsnprintf.\n\nChange-Id: I66ec058033be1cb918e7b2bc84ca546800da226b\nSigned-off-by: Fengwei Yin \u003cfengwei.yin@intel.com\u003e\n"
    },
    {
      "commit": "d98e07fdf9c338589f263c47ce5c844ed43efad5",
      "tree": "d4ff9849df225df1e4c46386fdabe30407ba5513",
      "parents": [
        "be06210c508d5878dcc7d185e5613f4c7e38dfe8"
      ],
      "author": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "message": "move libs/utils to libutils\n\nChange-Id: I6cf4268599460791414882f91eeb88a992fbd29d\n"
    },
    {
      "commit": "4485d0d966d062d1b45b635e2447a2d2f96c3f38",
      "tree": "89a0c95a7a27261e626dbedfd3fcacff01e41b20",
      "parents": [
        "9eb2a3b1c0cc1ff3082a9283e24c8babc112f56b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 08 16:04:13 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "new String8, String16 ctors to initialize empty static strings with static linkage\n\nwhen libutils is statically linked, the ordering of the static\ninitializer is not guaranteed and therefore it\u0027s unsafe to use\nempty static strings: e.g.:\n\nstatic String8 sThisStaticStringIsNotSafe;\n\ninstead, this new constructor can be used:\n\nstatic String8 sThisStaticStringIsSafe(kEmptyString);\n\nChange-Id: Ia3daf1cab1c97d021c0ee9c2b394b5e27e8d6c0d\n"
    },
    {
      "commit": "9eb2a3b1c0cc1ff3082a9283e24c8babc112f56b",
      "tree": "f88a03d8dd28a8f641be1c2eac57a42f0a11e599",
      "parents": [
        "19159f90020c04ac2f4dcb39424d740f765ed9a3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 06 20:20:50 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "libutils clean-up\n\nChange-Id: I6ff4cfc736751de2912c697f954e45e275f2d386\n"
    },
    {
      "commit": "d9ad7d8d73918d44d41811e9b4d0cc722dae338d",
      "tree": "6496c8bd64f266990f222d8ed20efc3690e6ba4f",
      "parents": [
        "00c14b4be46bf08cc0a351663e247690f59acfa8"
      ],
      "author": {
        "name": "Todd Poynor",
        "email": "toddpoynor@google.com",
        "time": "Thu May 02 15:41:35 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "String8: ensure static init done prior to empty string reference\n\nAvoid NULL deref on static initialization of empty String8 objects prior\nto libutils static init.\n\nChange-Id: I3d420041ba62b97ed8c2dfd2532a2dcd72b84ff1\n"
    },
    {
      "commit": "ae07445e9793724324b93bb593fe20be2a386707",
      "tree": "21b2375319af1a9810b23628351d8d6863de837c",
      "parents": [
        "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 18:35:44 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename LOG_ASSERT to ALOG_ASSERT  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157519\n\nBug: 5449033\nChange-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3\n"
    },
    {
      "commit": "1d618d63c1bb99728b5b0afe320f5a6afa95436c",
      "tree": "063d271af206fc8f3e098fe77aea64e96c045b62",
      "parents": [
        "04cbbc1c47c68e805d2674d9fc702fc44385805f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    },
    {
      "commit": "647925ddf053989b641b4c5c8a51efd55c931f22",
      "tree": "3747458d4bf0306bea06b3910ef24a38c9fd78e5",
      "parents": [
        "ba0165bef09729a33ab8e0ca329342be05e0d859"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:03:06 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Added support for full PC-style keyboards.\n\nBREAKING CHANGE: Redesigned the key character map format to\naccomodate full keyboards with more comprehensive suite of modifiers.\nOld key character maps will not work anymore and must be updated.\nThe new format is plain text only and it not compiled to a binary\nfile (so the \"kcm\" tool will be removed in a subsequent check-in).\n\nAdded FULL keyboard type to support full PC-style keyboards.\n\nAdded SPECIAL_FUNCTION keyboard type to support special function\nkeypads that do not have any printable keys suitable for typing\nand only have keys like HOME and POWER\n\nAdded a special VIRTUAL_KEYBOARD device id convention that maps\nto a virtual keyboard with a fixed known layout.  This is designed\nto work around issues injecting input events on devices whose\nbuilt-in keyboard does not have a useful key character map (ie.\nwhen the built-in keyboard is a special function keyboard only.)\n\nModified several places where events were being synthesized\nto use the virtual keyboard.\n\nRemoved support for the \"qwerty\" default layout.\nThe new default layout is \"Generic\".  For the most part \"qwerty\"\nwas being used as a backstop in case the built-in keyboard did\nnot have a key character map (probably because it was a special\nfunction keypad) and the framework needed to be able to inject\nkey events anyways.  The latter issue is resolved by using the\nspecial VIRTUAL_KEYBOARD device instead of BUILT_IN_KEYBOARD.\n\nAdded the concept of a key modifier behavior so that\nMetaKeyKeyListener can distinguish between keyboards that use\nchorded vs. toggled modifiers.\n\nWrote more robust key layout and key character map parsers\nto enable support for new keyboard features and user installable\nkey maps.\n\nFixed a bug in InputReader generating key ups when keys\nare released out of sequence.\n\nUpdated tons of documentation.\n\nCurrently QwertyKeyListener is being used for full keyboards\nwith autotext and capitalization disabled.  This mostly works\nbut causes some problems with character pickers, etc.\nThese issues will be resolved in subsequent changes.\n\nChange-Id: Ica48f6097a551141c215bc0d2c6f7b3fb634d354\n"
    },
    {
      "commit": "ba0165bef09729a33ab8e0ca329342be05e0d859",
      "tree": "2f961146c3c8c625a01902207485fed0d7a2cdcd",
      "parents": [
        "3a91fca00c6b3db62b4dc0da95ba30671caf3283"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 09 14:37:23 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Split UTF functions from String8/16\n\nSplit out all the UTF-8/16/32 handling code from String8/16 to its own\nfile to allow better reuse of code.\n\nChange-Id: If9ce63920edc75472c38da4adce0d13cda9ad2f7\n"
    },
    {
      "commit": "48da31b735ebbc6a00c4e9fe9631f4af79e2c9df",
      "tree": "9ca0eb140cb6a3a701672804a43324efed9df315",
      "parents": [
        "929e4ef26a7920dd6f3593f60d45a59ffeaedb14"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:55:08 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Add keycodes and meta-key modifiers to support external keyboards.\n\nAdded new key maps for external keyboards.  These maps are intended to\nbe shared across devices by inheriting the \"keyboards.mk\" product\nmakefile as part of the device\u0027s product definition.\n\nOne of the trickier changes here was to unwind some code in\nMetaKeyKeyListener that assumed that only the low 8 bits of the meta key\nstate were actually used.  The new code abandons bitshifts in favor\nof simple conditionals that are probably easier to read anyways.\nThe special meta key state constants used by MetaKeyKeyListener\nare now (@hide) defined in KeyEvent now so as to make it clearer that they\nshare the same code space even if those codes are not valid for KeyEvents.\n\nThe EventHub now takes care of detecting the appropriate key layout\nmap and key character map when the device is added and sets system\nproperties accordingly.  This avoids having duplicate code in\nKeyCharacterMap to probe for the appropriate key character map\nalthough the current probing mechanism has been preserved for legacy\nreasons just in case.\n\nAdded support for tracking caps lock, num lock and scroll lock and\nturning their corresponding LEDs on and off as needed.\n\nThe key character map format will need to be updated to correctly support\nPC style external keyboard semantics related to modifier keys.\nThat will come in a later change so caps lock doesn\u0027t actually do\nanything right now except turn the shiny LEDs on and off...\n\nAdded a list of symbolic key names to KeyEvent and improved the toString()\noutput for debug diagnosis.  Having this list in a central place in the\nframework also allows us to remove it from Monkey so there is one less\nthing to maintain when we add new keycodes.\n\nBug: 2912307\nChange-Id: If8c25e8d50a7c29bbf5d663c94284f5f86de5da4\n"
    },
    {
      "commit": "35a154e57f2f59722de580395ccd5172e44842cb",
      "tree": "d78717e998118006bf4fd0d4a2925de0ae375252",
      "parents": [
        "9f43945b7cba2698500c1f4adb17492c5e70ee86"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 15 23:54:05 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Fix bug with phantom input windows.\n\nAdd dumpsys integration for the native input dispatcher.\nAdd some InputDevice API stubs.\nAdd an appendFormat helper method to String8 for printf style\nstring formatting mainly for debugging purposes.\nUse generic ArrayList\u003cWindowState\u003e everywhere in WindowManagerService\nto eliminate unnecessary casts all over.\n\nChange-Id: I9d1e3bd90eb7222d10620200477f11b7bfd25e44\n"
    },
    {
      "commit": "10e5da58e4c22f2262f7ec7f82745d9673bed14b",
      "tree": "b21495cf78e3c530607c9b9235577d27676eeb12",
      "parents": [
        "ad4f2e59af9fe207056099dc002eb80cacbc0f4f"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jun 10 11:14:26 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:53 2013 -0700"
      },
      "message": "Fix String8 to free its memory only after assignment operations based on pointers are finished in case that pointer referred to the string\u0027s original contents.\n\nChange-Id: I6961f3cf10ba3b728579ea63262db750a4cf8577\n"
    },
    {
      "commit": "88753ae9d8f5432590df5e5338e0906834124c1d",
      "tree": "c1b9585cd1fc3d2bd802f0fb111c74043d049545",
      "parents": [
        "88e49600255db6060e56f8633a79fcb24439b109"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu May 06 00:55:09 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:53 2013 -0700"
      },
      "message": "Make static versions of libutils and libbinder.\n\nFix some small static-initialization-order issues (and a static-\ninitializers-missing issue) that result from doing so.  The static\nlibraries don\u0027t actually get used for anything real at the moment --\nthey\u0027re used for perf tests of bug 2660235.\n\nBug: 2660235\nChange-Id: Iee2f38f79cc93b395e8d0a5a144ed92461f5ada0\n"
    },
    {
      "commit": "9a2d83e698b16ec86ad2751b6e7cf103ad645cce",
      "tree": "14c45647a106931bd544d517112a1cd7e7f67754",
      "parents": [
        "09b41cbf9fe74a831c0ad883406e03dfe0568d78"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Dec 04 09:38:48 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:52 2013 -0700"
      },
      "message": "Optional use of UTF-8 strings in resource bundles\n\nAllows the use of UTF-8 for packing resources instead of the\ndefault of UTF-16 for Java. When strings are extracted from the\nResStringPool, they are converted to UTF-16 and the result is\ncached for subsequent calls.\n\nWhen using aapt to package, add in the \"-8\" switch to pack the\nresources using UTF-8. This will result in the value, key, and\ntype strings as well as the compiled XML string values taking\nsignificantly less space in the final application package in\nmost scenarios.\n\nChange-Id: I129483f8b3d3b1c5869dced05cb525e494a6c83a\n"
    },
    {
      "commit": "56d6326a0ef3a98dbdac5de540aebf569c0bca34",
      "tree": "79df30f1c73e2c503c027036c75ccd6c38720154",
      "parents": [
        "44dad3e006e0a966d93473dde3d74b2b43555519"
      ],
      "author": {
        "name": "Daisuke Miyakawa",
        "email": "dmiyakawa@google.com",
        "time": "Thu Jul 09 13:05:24 2009 +0900"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:51 2013 -0700"
      },
      "message": "quick fix; utf8_codepoint_count must be utf8_length\n"
    },
    {
      "commit": "44dad3e006e0a966d93473dde3d74b2b43555519",
      "tree": "2cfd75846acda8be5d0038902102e8b41ed87569",
      "parents": [
        "34ed82706a56c94993efa2b679ff1520e5db5bb7"
      ],
      "author": {
        "name": "Daisuke Miyakawa",
        "email": "dmiyakawa@google.com",
        "time": "Tue Jun 30 20:40:42 2009 +0900"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:51 2013 -0700"
      },
      "message": "Add useful functions to String8, which enables users to convert between UTF-8 and UTF-32\nIt will be used in SQL functions in external/sqlite/android.\nSee https://android-git.corp.google.com/g/Gerrit#change,5511 for example.\n\nRelated internal bug id: 1707173\n"
    },
    {
      "commit": "cbb1011c95e0c25c29e40e203a6a31bccd029da3",
      "tree": "4697a3a86867bf33c2d9dd4e4a2743d3eb947523",
      "parents": [
        "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0",
      "tree": "e780750523e4f032abf902a0e6ff8b9d52c54e54",
      "parents": [
        "7aa707a5d654b7af67b133955c454c8e23a12abc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "60dcc00861a1810deea7b31968578010556d4f3a",
      "tree": "2d5fd61c02fc1eec709437d979483869ad9d9f34",
      "parents": [
        "13e4bed7dbfc5d785f774539021cf428ca851601"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //branches/cupcake/...@130745\n"
    },
    {
      "commit": "d245d1d09731d6a19e8a25559d3907f54441ac3d",
      "tree": "b79df48666f286bd33efb4ffdbf4b3fa28f5dd91",
      "parents": [
        "13f4c9fb279f1b34a3b47a6eac80b8a09d2d3a79"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:46 2013 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
