| /* | |
| * Copyright 2015, Intel Corporation | |
| * Copyright (C) 2015 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| * | |
| * Written by William Roberts <william.c.roberts@intel.com> | |
| * | |
| * This is a parser library for parsing the packages.list file generated | |
| * by PackageManager service. | |
| * | |
| * This simple parser is sensitive to format changes in | |
| * frameworks/base/services/core/java/com/android/server/pm/Settings.java | |
| * A dependency note has been added to that file to correct | |
| * this parser. | |
| */ | |
| #ifndef PACKAGELISTPARSER_H_ | |
| #define PACKAGELISTPARSER_H_ | |
| #include <stdbool.h> | |
| #include <sys/cdefs.h> | |
| #include <sys/types.h> | |
| __BEGIN_DECLS | |
| /** The file containing the list of installed packages on the system */ | |
| #define PACKAGES_LIST_FILE "/data/system/packages.list" | |
| typedef struct pkg_info pkg_info; | |
| typedef struct gid_list gid_list; | |
| struct gid_list { | |
| size_t cnt; | |
| gid_t *gids; | |
| }; | |
| struct pkg_info { | |
| char *name; | |
| uid_t uid; | |
| bool debuggable; | |
| char *data_dir; | |
| char *seinfo; | |
| gid_list gids; | |
| void *private_data; | |
| bool profileable_from_shell; | |
| }; | |
| /** | |
| * Callback function to be used by packagelist_parse() routine. | |
| * @param info | |
| * The parsed package information | |
| * @param userdata | |
| * The supplied userdata pointer to packagelist_parse() | |
| * @return | |
| * true to keep processing, false to stop. | |
| */ | |
| typedef bool (*pfn_on_package)(pkg_info *info, void *userdata); | |
| /** | |
| * Parses the file specified by PACKAGES_LIST_FILE and invokes the callback on | |
| * each entry found. Once the callback is invoked, ownership of the pkg_info pointer | |
| * is passed to the callback routine, thus they are required to perform any cleanup | |
| * desired. | |
| * @param callback | |
| * The callback function called on each parsed line of the packages list. | |
| * @param userdata | |
| * An optional userdata supplied pointer to pass to the callback function. | |
| * @return | |
| * true on success false on failure. | |
| */ | |
| extern bool packagelist_parse(pfn_on_package callback, void *userdata); | |
| /** | |
| * Frees a pkg_info structure. | |
| * @param info | |
| * The struct to free | |
| */ | |
| extern void packagelist_free(pkg_info *info); | |
| __END_DECLS | |
| #endif /* PACKAGELISTPARSER_H_ */ |