)]}'
{
  "log": [
    {
      "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": "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"
    }
  ]
}
