From d7104bca65c17cc9b89cf547727778ceb4b7e8bf Mon Sep 17 00:00:00 2001 From: William Roberts Date: Mon, 11 Apr 2016 21:17:12 -0700 Subject: [PATCH] fs_config: android_id header generator Implement an android_id generator that takes the data acquired from parsing private/android_filesystem_config.h and generates the android_id friendly name to uid mapping for consumption in Bionic. Test: That ls, ps, mkdir, chown, chgrp and services for built in names work. Change-Id: I1e55a401be0fca0ad162f8dc1e072e6afde7b927 Signed-off-by: William Roberts --- tools/fs_config/fs_config_generator.py | 57 +++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/tools/fs_config/fs_config_generator.py b/tools/fs_config/fs_config_generator.py index f995546b12..0b5e8d534d 100755 --- a/tools/fs_config/fs_config_generator.py +++ b/tools/fs_config/fs_config_generator.py @@ -16,6 +16,9 @@ import re import sys import textwrap +# Keep the tool in one file to make it easy to run. +# pylint: disable=too-many-lines + # Lowercase generator used to be inline with @staticmethod. class generator(object): # pylint: disable=invalid-name @@ -360,7 +363,7 @@ class AIDHeaderParser(object): Returns: A list of AID() objects. """ - return self._aid_name_to_value.values() + return self._aid_name_to_value @staticmethod def _convert_lst_to_tup(name, lst): @@ -942,6 +945,58 @@ class FSConfigGen(BaseGenerator): print FSConfigGen._CLOSE_FILE_STRUCT +@generator('aidarray') +class AIDArrayGen(BaseGenerator): + """Generates the android_id static array.""" + + _GENERATED = ('/*\n' + ' * THIS IS AN AUTOGENERATED FILE! DO NOT MODIFY!\n' + ' */') + + _INCLUDE = '#include ' + + _STRUCT_FS_CONFIG = textwrap.dedent(""" + struct android_id_info { + const char *name; + unsigned aid; + };""") + + _OPEN_ID_ARRAY = 'static const struct android_id_info android_ids[] = {' + + _ID_ENTRY = ' { "%s", %s },' + + _CLOSE_FILE_STRUCT = '};' + + _COUNT = ('#define android_id_count \\\n' + ' (sizeof(android_ids) / sizeof(android_ids[0]))') + + def add_opts(self, opt_group): + + opt_group.add_argument( + 'hdrfile', help='The android_filesystem_config.h' + 'file to parse') + + def __call__(self, args): + + hdr = AIDHeaderParser(args['hdrfile']) + + print AIDArrayGen._GENERATED + print + print AIDArrayGen._INCLUDE + print + print AIDArrayGen._STRUCT_FS_CONFIG + print + print AIDArrayGen._OPEN_ID_ARRAY + + for name, aid in hdr.aids.iteritems(): + print AIDArrayGen._ID_ENTRY % (name, aid.identifier) + + print AIDArrayGen._CLOSE_FILE_STRUCT + print + print AIDArrayGen._COUNT + print + + def main(): """Main entry point for execution."""