diff options
| author | Siluxsept <ronny.horn.rh@gmail.com> | 2025-06-12 12:09:15 +0200 |
|---|---|---|
| committer | Siluxsept <ronny.horn.rh@gmail.com> | 2025-06-23 16:50:07 +0200 |
| commit | e47e498746a27d648d9e234d73d231ed183ceef6 (patch) | |
| tree | 8a6e02262849352f0f7aaff44b1476532e936119 | |
| parent | 453a24c42edff77cb80b83d6dcea323e0871a157 (diff) | |
B4S4: prepare for V15.0
*from https://github.com/LineageOS/android_device_google_bonito
Change-Id: I14999570374feadb1eea75eead33c2ff07860097
113 files changed, 325 insertions, 13815 deletions
@@ -2,7 +2,6 @@ soong_namespace { imports: [ "hardware/google/interfaces", "hardware/google/pixel", - "hardware/qcom/bootctrl", ], } diff --git a/Android.mk b/Android.mk deleted file mode 100644 index 46e75c8c..00000000 --- a/Android.mk +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright 2017 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. -# - -LOCAL_PATH := $(call my-dir) - -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,default-permissions.xml,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,libnfc-nci.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,fstab.postinstall,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,ueventd.rc,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,wpa_supplicant.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,hals.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,media_profiles_V1_0.xml,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,media_codecs_performance.xml,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,device_state_configuration.xml,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,task_profiles.json,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,p2p_supplicant.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,wpa_supplicant.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) -$(eval $(call declare-copy-files-license-metadata,device/google/bonito,wpa_supplicant_overlay.conf,SPDX-license-identifier-Apache-2.0,notice,build/soong/licenses/LICENSE,)) - -$(eval $(call declare-1p-copy-files,device/google/bonito,audio_policy_configuration.xml)) - -ifeq ($(USES_DEVICE_GOOGLE_B4S4),true) - subdir_makefiles=$(call first-makefiles-under,$(LOCAL_PATH)) - $(foreach mk,$(subdir_makefiles),$(info including $(mk) ...)$(eval include $(mk))) -endif diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 62790363..22835a69 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -37,8 +37,6 @@ TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a75 TARGET_BOARD_COMMON_PATH := device/google/bonito/sdm710 -BUILD_BROKEN_DUP_RULES := true - BOARD_KERNEL_CMDLINE += console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on BOARD_KERNEL_CMDLINE += msm_rtb.filter=0x237 BOARD_KERNEL_CMDLINE += ehci-hcd.park=3 @@ -91,7 +89,7 @@ TARGET_RECOVERY_WIPE := device/google/bonito/recovery.wipe TARGET_RECOVERY_FSTAB := device/google/bonito/fstab.hardware TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888 TARGET_RECOVERY_UI_LIB := \ - librecovery_ui_pixel \ + //hardware/google/pixel/recovery:librecovery_ui_pixel \ libfstab # system.img @@ -146,11 +144,7 @@ TARGET_NO_RPC := true BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE := default BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET := true -# RenderScript -OVERRIDE_RS_DRIVER := libRSDriver_adreno.so - # Sensors -USE_SENSOR_MULTI_HAL := true TARGET_SUPPORT_DIRECT_REPORT := true # Enable sensor Version V_2 USE_SENSOR_HAL_VER := 2.0 diff --git a/BoardConfigLineage.mk b/BoardConfigLineage.mk index 61d03f4b..4213dafa 100644 --- a/BoardConfigLineage.mk +++ b/BoardConfigLineage.mk @@ -4,8 +4,6 @@ # SPDX-License-Identifier: Apache-2.0 # -BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true - # Kernel BOARD_KERNEL_IMAGE_NAME := Image.lz4 TARGET_COMPILE_WITH_MSM_KERNEL := true @@ -31,7 +29,7 @@ BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4 # Reserve space for gapps install -include vendor/aicp/config/BoardConfigReservedSize.mk ifneq ($(WITH_GMS),true) -BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 1069547520 +BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 1048576000 endif # SELinux diff --git a/CleanSpec.mk b/CleanSpec.mk deleted file mode 100644 index a532eb87..00000000 --- a/CleanSpec.mk +++ /dev/null @@ -1,209 +0,0 @@ -# Copyright 2017 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. -# - -# If you don't need to do a full clean build but would like to touch -# a file or delete some intermediate files, add a clean step to the end -# of the list. These steps will only be run once, if they haven't been -# run before. -# -# E.g.: -# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) -# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) -# -# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with -# files that are missing or have been moved. -# -# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. -# Use $(OUT_DIR) to refer to the "out" directory. -# -# If you need to re-do something that's already mentioned, just copy -# the command and add it to the bottom of the list. E.g., if a change -# that you made last week required touching a file and a change you -# made today requires touching the same file, just copy the old -# touch step and add it to the end of the list. -# -# ************************************************ -# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST -# ************************************************ - -# For example: -#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) -#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) -#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) -#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) - -$(call add-clean-step, rm -rf $(PRODUCT_OUT)) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor) - -# Remove /system/lib[64]/vndk-sp/libz.so -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/vndk-sp/libz.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib64/vndk-sp/libz.so) - -# Remove Power HAL 1.2 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.2-service.bonito-libperfmgr.rc) - -# Remove Vibrator HAL 1.1 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.vibrator@1.1-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.vibrator@1.1-service.bonito) - -# Remove /product mount point -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product) - -# Remove android.hardware.audio*@2.0 implementation -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/android.hardware.audio*@2.0-impl.so) - -# Adds product.img -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr) - -# Remove default android.hardware.health@2.0-service -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.health@2.0-service) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.health@2.0-service.rc) - -# Remove healthd -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/bin/healthd) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/init/healthd.rc) - -# Remove KM3 RC -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.keymaster@3.0-service-qti.rc) - -# Remove Codec2.0 software process -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/hw/hardware.google.media.c2@1.0-service-software) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/hardware.google.media.c2@1.0-service-software.rc) - -# Remove default android.hardware.graphics.composer@2.1 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.graphics.composer@2.1-service) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.graphics.composer@2.1-service.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.composer@2.1-impl.so) - -# Remove StrongBox RC -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.keymaster@4.1-service.citadel.rc) - -# Migrate to versioned VNDK directory -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/vndk-sp) - -# Remove non-qti-display mapper (b/79269048) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/android.hardware.graphics.allocator@2.0-impl.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.allocator@2.0-impl.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.graphics.allocator@2.0-service) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.graphics.allocator@2.0-service.rc) - -#AU300 cleanup -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/include) - -# Secure_element HAL for eSE1 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.secure_element@1.0-service.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.secure_element@1.0-service) - -# Remove VR related files -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/thermal-engine-sargo-vr.conf) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/thermal-engine-bonito-vr.conf) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.vr@1.0-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/permissions/android.hardware.vr.headtracking.xml) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/permissions/android.hardware.vr.high_performance.xml) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.vr@1.0-service.bonito) - -# Remove /product mount point -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product) - -# Remove init.environ.rc to force product to be recreated on other devices -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/init.environ.rc) - -# Verified boot xml moved to /product -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/permissions/android.software.verified_boot.xml) - -# Move libnfc-nci.conf to /vendor -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/libnfc-nci.conf) - -# ThermalHAL 1.1 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.thermal@1.1-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.thermal@1.1-service.bonito) - -# Move fingerprint input files to /vendor -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr/keylayout/uinput-fpc.kl) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr/idc/uinput-fpc.idc) - -# Recovery init files moved to recovery -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/init.recovery.*.rc) - -# Add product partition -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/fonts) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/media) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/usr) - -# Rename power HAL -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.3-service.bonito-libperfmgr.rc) - -# Remove generic atrace HAL -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.atrace@1.0-service.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.atrace@1.0-service.xml) - -# Remove obsolete android.hardware.boot@1.0-impl-wrapper.recovery.so -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/system/lib64/hw/android.hardware.boot@1.0-impl-wrapper.recovery.so) - -# Vibrator HAL 1.2 renamed from 'bonito' to 'drv2624' -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.vibrator@1.2-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.vibrator@1.2-service.bonito) - -# Vibrator HAL upgraded from 1-2 to 1-3 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.vibrator@1.2-service.drv2624.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.vibrator@1.2-service.drv2624) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.vibrator@1.2-service.drv2624.xml) - -# Move android.hidl.base@1.0.so to system_ext -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/android.hidl.base@1.0.so) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib64/android.hidl.base@1.0.so) - -# Removing GSI keys from the ramdisk. -# Those keys will be embedded into VTS instead, to verify the GSI image in used. -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/first_stage_ramdisk/avb/q-gsi.avbpubkey) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/first_stage_ramdisk/avb/r-gsi.avbpubkey) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/first_stage_ramdisk/avb/s-gsi.avbpubkey) - -# Use stable aidl power HAL -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.power@1.3-service.pixel-libperfmgr.rc) - -# Update to USB HAL 1.3 -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.2-service.bonito) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.2-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.2-service.bonito.xml) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.usb@1.3-service.bonito) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.usb@1.3-service.bonito.rc) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/vintf/manifest/android.hardware.usb@1.3-service.bonito.xml) diff --git a/aicp.dependencies b/aicp.dependencies index 601fb041..22f7a691 100644 --- a/aicp.dependencies +++ b/aicp.dependencies @@ -3,30 +3,18 @@ "remote": "aicp", "repository": "AICP/kernel_google_msm-4.9", "target_path": "kernel/google/msm-4.9", - "branch": "u14.0" + "branch": "v15.0" }, { "remote": "aicp", "repository": "LineageOS/android_packages_apps_ElmyraService", "target_path": "packages/apps/ElmyraService", - "branch": "lineage-21.0" + "branch": "lineage-22.2" }, { "remote": "aicp", "repository": "LineageOS/android_device_google_gs-common", "target_path": "device/google/gs-common", - "branch": "lineage-21" - }, - { - "remote": "gitlab", - "repository": "MindTheGapps/vendor_gapps", - "target_path": "vendor/gapps", - "branch": "upsilon" - }, - { - "remote": "aicp", - "repository": "Evolution-X/vendor_certification", - "target_path": "vendor/certification", - "branch": "udc" + "branch": "lineage-22.2" } ] diff --git a/aicp_bonito.mk b/aicp_bonito.mk index 73eb7cf4..0e2c4abc 100644 --- a/aicp_bonito.mk +++ b/aicp_bonito.mk @@ -22,9 +22,8 @@ TARGET_SCREEN_HEIGHT := 2160 TARGET_SCREEN_WIDTH := 1080 PRODUCT_BUILD_PROP_OVERRIDES += \ - TARGET_PRODUCT==bonito \ - PRIVATE_BUILD_DESC="bonito-user 12 SP2A.220505.008 8782922 release-keys" - -BUILD_FINGERPRINT := google/bonito/bonito:12/SP2A.220505.008/8782922:user/release-keys + BuildDesc="bonito-user 12 SP2A.220505.008 8782922 release-keys" \ + BuildFingerprint=google/bonito/bonito:12/SP2A.220505.008/8782922:user/release-keys \ + DeviceProduct=bonito $(call inherit-product, vendor/google/bonito/bonito-vendor.mk) diff --git a/aicp_sargo.mk b/aicp_sargo.mk index 16274dbe..c7e12ab0 100644 --- a/aicp_sargo.mk +++ b/aicp_sargo.mk @@ -22,9 +22,8 @@ TARGET_SCREEN_HEIGHT := 2220 TARGET_SCREEN_WIDTH := 1080 PRODUCT_BUILD_PROP_OVERRIDES += \ - TARGET_PRODUCT=sargo \ - PRIVATE_BUILD_DESC="sargo-user 12 SP2A.220505.008 8782922 release-keys" - -BUILD_FINGERPRINT := google/sargo/sargo:12/SP2A.220505.008/8782922:user/release-keys + BuildDesc="sargo-user 12 SP2A.220505.008 8782922 release-keys" \ + BuildFingerprint=google/sargo/sargo:12/SP2A.220505.008/8782922:user/release-keys \ + DeviceProduct=sargo $(call inherit-product, vendor/google/sargo/sargo-vendor.mk) diff --git a/aosp_bonito.mk b/aosp_bonito.mk index e4f3898e..6ae2652f 100644 --- a/aosp_bonito.mk +++ b/aosp_bonito.mk @@ -39,6 +39,7 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk) # All components inherited here go to vendor image # # TODO(b/136525499): move *_vendor.mk into the vendor makefile later +TARGET_SUPPORTS_OMX_SERVICE := false $(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk) diff --git a/aosp_sargo.mk b/aosp_sargo.mk index 1de61a7e..11cfbc2a 100644 --- a/aosp_sargo.mk +++ b/aosp_sargo.mk @@ -39,6 +39,7 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk) # All components inherited here go to vendor image # # TODO(b/136525499): move *_vendor.mk into the vendor makefile later +TARGET_SUPPORTS_OMX_SERVICE := false $(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_vendor.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_vendor.mk) diff --git a/bonito/extract-files.py b/bonito/extract-files.py new file mode 100755 index 00000000..a8c92de6 --- /dev/null +++ b/bonito/extract-files.py @@ -0,0 +1,96 @@ +#!/usr/bin/env -S PYTHONPATH=../../../../tools/extract-utils python3 +# +# SPDX-FileCopyrightText: 2024 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +from extract_utils.extract import extract_fns_user_type +from extract_utils.extract_pixel import ( + extract_pixel_factory_image, + extract_pixel_firmware, + pixel_factory_image_regex, + pixel_firmware_regex, +) +from extract_utils.fixups_blob import ( + blob_fixup, + blob_fixups_user_type, +) +from extract_utils.fixups_lib import ( + lib_fixups, + lib_fixups_user_type, +) +from extract_utils.main import ( + ExtractUtils, + ExtractUtilsModule, +) + +namespace_imports = [ + 'hardware/google/interfaces', + 'hardware/google/pixel', + 'hardware/qcom/sdm845', + 'hardware/qcom/wlan/legacy', +] + + +def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs): + return f'{lib}_{partition}' if partition == 'vendor' else None + + +lib_fixups: lib_fixups_user_type = { + **lib_fixups, + ( + 'vendor.qti.hardware.tui_comm@1.0', + 'vendor.qti.imsrtpservice@3.0', + ): lib_fixup_vendor_suffix, +} + +blob_fixups: blob_fixups_user_type = { + 'product/etc/sysconfig/nexus.xml': blob_fixup() + .regex_replace('qulacomm', 'qualcomm'), + ( + 'vendor/bin/hw/android.hardware.identity@1.0-service.citadel', + 'vendor/lib64/android.hardware.identity@1.0-impl.nos.so', + ): blob_fixup() + .replace_needed('android.hardware.identity-V3-ndk_platform.so', 'android.hardware.identity-V3-ndk.so') + .replace_needed('android.hardware.keymaster-V3-ndk_platform.so', 'android.hardware.keymaster-V3-ndk.so'), + 'vendor/bin/hw/android.hardware.rebootescrow-service.citadel': blob_fixup() + .replace_needed('android.hardware.rebootescrow-V1-ndk_platform.so', 'android.hardware.rebootescrow-V1-ndk.so') + .replace_needed('libcrypto.so', 'libcrypto-v33.so') + .add_needed('libcrypto_shim.so'), + ( + 'vendor/bin/hw/citadeld', + 'vendor/lib64/libnos_citadeld_proxy.so', + ): blob_fixup() + .replace_needed('android.frameworks.stats-V1-ndk_platform.so', 'android.frameworks.stats-V1-ndk.so') + .replace_needed('pixelatoms-cpp.so', 'pixelatoms-cpp-legacy.so'), + 'vendor/bin/hw/vendor.qti.media.c2@1.0-service': blob_fixup() + .replace_needed('libavservices_minijail_vendor.so', 'libavservices_minijail.so'), + 'vendor/lib64/android.hardware.keymaster@4.1-impl.nos.so': blob_fixup() + .add_needed('libcrypto_shim.so'), + 'vendor/lib64/hw/com.qti.chi.override.so': blob_fixup() + .replace_needed('android.hardware.power-V1-ndk_platform.so', 'android.hardware.power-V1-ndk.so'), +} # fmt: skip + +extract_fns: extract_fns_user_type = { + pixel_factory_image_regex: extract_pixel_factory_image, + pixel_firmware_regex: extract_pixel_firmware, +} + +module = ExtractUtilsModule( + 'bonito', + 'google', + device_rel_path='device/google/bonito/bonito', + blob_fixups=blob_fixups, + lib_fixups=lib_fixups, + namespace_imports=namespace_imports, + add_firmware_proprietary_file=True, + extract_fns=extract_fns, +) + +module.add_proprietary_file('proprietary-files-carriersettings.txt') +module.add_proprietary_file('proprietary-files-radio.txt') +module.add_proprietary_file('proprietary-files-vendor.txt') + +if __name__ == '__main__': + utils = ExtractUtils.device(module) + utils.run() diff --git a/bonito/extract-files.sh b/bonito/extract-files.sh deleted file mode 100755 index 158236c8..00000000 --- a/bonito/extract-files.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -DEVICE=bonito -VENDOR=google - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -# Default to sanitizing the vendor folder before extraction -CLEAN_VENDOR=true - -KANG= -SECTION= - -while [ "${#}" -gt 0 ]; do - case "${1}" in - -n | --no-cleanup ) - CLEAN_VENDOR=false - ;; - -k | --kang ) - KANG="--kang" - ;; - -s | --section ) - SECTION="${2}"; shift - CLEAN_VENDOR=false - ;; - * ) - SRC="${1}" - ;; - esac - shift -done - -if [ -z "${SRC}" ]; then - SRC="adb" -fi - -function blob_fixup() { - case "${1}" in - # Fix typo in qcrilmsgtunnel whitelist - product/etc/sysconfig/nexus.xml) - sed -i 's/qulacomm/qualcomm/' "${2}" - ;; - vendor/bin/hw/android.hardware.rebootescrow-service.citadel) - "${PATCHELF}" --replace-needed "libcrypto.so" "libcrypto-v33.so" "${2}" - ;; - esac -} - -function prepare_firmware() { - if [ "${SRC}" != "adb" ]; then - bash "${ANDROID_ROOT}"/lineage/scripts/pixel/prepare-firmware.sh "${DEVICE}" "${SRC}" - fi -} - -# Initialize the helper -setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}" - -extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-carriersettings.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-radio.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-vendor.txt" "${SRC}" "${KANG}" --section "${SECTION}" - -if [ -z "${SECTION}" ]; then - extract_firmware "${MY_DIR}/proprietary-firmware.txt" "${SRC}" -fi - -"${MY_DIR}/setup-makefiles.sh" diff --git a/bonito/overlay/frameworks/base/core/res/res/values/config.xml b/bonito/overlay/frameworks/base/core/res/res/values/config.xml index 71887989..71887989 100755..100644 --- a/bonito/overlay/frameworks/base/core/res/res/values/config.xml +++ b/bonito/overlay/frameworks/base/core/res/res/values/config.xml diff --git a/bonito/proprietary-files-radio.txt b/bonito/proprietary-files-radio.txt index 4060d72b..6f1ed1ea 100644 --- a/bonito/proprietary-files-radio.txt +++ b/bonito/proprietary-files-radio.txt @@ -1,9 +1,9 @@ # CNE - from coral - TP1A.221005.002.B2 vendor/app/CneApp/CneApp.apk;REQUIRED=CneApp.libvndfwk_detect_jni.qti_symlink|8c05c492f3673a0e52d86dbd01c144d502fe51f5 vendor/bin/cnd|00c98e93cb936320d90af32a26078e6e97a8c5eb -vendor/etc/cne/Nexus/ATT/ATT_profiles.xml|a0039cb3a4c5a4ca1adf897904b61c91e32d06f7|33e568627fd3f94dc45bca1c01ad10e6d8fb5b52 -vendor/etc/cne/Nexus/ROW/ROW_profiles.xml|e3907ff71cbbe0f1073ec1bf0223d26c8282aa35|238e785e9674b27c4b2365958d127533d7293132 -vendor/etc/cne/Nexus/VZW/VZW_profiles.xml|0d35b3266ea656d8868ae8f5d7e938f4859e9b0a|0f63b632e3a3f114def7aeadaabd13851c8ceec5 +vendor/etc/cne/Nexus/ATT/ATT_profiles.xml|a0039cb3a4c5a4ca1adf897904b61c91e32d06f7 +vendor/etc/cne/Nexus/ROW/ROW_profiles.xml|e3907ff71cbbe0f1073ec1bf0223d26c8282aa35 +vendor/etc/cne/Nexus/VZW/VZW_profiles.xml|0d35b3266ea656d8868ae8f5d7e938f4859e9b0a vendor/etc/cne/mwqem.conf|c42ad47b34b511075e5dfb9047d32f881fe0c159 vendor/etc/cne/profileMwqem.xml|947917691684584b7e2ddf3588cd6f8e99f3804f vendor/etc/cne/wqeclient/ATT/ATT_profile1.xml|578f3f8f56059bfdbef926bcc68d01c15e06951f @@ -34,29 +34,7 @@ vendor/etc/cne/wqeclient/VZW/VZW_profile4.xml|ff91feb5060a6df07e3e4d9bc99ae58bcc vendor/etc/cne/wqeclient/VZW/VZW_profile5.xml|f76c894f3c6d5b6ed35113a088dc3174c900501b vendor/etc/cne/wqeclient/VZW/VZW_profile6.xml|14d136e7fcc682311757d3edc0b9d3eaeba11815 vendor/etc/init/cnd-generic.rc|5ec06d42d32b58bf5c73b77d485606c477d57324 -vendor/lib/libcne.so|d5455fe1491870c2469eb0d5479130aeacd361a7 -vendor/lib/libcneapiclient.so|9366beb21450011bc6c7fb95d985a26da41b7dbb -vendor/lib/libcneoplookup.so|46789f90f01a6a669a53647e189900712aebad0d -vendor/lib/libcneqmiutils.so|8b97ff1bb8ab0f2ded483d243d87289de33db72b -vendor/lib/libwms.so|d7a8df1240b4846a752195bad6b0c493fa42d13f -vendor/lib/libwqe.so|deec314722d1ebb4d847f2e7983eb92a201bada6 vendor/lib/libxml.so|b453fbd6fcaae2d13f51a8838cf975de8d562e20 -vendor/lib/vendor.qti.data.factory@2.0.so|cc920d710a51ec5638acec13bfcf3faff8cb8fdf -vendor/lib/vendor.qti.data.factory@2.1.so|32ecdbebbce71746a244c7a3e70decbab819ee87 -vendor/lib/vendor.qti.data.factory@2.2.so|bf46ecfff10609dc22aed0da0414fc8d3fe230bf -vendor/lib/vendor.qti.data.factory@2.3.so|66659e5ff8ffa4f0ccdc64a588e1fee036d5a663 -vendor/lib/vendor.qti.data.mwqem@1.0.so|a4953eaf4fd719e8eb7b44e9042976cbedc70ee6 -vendor/lib/vendor.qti.data.slm@1.0.so|b3f16e4d8a1ba347f1ff6033228be2c49de55953 -vendor/lib/vendor.qti.hardware.data.cne.internal.api@1.0.so|18647099b9e71aabbbb21636540cabfa1fc9426d -vendor/lib/vendor.qti.hardware.data.cne.internal.constants@1.0.so|fedc651cf3ad3c4bc084d359404d7113e6866336 -vendor/lib/vendor.qti.hardware.data.cne.internal.server@1.0.so|4c310a92f8ae1dbec77ad5d000c31671a6dd6c37 -vendor/lib/vendor.qti.hardware.data.connection@1.0.so|f908c9a9b0de8696fb9c6f9dea1a49bbe444114c -vendor/lib/vendor.qti.hardware.data.dynamicdds@1.0.so|a30ac71448d8712d8c69b884a8a9a0dea17d44ff -vendor/lib/vendor.qti.hardware.data.latency@1.0.so|b6b66d2201a807ca15d90efc3404e7cd4d4a76a1 -vendor/lib/vendor.qti.hardware.data.lce@1.0.so|1227a2b1ac3c8adca5ca79eeb46f78af34043614 -vendor/lib/vendor.qti.hardware.data.qmi@1.0.so|4d6f1bea9ae5e97f7e456fc7946f913917dbd66c -vendor/lib/vendor.qti.hardware.mwqemadapter@1.0.so|99048bc4f2aef592096d23d6098def735c3a5ca4 -vendor/lib/vendor.qti.hardware.slmadapter@1.0.so|e75b017e2e1f75821496bfec235eb400d6ecc3cc vendor/lib64/libcne.so|1eb5ae1fdd51f05e25d38afd8a793d8adb0ed1cf vendor/lib64/libcneapiclient.so|a3bd1e0e85f0684fe6c999f5dc17ffdbc14e8f24 vendor/lib64/libcneoplookup.so|573229322afd00b1bfb553f0eef72ce4e2c99ff4 @@ -108,38 +86,6 @@ vendor/etc/init/imsdatadaemon.rc|68e9a06b92817be8c59c3e2b00d95f5a7fa97a1b vendor/etc/init/imsqmidaemon.rc|b0b9f70b5c56c89769255ea03d8e3f5050c08657 vendor/etc/init/imsrcsd.rc|a12f5a8efbfccf9a8ec47a39367382346eb8dc35 vendor/etc/seccomp_policy/imsrtp.policy|fb5f1f63dbc3a002ac0f203cce3b8d3434752fa2 -vendor/lib/com.qualcomm.qti.imscmservice@1.0.so|0395ecc6a78444be3cc585845f91cbcda55875f8 -vendor/lib/com.qualcomm.qti.imscmservice@2.0.so|b9dc935adf82410134d63406c4574567902b022e -vendor/lib/com.qualcomm.qti.imscmservice@2.1.so|9dbeb7a9a115a1b91bb0f954070b2e2353076d72 -vendor/lib/com.qualcomm.qti.imscmservice@2.2.so|dce9d40f3bb4ced209019348cdde92a7d6f76519 -vendor/lib/com.qualcomm.qti.uceservice@2.0.so|7b7914430aece9acd88d3b8fb83d7838cf5d914b -vendor/lib/com.qualcomm.qti.uceservice@2.1.so|b29e2c7292e020863b09991e88368b1aa375b1dc -vendor/lib/com.qualcomm.qti.uceservice@2.2.so|870f9b16df935aab7c4a9b9c6194258f75c331c1 -vendor/lib/com.qualcomm.qti.uceservice@2.3.so|19e48d852e08785d6468fdae021d53da53977d3c -vendor/lib/lib-imscmservice.so|38f5e8d9128c5a0eb425c19f867c324704563e30 -vendor/lib/lib-imsdpl.so|03a7b299db808ab81347cd7566b7ea9cd63f8d6a -vendor/lib/lib-imsqimf.so|d4e1d33a87cc7b745642ac4b4fe36328fbdbe7aa -vendor/lib/lib-imsrcs-v2.so|571999f88559ec6e75c1f6d0e18fcc0b28090143 -vendor/lib/lib-imsrcsbaseimpl.so|c98f6838658ca8bcfecf9a77dbf36ebed0d6f2a4 -vendor/lib/lib-imsvtcore.so|108575c6ad012c1e38a4100051041f920e883525 -vendor/lib/lib-imsxml.so|82219d37c0c7c77dbbad743ec15b992663c02b2b -vendor/lib/lib-rcsconfig.so|13783a699f7e192e89b1b40fa5b1bdc19958ad0c -vendor/lib/lib-rtpcommon.so|83d1c3a2d0a9a096742f0ae55ef77c18359e90f0 -vendor/lib/lib-rtpcore.so|59c05d07ab9fea55fb535a05ed5ca0f1bf429c7d -vendor/lib/lib-rtpsl.so|de204d26ebfe21f640769dee9da74ea300130464 -vendor/lib/lib-siputility.so|0cd56a4a2c62c36b540ca644fe5bf006864a9b1a -vendor/lib/lib-uceservice.so|93573179e5e62d0091eeb241c5891368145b35a1 -vendor/lib/librcc.so|2a98fdb6200b6d322e6aab0db07bb2c3874e2b7f -vendor/lib/vendor.qti.ims.callcapability@1.0.so|6a2b8dcbb6c565c226853d322fe9b81f0dc5e8e4 -vendor/lib/vendor.qti.ims.callinfo@1.0.so|b77c30854532562d1368c02d23538edbe4a13a55 -vendor/lib/vendor.qti.ims.factory@1.0.so|6d196d5861b2a8b2abdba3df6dd7d2d3591dc5e6 -vendor/lib/vendor.qti.ims.factory@1.1.so|bc5ff74b8cb1ff76706b12072d29bb1a10cbcae5 -vendor/lib/vendor.qti.ims.rcsconfig@1.0.so|b2072e058696c248f59184ef4e2290d7d4b0d7e2 -vendor/lib/vendor.qti.ims.rcsconfig@1.1.so|c98e14a382990a88f0f946ca0c1340b83f7a2431 -vendor/lib/vendor.qti.ims.rcsconfig@2.0.so|1f5916daa9201c9ca6ae51452ebe9e28ae7e4576 -vendor/lib/vendor.qti.ims.rcsconfig@2.1.so|2fd70cf484b42c607b74175c3d9b9f4d93d81f10 -vendor/lib/vendor.qti.imsrtpservice@3.0-service-Impl.so|8d91a21a4fb1ed8323159af610fda78a752a3ed4 -vendor/lib/vendor.qti.imsrtpservice@3.0.so|ac0a1374a03cd01875ae7fac9eb26461349110f6 vendor/lib64/com.qualcomm.qti.imscmservice@1.0.so|c81670607cd83e49ef7799c33ee8d6671ddc1d2d vendor/lib64/com.qualcomm.qti.imscmservice@2.0.so|5cc27542fa649723d0ade59a09f645c7d24b8218 vendor/lib64/com.qualcomm.qti.imscmservice@2.1.so|6e0037052bd4c8f607106c7b6ce7397fd2ef3430 @@ -184,7 +130,7 @@ vendor/lib64/vendor.qti.ims.rcsconfig@1.1.so|6b0a93fea15929f446c0819fc5411268b09 vendor/lib64/vendor.qti.ims.rcsconfig@2.0.so|edde36e3eaf91a7c26e378dc17c312b99e2cc65b vendor/lib64/vendor.qti.ims.rcsconfig@2.1.so|dfe17b80d07b431615c35cbd3403f0c0c9455c6f vendor/lib64/vendor.qti.imsrtpservice@3.0-service-Impl.so|29c39c454cd7c11368db5c480d151e0487f4e0ea -vendor/lib64/vendor.qti.imsrtpservice@3.0.so|91cc47edc34172234d56156e7e69fa5b4871dd21 +vendor/lib64/vendor.qti.imsrtpservice@3.0.so;MODULE_SUFFIX=_vendor|91cc47edc34172234d56156e7e69fa5b4871dd21 # QMI - from coral - TP1A.221005.002.B2 vendor/bin/irsc_util|f194faebe803843eb855a72e172367e02dc49ecd diff --git a/bonito/proprietary-files-vendor.txt b/bonito/proprietary-files-vendor.txt index 2e7c2336..5d756fe5 100644 --- a/bonito/proprietary-files-vendor.txt +++ b/bonito/proprietary-files-vendor.txt @@ -1,4 +1,5 @@ # All blobs are extracted from Google factory images for each new ASB + vendor/app/TimeService/TimeService.apk vendor/bin/adsprpcd vendor/bin/cdsprpcd @@ -352,14 +353,6 @@ vendor/firmware/wlanmdsp.mbn vendor/framework/com.google.android.camera.experimental2018.jar vendor/lib/android.hardware.sensors@2.0-impl.so vendor/lib/btaudio_offload_if.so -vendor/lib/camera/com.qti.sensormodule.metric_imx363.bin -vendor/lib/camera/com.qti.sensormodule.primax_imx355.bin -vendor/lib/camera/com.qti.sensormodule.primax_imx355_s.bin -vendor/lib/camera/com.qti.tuned.default.bin -vendor/lib/camera/fdconfigpreview.bin -vendor/lib/camera/fdconfigpreviewlite.bin -vendor/lib/camera/fdconfigvideo.bin -vendor/lib/camera/fdconfigvideolite.bin vendor/lib/egl/eglSubDriverAndroid.so vendor/lib/egl/libEGL_adreno.so;SYMLINK=vendor/lib/libEGL_adreno.so vendor/lib/egl/libGLESv1_CM_adreno.so @@ -372,28 +365,16 @@ vendor/lib/hw/android.hardware.gatekeeper@1.0-impl-qti.so vendor/lib/hw/sound_trigger.primary.sdm710.so vendor/lib/hw/vendor.qti.hardware.qteeconnector@1.0-impl.so vendor/lib/hw/vulkan.adreno.so -vendor/lib/lib-dplmedia.so -vendor/lib/libAlacSwDec.so -vendor/lib/libApeSwDec.so vendor/lib/libC2D2.so vendor/lib/libCB.so -vendor/lib/libFlacSwDec.so vendor/lib/libGPQTEEC_vendor.so vendor/lib/libGPTEE_vendor.so vendor/lib/libGPreqcancel.so vendor/lib/libGPreqcancel_svc.so --vendor/lib/libMpeg4SwEncoder.so -vendor/lib/libOmxAlacDecSw.so -vendor/lib/libOmxAmrwbplusDec.so -vendor/lib/libOmxApeDecSw.so -vendor/lib/libOmxDsdDec.so -vendor/lib/libOmxEvrcDec.so -vendor/lib/libOmxQcelp13Dec.so vendor/lib/libOpenCL-pixel.so vendor/lib/libOpenCL.so vendor/lib/libQSEEComAPI.so vendor/lib/libQTEEConnector_vendor.so -vendor/lib/libRSDriver_adreno.so vendor/lib/libSecureUILib.so vendor/lib/libStDrvInt.so vendor/lib/libSubSystemShutdown.so @@ -407,14 +388,14 @@ vendor/lib/libadm.so vendor/lib/libadpcmdec.so vendor/lib/libadreno_utils.so vendor/lib/libadsp_default_listener.so --vendor/lib/libadsprpc.so +vendor/lib/libadsprpc.so vendor/lib/libash.so vendor/lib/libaudcal.so vendor/lib/libaudioalsa.so vendor/lib/libbase64.so vendor/lib/libbccQTI.so vendor/lib/libbluetooth_audio_session_qti.so --vendor/lib/libbtnv.so +vendor/lib/libbtnv.so vendor/lib/libc2d30_bltlib.so vendor/lib/libcamxfdalgov7.so vendor/lib/libcamxfdengine.so @@ -430,7 +411,6 @@ vendor/lib/libdisp-aba.so vendor/lib/libdisplayqos.so vendor/lib/libdrmfs.so vendor/lib/libdrmtime.so -vendor/lib/libdsd2pcm.so vendor/lib/libeaselmanager_client.so vendor/lib/libelmyra-protos.so vendor/lib/libfastcrc.so @@ -471,10 +451,7 @@ vendor/lib/libqisl.so vendor/lib/libqseed3.so vendor/lib/libqti-utils.so vendor/lib/libqtikeymaster4.so -vendor/lib/libquipc_os_api.so vendor/lib/librpmb.so -vendor/lib/librs_adreno.so -vendor/lib/librs_adreno_sha1.so vendor/lib/libsdedrm.so vendor/lib/libsdm-color.so vendor/lib/libsdm-diag.so @@ -536,7 +513,7 @@ vendor/lib/vendor.qti.hardware.qteeconnector@1.0.so vendor/lib/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib/vendor.qti.hardware.soter@1.0.so -vendor/lib/vendor.qti.hardware.tui_comm@1.0.so +vendor/lib/vendor.qti.hardware.tui_comm@1.0.so;MODULE_SUFFIX=_vendor vendor/lib/vendor.qti.hardware.wigig.netperftuner@1.0.so vendor/lib/vendor.qti.power.pasrmanager@1.0.so vendor/lib/vendor.qti.voiceprint@1.0.so @@ -604,11 +581,11 @@ vendor/lib64/camera/fdconfigvideo.bin vendor/lib64/camera/fdconfigvideolite.bin vendor/lib64/com.fingerprints.extension@1.0.so vendor/lib64/egl/eglSubDriverAndroid.so -vendor/lib64/egl/libEGL_adreno.so;SYMLINK=vendor/lib/libEGL_adreno.so +vendor/lib64/egl/libEGL_adreno.so;SYMLINK=vendor/lib64/libEGL_adreno.so vendor/lib64/egl/libGLESv1_CM_adreno.so -vendor/lib64/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib/libGLESv2_adreno.so +vendor/lib64/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib64/libGLESv2_adreno.so vendor/lib64/egl/libQTapGLES.so -vendor/lib64/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib/libq3dtools_adreno.so +vendor/lib64/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib64/libq3dtools_adreno.so vendor/lib64/egl/libq3dtools_esx.so vendor/lib64/hw/android.hardware.bluetooth@1.0-impl-qti.so vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl-qti.so @@ -617,27 +594,16 @@ vendor/lib64/hw/com.qti.chi.override.so vendor/lib64/hw/sound_trigger.primary.sdm710.so vendor/lib64/hw/vendor.qti.hardware.qteeconnector@1.0-impl.so vendor/lib64/hw/vulkan.adreno.so -vendor/lib64/lib-dplmedia.so -vendor/lib64/libAlacSwDec.so -vendor/lib64/libApeSwDec.so vendor/lib64/libC2D2.so vendor/lib64/libCB.so -vendor/lib64/libFlacSwDec.so vendor/lib64/libGPQTEEC_vendor.so vendor/lib64/libGPTEE_vendor.so vendor/lib64/libGPreqcancel.so vendor/lib64/libGPreqcancel_svc.so --vendor/lib64/libMpeg4SwEncoder.so -vendor/lib64/libOmxAlacDecSw.so -vendor/lib64/libOmxAmrwbplusDec.so -vendor/lib64/libOmxApeDecSw.so -vendor/lib64/libOmxEvrcDec.so -vendor/lib64/libOmxQcelp13Dec.so vendor/lib64/libOpenCL-pixel.so vendor/lib64/libOpenCL.so vendor/lib64/libQSEEComAPI.so vendor/lib64/libQTEEConnector_vendor.so -vendor/lib64/libRSDriver_adreno.so vendor/lib64/libSecureUILib.so vendor/lib64/libStDrvInt.so vendor/lib64/libSubSystemShutdown.so @@ -649,14 +615,14 @@ vendor/lib64/libacdbrtac.so vendor/lib64/libadiertac.so vendor/lib64/libadreno_utils.so vendor/lib64/libadsp_default_listener.so --vendor/lib64/libadsprpc.so +vendor/lib64/libadsprpc.so vendor/lib64/libash.so vendor/lib64/libaudcal.so vendor/lib64/libaudioalsa.so vendor/lib64/libbase64.so vendor/lib64/libbccQTI.so vendor/lib64/libbluetooth_audio_session_qti.so --vendor/lib64/libbtnv.so +vendor/lib64/libbtnv.so vendor/lib64/libc2d30_bltlib.so vendor/lib64/libcamxfdalgov7.so vendor/lib64/libcamxfdengine.so @@ -716,7 +682,6 @@ vendor/lib64/libnos_transport.so vendor/lib64/libnosprotos.so vendor/lib64/liboemcrypto.so vendor/lib64/libperipheral_client.so -vendor/lib64/libpixelstats.so vendor/lib64/libpower_anomaly_data.so vendor/lib64/libqcbor.so vendor/lib64/libqcodec2.so @@ -724,10 +689,7 @@ vendor/lib64/libqisl.so vendor/lib64/libqseed3.so vendor/lib64/libqti-utils.so vendor/lib64/libqtikeymaster4.so -vendor/lib64/libquipc_os_api.so vendor/lib64/librpmb.so -vendor/lib64/librs_adreno.so -vendor/lib64/librs_adreno_sha1.so vendor/lib64/libsdedrm.so vendor/lib64/libsdm-color.so vendor/lib64/libsdm-diag.so @@ -762,7 +724,7 @@ vendor/lib64/nos_app_avb.so vendor/lib64/nos_app_identity.so vendor/lib64/nos_app_keymaster.so vendor/lib64/nos_app_weaver.so -vendor/lib64/pixelatoms-cpp.so +vendor/lib64/pixelatoms-cpp.so:vendor/lib64/pixelatoms-cpp-legacy.so;FIX_SONAME vendor/lib64/sensors.ssc.so vendor/lib64/unnhal-acc-adreno.so vendor/lib64/unnhal-acc-common.so @@ -781,7 +743,7 @@ vendor/lib64/vendor.qti.hardware.qteeconnector@1.0.so vendor/lib64/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib64/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib64/vendor.qti.hardware.soter@1.0.so -vendor/lib64/vendor.qti.hardware.tui_comm@1.0.so +vendor/lib64/vendor.qti.hardware.tui_comm@1.0.so;MODULE_SUFFIX=_vendor vendor/lib64/vendor.qti.hardware.wigig.netperftuner@1.0.so vendor/lib64/vendor.qti.power.pasrmanager@1.0.so vendor/lib64/vendor.qti.voiceprint@1.0.so diff --git a/bonito/proprietary-files.txt b/bonito/proprietary-files.txt index 132133d1..91e8b0c2 100644 --- a/bonito/proprietary-files.txt +++ b/bonito/proprietary-files.txt @@ -114,12 +114,3 @@ system_ext/etc/permissions/vzw_mvs_permissions.xml system_ext/priv-app/MyVerizonServices/MyVerizonServices.apk;PRESIGNED system_ext/priv-app/OBDM_Permissions/OBDM_Permissions.apk;PRESIGNED system_ext/priv-app/obdm_stub/obdm_stub.apk;PRESIGNED - -# vendor partition - -# Wi-Fi service -vendor/bin/hw/vendor.google.wifi_ext-service-vendor|2f00a17b75612cbf8fb3685fe0d183148a70dd03 -vendor/etc/init/vendor.google.wifi_ext-service.rc|8565ca57da131819441d6fb87abfcae134ed2ef9 -vendor/etc/vintf/manifest/manifest_wifi_ext_aidl.xml|f273a6ab68268f73935c36bdecea0aad97cbe70f -vendor/lib64/google_wifi_firmware_config_info_cc_proto.so|b290b5ba92c6b505d2314e75d8c7269a1cc03942 -vendor/lib64/vendor.google.wifi_ext-V3-ndk.so|9fcddf2e1eab7978f6c57270170b3f4a9aea04b8 diff --git a/bonito/regen-carriersettings.sh b/bonito/regen-carriersettings.sh deleted file mode 100755 index df7335bc..00000000 --- a/bonito/regen-carriersettings.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2019-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -_input_image="${1}" -_output_file="${2}" - -if [ -z "${_input_image}" ]; then - echo "No input image supplied" - exit 1 -fi - -if [ -z "${_output_file}" ]; then - echo "No output filename supplied" - exit 1 -fi - -CARRIER_SKIP_FILES=() - -# Initialize the helper -setup_vendor_deps "${ANDROID_ROOT}" - -generate_prop_list_from_image "${_input_image}" "${_output_file}" CARRIER_SKIP_FILES carriersettings - -function header() { - sed -i "1s/^/${1}\n/" "${_output_file}" -} - -header "# All blobs are extracted from Google factory images for each new ASB" diff --git a/bonito/regen-vendor.sh b/bonito/regen-vendor.sh deleted file mode 100755 index 48258c37..00000000 --- a/bonito/regen-vendor.sh +++ /dev/null @@ -1,1395 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2019-2021 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -_input_image="${1}" -_output_file="${2}" - -if [ -z "${_input_image}" ]; then - echo "No input image supplied" - exit 1 -fi - -if [ -z "${_output_file}" ]; then - echo "No output filename supplied" - exit 1 -fi - -VENDOR_SKIP_FILES=( - # Standard build output with vendor image build enabled - "apex/com.android.vibrator.drv2624.apex" - "bin/[" - "bin/acpi" - "bin/applypatch" - "bin/awk" - "bin/base64" - "bin/basename" - "bin/blockdev" - "bin/boringssl_self_test32" - "bin/boringssl_self_test64" - "bin/cal" - "bin/cat" - "bin/chattr" - "bin/chcon" - "bin/checkpoint_gc" - "bin/chgrp" - "bin/chmod" - "bin/chown" - "bin/chroot" - "bin/chrt" - "bin/cksum" - "bin/clear" - "bin/cmp" - "bin/comm" - "bin/cp" - "bin/cpio" - "bin/cut" - "bin/date" - "bin/dd" - "bin/devmem" - "bin/df" - "bin/diff" - "bin/dirname" - "bin/dmesg" - "bin/dos2unix" - "bin/du" - "bin/dumpsys" - "bin/echo" - "bin/egrep" - "bin/env" - "bin/expand" - "bin/expr" - "bin/fallocate" - "bin/false" - "bin/fgrep" - "bin/file" - "bin/find" - "bin/flock" - "bin/fmt" - "bin/free" - "bin/fsync" - "bin/getconf" - "bin/getenforce" - "bin/getevent" - "bin/getprop" - "bin/grep" - "bin/groups" - "bin/gunzip" - "bin/gzip" - "bin/head" - "bin/hostname" - "bin/hw/android.hardware.atrace@1.0-service.pixel" - "bin/hw/android.hardware.audio.service" - "bin/hw/android.hardware.boot@1.0-service" - "bin/hw/android.hardware.camera.provider@2.4-service_64" - "bin/hw/android.hardware.cas@1.2-service" - "bin/hw/android.hardware.configstore@1.1-service" - "bin/hw/android.hardware.contexthub@1.2-service.generic" - "bin/hw/android.hardware.drm@1.0-service" - "bin/hw/android.hardware.drm@1.4-service.clearkey" - "bin/hw/android.hardware.dumpstate@1.1-service.bonito" - "bin/hw/android.hardware.gnss@1.1-service-qti" - "bin/hw/android.hardware.graphics.composer@2.2-service" - "bin/hw/android.hardware.health.storage@1.0-service" - "bin/hw/android.hardware.health@2.0-service.bonito" - "bin/hw/android.hardware.light@2.0-service" - "bin/hw/android.hardware.media.omx@1.0-service" - "bin/hw/android.hardware.memtrack@1.0-service" - "bin/hw/android.hardware.nfc@1.2-service" - "bin/hw/android.hardware.power-service.pixel-libperfmgr" - "bin/hw/android.hardware.power.stats@1.0-service.pixel" - "bin/hw/android.hardware.secure_element@1.1-service-disabled" - "bin/hw/android.hardware.thermal@2.0-service.pixel" - "bin/hw/android.hardware.usb@1.3-service.bonito" - "bin/hw/android.hardware.wifi@1.0-service" - "bin/hw/hostapd" - "bin/hw/wait_for_strongbox" - "bin/hw/wpa_supplicant" - "bin/hwclock" - "bin/i2cdetect" - "bin/i2cdump" - "bin/i2cget" - "bin/i2cset" - "bin/iconv" - "bin/id" - "bin/ifconfig" - "bin/init.edge_sense.sh" - "bin/init.fingerprint.sh" - "bin/init.firstboot.sh" - "bin/init.insmod.sh" - "bin/init.qcom.devstart.sh" - "bin/init.qcom.ipastart.sh" - "bin/init.qcom.wlan.sh" - "bin/init.radio.sh" - "bin/init.ramoops.sh" - "bin/inotifyd" - "bin/insmod" - "bin/install" - "bin/ionice" - "bin/iorenice" - "bin/ipacm" - "bin/kill" - "bin/killall" - "bin/ln" - "bin/load_policy" - "bin/log" - "bin/logname" - "bin/logwrapper" - "bin/losetup" - "bin/ls" - "bin/lsattr" - "bin/lsmod" - "bin/lsof" - "bin/lspci" - "bin/lsusb" - "bin/md5sum" - "bin/microcom" - "bin/misc_writer" - "bin/mkdir" - "bin/mkfifo" - "bin/mknod" - "bin/mkswap" - "bin/mktemp" - "bin/modinfo" - "bin/modprobe" - "bin/more" - "bin/mount" - "bin/mountpoint" - "bin/mv" - "bin/nc" - "bin/netcat" - "bin/netstat" - "bin/nice" - "bin/nl" - "bin/nohup" - "bin/nproc" - "bin/nsenter" - "bin/od" - "bin/paste" - "bin/patch" - "bin/pgrep" - "bin/pidof" - "bin/pixelstats-vendor" - "bin/pkill" - "bin/pmap" - "bin/printenv" - "bin/printf" - "bin/ps" - "bin/pwd" - "bin/readelf" - "bin/readlink" - "bin/realpath" - "bin/renice" - "bin/restorecon" - "bin/rm" - "bin/rmdir" - "bin/rmmod" - "bin/rtcwake" - "bin/runcon" - "bin/sed" - "bin/sendevent" - "bin/seq" - "bin/setenforce" - "bin/setprop" - "bin/setsid" - "bin/sh" - "bin/sha1sum" - "bin/sha224sum" - "bin/sha256sum" - "bin/sha384sum" - "bin/sha512sum" - "bin/sleep" - "bin/sort" - "bin/split" - "bin/start" - "bin/stat" - "bin/stop" - "bin/strings" - "bin/stty" - "bin/swapoff" - "bin/swapon" - "bin/sync" - "bin/sysctl" - "bin/tac" - "bin/tail" - "bin/tar" - "bin/taskset" - "bin/tee" - "bin/test" - "bin/thermal_symlinks" - "bin/time" - "bin/timeout" - "bin/toolbox" - "bin/top" - "bin/touch" - "bin/toybox_vendor" - "bin/tr" - "bin/true" - "bin/truncate" - "bin/tty" - "bin/ulimit" - "bin/umount" - "bin/uname" - "bin/uniq" - "bin/unix2dos" - "bin/unlink" - "bin/unshare" - "bin/uptime" - "bin/usleep" - "bin/uudecode" - "bin/uuencode" - "bin/uuidgen" - "bin/vmstat" - "bin/vndservice" - "bin/vndservicemanager" - "bin/watch" - "bin/wc" - "bin/which" - "bin/whoami" - "bin/xargs" - "bin/xxd" - "bin/yes" - "bin/zcat" - "build.prop" - "etc/IPACM_cfg.xml" - "etc/NOTICE.xml.gz" - "etc/a2dp_audio_policy_configuration_7_0.xml" - "etc/a2dp_in_audio_policy_configuration_7_0.xml" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Speaker_cal.acdb" - "etc/acdbdata/adsp_avs_config.acdb" - "etc/audio_effects.xml" - "etc/audio_platform_info_intcodec_b4.xml" - "etc/audio_platform_info_intcodec_b4dev.xml" - "etc/audio_platform_info_intcodec_s4.xml" - "etc/audio_platform_info_intcodec_s4dev.xml" - "etc/audio_policy_configuration.xml" - "etc/audio_policy_configuration_a2dp_offload_disabled.xml" - "etc/audio_policy_configuration_bluetooth_legacy_hal.xml" - "etc/audio_policy_volumes.xml" - "etc/bluetooth_audio_policy_configuration_7_0.xml" - "etc/bluetooth_hearing_aid_audio_policy_configuration.xml" - "etc/default-permissions/default-permissions.xml" - "etc/default_volume_tables.xml" - "etc/fs_config_dirs" - "etc/fs_config_files" - "etc/fstab.sdm670" - "etc/gps.conf" - "etc/graphite_ipc_platform_info.xml" - "etc/group" - "etc/hearing_aid_audio_policy_configuration_7_0.xml" - "etc/init.insmod.cfg" - "etc/init/android.hardware.atrace@1.0-service.pixel.rc" - "etc/init/android.hardware.audio.service.rc" - "etc/init/android.hardware.boot@1.0-service.rc" - "etc/init/android.hardware.camera.provider@2.4-service_64.rc" - "etc/init/android.hardware.cas@1.2-service.rc" - "etc/init/android.hardware.configstore@1.1-service.rc" - "etc/init/android.hardware.contexthub@1.2-service-generic.rc" - "etc/init/android.hardware.drm@1.0-service.rc" - "etc/init/android.hardware.drm@1.4-service.clearkey.rc" - "etc/init/android.hardware.dumpstate@1.1-service.bonito.rc" - "etc/init/android.hardware.gnss@1.1-service-qti.rc" - "etc/init/android.hardware.graphics.composer@2.2-service.rc" - "etc/init/android.hardware.health.storage@1.0-service.rc" - "etc/init/android.hardware.health@2.0-service.bonito.rc" - "etc/init/android.hardware.light@2.0-service.rc" - "etc/init/android.hardware.media.omx@1.0-service.rc" - "etc/init/android.hardware.memtrack@1.0-service.rc" - "etc/init/android.hardware.nfc@1.2-service.rc" - "etc/init/android.hardware.power-service.pixel-libperfmgr.rc" - "etc/init/android.hardware.power.stats@1.0-service.pixel.rc" - "etc/init/android.hardware.secure_element@1.1-service-disabled.rc" - "etc/init/android.hardware.thermal@2.0-service.pixel.rc" - "etc/init/android.hardware.usb@1.3-service.bonito.rc" - "etc/init/android.hardware.wifi.supplicant-service.rc" - "etc/init/android.hardware.wifi@1.0-service.rc" - "etc/init/boringssl_self_test.rc" - "etc/init/com.android.vibrator.drv2624.enable.rc" - "etc/init/hostapd.android.rc" - "etc/init/hw/init.bonito.rc" - "etc/init/hw/init.sargo.rc" - "etc/init/hw/init.sdm670.diag.rc" - "etc/init/hw/init.sdm670.logging.rc" - "etc/init/hw/init.sdm670.mpssrfs.rc" - "etc/init/hw/init.sdm670.power.rc" - "etc/init/hw/init.sdm670.rc" - "etc/init/hw/init.sdm670.usb.rc" - "etc/init/pixel-mm-legacy.rc" - "etc/init/pixel-thermal-symlinks.rc" - "etc/init/pixelstats-vendor.bonito.rc" - "etc/init/vendor_flash_recovery.rc" - "etc/init/vndservicemanager.rc" - "etc/libese-nxp.conf" - "etc/libnfc-nxp-G020A.conf" - "etc/libnfc-nxp-G020B.conf" - "etc/libnfc-nxp-G020C.conf" - "etc/libnfc-nxp-G020D.conf" - "etc/libnfc-nxp.conf" - "etc/lowi.conf" - "etc/media_codecs.xml" - "etc/media_codecs_google_telephony.xml" - "etc/media_codecs_google_video.xml" - "etc/media_codecs_omx.xml" - "etc/media_codecs_performance.xml" - "etc/media_profiles_V1_0.xml" - "etc/mixer_paths_intcodec_b4.xml" - "etc/mixer_paths_intcodec_b4dev.xml" - "etc/mixer_paths_intcodec_s4.xml" - "etc/mixer_paths_intcodec_s4dev.xml" - "etc/mkshrc" - "etc/passwd" - "etc/permissions/android.hardware.audio.low_latency.xml" - "etc/permissions/android.hardware.audio.pro.xml" - "etc/permissions/android.hardware.bluetooth.xml" - "etc/permissions/android.hardware.bluetooth_le.xml" - "etc/permissions/android.hardware.camera.flash-autofocus.xml" - "etc/permissions/android.hardware.camera.front.xml" - "etc/permissions/android.hardware.camera.full.xml" - "etc/permissions/android.hardware.camera.raw.xml" - "etc/permissions/android.hardware.context_hub.xml" - "etc/permissions/android.hardware.device_unique_attestation.xml" - "etc/permissions/android.hardware.fingerprint.xml" - "etc/permissions/android.hardware.location.gps.xml" - "etc/permissions/android.hardware.nfc.hce.xml" - "etc/permissions/android.hardware.nfc.hcef.xml" - "etc/permissions/android.hardware.nfc.xml" - "etc/permissions/android.hardware.opengles.aep.xml" - "etc/permissions/android.hardware.reboot_escrow.xml" - "etc/permissions/android.hardware.se.omapi.uicc.xml" - "etc/permissions/android.hardware.sensor.accelerometer.xml" - "etc/permissions/android.hardware.sensor.assist.xml" - "etc/permissions/android.hardware.sensor.barometer.xml" - "etc/permissions/android.hardware.sensor.compass.xml" - "etc/permissions/android.hardware.sensor.gyroscope.xml" - "etc/permissions/android.hardware.sensor.hifi_sensors.xml" - "etc/permissions/android.hardware.sensor.light.xml" - "etc/permissions/android.hardware.sensor.proximity.xml" - "etc/permissions/android.hardware.sensor.stepcounter.xml" - "etc/permissions/android.hardware.sensor.stepdetector.xml" - "etc/permissions/android.hardware.strongbox_keystore.xml" - "etc/permissions/android.hardware.telephony.carrierlock.xml" - "etc/permissions/android.hardware.telephony.cdma.xml" - "etc/permissions/android.hardware.telephony.gsm.xml" - "etc/permissions/android.hardware.telephony.ims.xml" - "etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml" - "etc/permissions/android.hardware.usb.accessory.xml" - "etc/permissions/android.hardware.usb.host.xml" - "etc/permissions/android.hardware.vulkan.compute.xml" - "etc/permissions/android.hardware.vulkan.level.xml" - "etc/permissions/android.hardware.vulkan.version.xml" - "etc/permissions/android.hardware.wifi.aware.xml" - "etc/permissions/android.hardware.wifi.direct.xml" - "etc/permissions/android.hardware.wifi.passpoint.xml" - "etc/permissions/android.hardware.wifi.rtt.xml" - "etc/permissions/android.hardware.wifi.xml" - "etc/permissions/android.software.device_id_attestation.xml" - "etc/permissions/android.software.ipsec_tunnels.xml" - "etc/permissions/android.software.midi.xml" - "etc/permissions/android.software.opengles.deqp.level.xml" - "etc/permissions/android.software.sip.voip.xml" - "etc/permissions/android.software.verified_boot.xml" - "etc/permissions/android.software.vulkan.deqp.level.xml" - "etc/permissions/com.google.hardware.camera.easel_2018.xml" - "etc/permissions/com.nxp.mifare.xml" - "etc/permissions/handheld_core_hardware.xml" - "etc/powerhint.json" - "etc/r_submix_audio_policy_configuration.xml" - "etc/sec_config" - "etc/seccomp_policy/configstore@1.1.policy" - "etc/seccomp_policy/mediacodec.policy" - "etc/selinux/plat_pub_versioned.cil" - "etc/selinux/plat_sepolicy_vers.txt" - "etc/selinux/precompiled_sepolicy" - "etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256" - "etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256" - "etc/selinux/selinux_denial_metadata" - "etc/selinux/vendor_file_contexts" - "etc/selinux/vendor_hwservice_contexts" - "etc/selinux/vendor_mac_permissions.xml" - "etc/selinux/vendor_property_contexts" - "etc/selinux/vendor_seapp_contexts" - "etc/selinux/vendor_sepolicy.cil" - "etc/selinux/vendor_service_contexts" - "etc/selinux/vndservice_contexts" - "etc/sensors/hals.conf" - "etc/sound_trigger_mixer_paths.xml" - "etc/sound_trigger_platform_info.xml" - "etc/sysconfig/component-overrides.xml" - "etc/thermal-engine-bonito.conf" - "etc/thermal_info_config.json" - "etc/usb_audio_policy_configuration.xml" - "etc/vintf/compatibility_matrix.xml" - "etc/vintf/manifest.xml" - "etc/vintf/manifest/android.hardware.atrace@1.0-service.pixel.xml" - "etc/vintf/manifest/android.hardware.cas@1.2-service.xml" - "etc/vintf/manifest/android.hardware.contexthub@1.2-generic.xml" - "etc/vintf/manifest/android.hardware.power-service.pixel.xml" - "etc/vintf/manifest/android.hardware.thermal@2.0-service.pixel.xml" - "etc/vintf/manifest/android.hardware.usb.gadget@1.1-service.bonito.xml" - "etc/vintf/manifest/android.hardware.usb@1.3-service.bonito.xml" - "etc/vintf/manifest/android.hardware.wifi.hostapd.xml" - "etc/vintf/manifest/android.hardware.wifi.supplicant.xml" - "etc/vintf/manifest/android.hardware.wifi@1.0-service.xml" - "etc/vintf/manifest/com.android.vibrator.drv2624.xml" - "etc/vintf/manifest/manifest_android.hardware.drm@1.4-service.clearkey.xml" - "etc/vintf/manifest/manifest_android.hardware.health.storage@1.0.xml" - "etc/wifi/p2p_supplicant_overlay.conf" - "etc/wifi/wifi_concurrency_cfg.txt" - "etc/wifi/wpa_supplicant.conf" - "etc/wifi/wpa_supplicant_overlay.conf" - "firmware/crus_sp_config_b4_rx.bin" - "firmware/crus_sp_config_b4_tx.bin" - "firmware/crus_sp_config_s4_rx.bin" - "firmware/crus_sp_config_s4_tx.bin" - "firmware/cs40l20.bin" - "firmware/cs40l20.wmfw" - "firmware/drv2624.bin" - "firmware/rt5514_dsp_fw1.bin" - "firmware/rt5514_dsp_fw2.bin" - "firmware/rt5514_dsp_fw3.bin" - "firmware/rt5514_dsp_fw4.bin" - "firmware/wlan/qca_cld/WCNSS_qcom_cfg.ini" - "lib/android.hardware.audio.common-util.so" - "lib/android.hardware.audio.common@5.0.so" - "lib/android.hardware.audio.common@7.0-enums.so" - "lib/android.hardware.audio.common@7.0-util.so" - "lib/android.hardware.audio.common@7.0.so" - "lib/android.hardware.audio.effect@7.0-util.so" - "lib/android.hardware.audio.effect@7.0.so" - "lib/android.hardware.audio@7.0-util.so" - "lib/android.hardware.audio@7.0.so" - "lib/android.hardware.bluetooth.audio@2.0.so" - "lib/android.hardware.bluetooth.audio@2.1.so" - "lib/android.hardware.boot@1.0.so" - "lib/android.hardware.camera.common@1.0.so" - "lib/android.hardware.camera.device@1.0.so" - "lib/android.hardware.camera.device@3.2.so" - "lib/android.hardware.camera.device@3.3.so" - "lib/android.hardware.camera.device@3.4.so" - "lib/android.hardware.camera.device@3.5.so" - "lib/android.hardware.camera.device@3.6.so" - "lib/android.hardware.camera.provider@2.4-external.so" - "lib/android.hardware.camera.provider@2.4-legacy.so" - "lib/android.hardware.camera.provider@2.4.so" - "lib/android.hardware.cas.native@1.0.so" - "lib/android.hardware.cas@1.0.so" - "lib/android.hardware.cas@1.1.so" - "lib/android.hardware.cas@1.2.so" - "lib/android.hardware.drm@1.0.so" - "lib/android.hardware.gnss@1.0.so" - "lib/android.hardware.gnss@1.1.so" - "lib/android.hardware.light@2.0.so" - "lib/android.hardware.power-V1-ndk_platform.so" - "lib/android.hardware.power@1.0.so" - "lib/android.hardware.power@1.1.so" - "lib/android.hardware.power@1.2.so" - "lib/android.hardware.radio@1.0.so" - "lib/android.hardware.radio@1.1.so" - "lib/android.hardware.soundtrigger@2.1.so" - "lib/android.hardware.soundtrigger@2.2.so" - "lib/android.hidl.allocator@1.0.so" - "lib/camera.device@1.0-impl.so" - "lib/camera.device@3.2-impl.so" - "lib/camera.device@3.3-impl.so" - "lib/camera.device@3.4-external-impl.so" - "lib/camera.device@3.4-impl.so" - "lib/camera.device@3.5-external-impl.so" - "lib/camera.device@3.5-impl.so" - "lib/camera.device@3.6-external-impl.so" - "lib/hw/android.hardware.audio.effect@7.0-impl.so" - "lib/hw/android.hardware.audio@7.0-impl.so" - "lib/hw/android.hardware.bluetooth.audio@2.0-impl.so" - "lib/hw/android.hardware.boot@1.0-impl.so" - "lib/hw/android.hardware.camera.provider@2.4-impl.so" - "lib/hw/android.hardware.drm@1.0-impl.so" - "lib/hw/android.hardware.gnss@1.1-impl-qti.so" - "lib/hw/android.hardware.light@2.0-impl.so" - "lib/hw/android.hardware.memtrack@1.0-impl.so" - "lib/hw/android.hardware.renderscript@1.0-impl.so" - "lib/hw/android.hardware.soundtrigger@2.2-impl.so" - "lib/hw/audio.bluetooth.default.so" - "lib/hw/audio.primary.default.so" - "lib/hw/audio.primary.sdm710.so" - "lib/hw/audio.r_submix.default.so" - "lib/hw/audio.usb.default.so" - "lib/hw/bootctrl.sdm710.so" - "lib/hw/gralloc.default.so" - "lib/hw/local_time.default.so" - "lib/hw/power.default.so" - "lib/hw/sensors.bonito.so" - "lib/hw/vibrator.default.so" - "lib/libalsautils.so" - "lib/libavservices_minijail.so" - "lib/libbluetooth_audio_session.so" - "lib/libeffects.so" - "lib/libeffectsconfig.so" - "lib/libgnss.so" - "lib/libgps.utils.so" - "lib/libloc_core.so" - "lib/liblocation_api.so" - "lib/libmediautils_vendor.so" - "lib/libmemunreachable.so" - "lib/libnbaio_mono.so" - "lib/libopus.so" - "lib/libprotobuf-cpp-full-3.9.1.so" - "lib/libprotobuf-cpp-lite-3.9.1.so" - "lib/libreference-ril.so" - "lib/libril.so" - "lib/librilutils.so" - "lib/libstagefright_amrnb_common.so" - "lib/libstagefright_enc_common.so" - "lib/libstagefright_flacdec.so" - "lib/libstagefright_soft_aacdec.so" - "lib/libstagefright_soft_aacenc.so" - "lib/libstagefright_soft_amrdec.so" - "lib/libstagefright_soft_amrnbenc.so" - "lib/libstagefright_soft_amrwbenc.so" - "lib/libstagefright_soft_avcdec.so" - "lib/libstagefright_soft_avcenc.so" - "lib/libstagefright_soft_flacdec.so" - "lib/libstagefright_soft_flacenc.so" - "lib/libstagefright_soft_g711dec.so" - "lib/libstagefright_soft_gsmdec.so" - "lib/libstagefright_soft_hevcdec.so" - "lib/libstagefright_soft_mp3dec.so" - "lib/libstagefright_soft_mpeg2dec.so" - "lib/libstagefright_soft_mpeg4dec.so" - "lib/libstagefright_soft_mpeg4enc.so" - "lib/libstagefright_soft_opusdec.so" - "lib/libstagefright_soft_rawdec.so" - "lib/libstagefright_soft_vorbisdec.so" - "lib/libstagefright_soft_vpxdec.so" - "lib/libstagefright_soft_vpxenc.so" - "lib/libstagefright_softomx.so" - "lib/libstagefright_softomx_plugin.so" - "lib/libtinycompress.so" - "lib/libvibrator.so" - "lib/libvorbisidec.so" - "lib/libvpx.so" - "lib/libwpa_client.so" - "lib/mediacas/libclearkeycasplugin.so" - "lib/mediadrm/libdrmclearkeyplugin.so" - "lib/modules/lcd.ko" - "lib/modules/modules.alias" - "lib/modules/modules.dep" - "lib/modules/modules.load" - "lib/modules/modules.softdep" - "lib/modules/synaptics_dsx_core.ko" - "lib/modules/synaptics_dsx_fw_update.ko" - "lib/modules/synaptics_dsx_rmi_dev.ko" - "lib/modules/synaptics_dsx_test_reporting.ko" - "lib/modules/wlan.ko" - "lib/soundfx/libaudiopreprocessing.so" - "lib/soundfx/libbundlewrapper.so" - "lib/soundfx/libdownmix.so" - "lib/soundfx/libdynproc.so" - "lib/soundfx/libeffectproxy.so" - "lib/soundfx/libhapticgenerator.so" - "lib/soundfx/libldnhncr.so" - "lib/soundfx/libmalistener.so" - "lib/soundfx/libqcompostprocbundle.so" - "lib/soundfx/libqcomvisualizer.so" - "lib/soundfx/libqcomvoiceprocessing.so" - "lib/soundfx/libqcomvoiceprocessingdescriptors.so" - "lib/soundfx/libreverbwrapper.so" - "lib/soundfx/libvisualizer.so" - "lib/soundfx/libvolumelistener.so" - "lib64/android.frameworks.sensorservice@1.0.so" - "lib64/android.frameworks.stats-V1-ndk_platform.so" - "lib64/android.hardware.atrace@1.0.so" - "lib64/android.hardware.audio.common@5.0.so" - "lib64/android.hardware.bluetooth.audio@2.0.so" - "lib64/android.hardware.bluetooth.audio@2.1.so" - "lib64/android.hardware.boot@1.0.so" - "lib64/android.hardware.camera.common@1.0.so" - "lib64/android.hardware.camera.device@1.0.so" - "lib64/android.hardware.camera.device@3.2.so" - "lib64/android.hardware.camera.device@3.3.so" - "lib64/android.hardware.camera.device@3.4.so" - "lib64/android.hardware.camera.device@3.5.so" - "lib64/android.hardware.camera.device@3.6.so" - "lib64/android.hardware.camera.provider@2.4-external.so" - "lib64/android.hardware.camera.provider@2.4-legacy.so" - "lib64/android.hardware.camera.provider@2.4.so" - "lib64/android.hardware.contexthub@1.0.so" - "lib64/android.hardware.contexthub@1.1.so" - "lib64/android.hardware.contexthub@1.2.so" - "lib64/android.hardware.drm@1.0.so" - "lib64/android.hardware.drm@1.1.so" - "lib64/android.hardware.drm@1.2.so" - "lib64/android.hardware.drm@1.3.so" - "lib64/android.hardware.drm@1.4.so" - "lib64/android.hardware.dumpstate@1.0.so" - "lib64/android.hardware.dumpstate@1.1.so" - "lib64/android.hardware.gnss@1.0.so" - "lib64/android.hardware.gnss@1.1.so" - "lib64/android.hardware.graphics.composer@2.1-resources.so" - "lib64/android.hardware.graphics.composer@2.1.so" - "lib64/android.hardware.graphics.composer@2.2-resources.so" - "lib64/android.hardware.graphics.composer@2.2.so" - "lib64/android.hardware.health.storage@1.0.so" - "lib64/android.hardware.health@1.0.so" - "lib64/android.hardware.health@2.0.so" - "lib64/android.hardware.keymaster@3.0.so" - "lib64/android.hardware.keymaster@4.0.so" - "lib64/android.hardware.keymaster@4.1.so" - "lib64/android.hardware.light@2.0.so" - "lib64/android.hardware.nfc@1.0.so" - "lib64/android.hardware.nfc@1.1.so" - "lib64/android.hardware.nfc@1.2.so" - "lib64/android.hardware.power-V1-ndk_platform.so" - "lib64/android.hardware.power.stats@1.0.so" - "lib64/android.hardware.power@1.0.so" - "lib64/android.hardware.power@1.1.so" - "lib64/android.hardware.power@1.2.so" - "lib64/android.hardware.radio@1.0.so" - "lib64/android.hardware.radio@1.1.so" - "lib64/android.hardware.secure_element@1.0.so" - "lib64/android.hardware.secure_element@1.1.so" - "lib64/android.hardware.sensors@1.0.so" - "lib64/android.hardware.soundtrigger@2.1.so" - "lib64/android.hardware.soundtrigger@2.2.so" - "lib64/android.hardware.tetheroffload.config@1.0.so" - "lib64/android.hardware.tetheroffload.control@1.0.so" - "lib64/android.hardware.thermal@1.0.so" - "lib64/android.hardware.thermal@2.0.so" - "lib64/android.hardware.usb.gadget@1.0.so" - "lib64/android.hardware.usb.gadget@1.1.so" - "lib64/android.hardware.usb@1.0.so" - "lib64/android.hardware.usb@1.1.so" - "lib64/android.hardware.usb@1.2.so" - "lib64/android.hardware.usb@1.3.so" - "lib64/android.hardware.wifi.hostapd@1.0.so" - "lib64/android.hardware.wifi.hostapd@1.1.so" - "lib64/android.hardware.wifi.hostapd@1.2.so" - "lib64/android.hardware.wifi.hostapd@1.3.so" - "lib64/android.hardware.wifi.supplicant@1.0.so" - "lib64/android.hardware.wifi.supplicant@1.1.so" - "lib64/android.hardware.wifi.supplicant@1.2.so" - "lib64/android.hardware.wifi.supplicant@1.3.so" - "lib64/android.hardware.wifi.supplicant@1.4.so" - "lib64/android.hardware.wifi@1.0.so" - "lib64/android.hardware.wifi@1.1.so" - "lib64/android.hardware.wifi@1.2.so" - "lib64/android.hardware.wifi@1.3.so" - "lib64/android.hardware.wifi@1.4.so" - "lib64/android.hardware.wifi@1.5.so" - "lib64/android.hidl.allocator@1.0.so" - "lib64/android.system.wifi.keystore@1.0.so" - "lib64/camera.device@1.0-impl.so" - "lib64/camera.device@3.2-impl.so" - "lib64/camera.device@3.3-impl.so" - "lib64/camera.device@3.4-external-impl.so" - "lib64/camera.device@3.4-impl.so" - "lib64/camera.device@3.5-external-impl.so" - "lib64/camera.device@3.5-impl.so" - "lib64/camera.device@3.6-external-impl.so" - "lib64/ese_spi_nxp.so" - "lib64/hw/android.hardware.bluetooth.audio@2.0-impl.so" - "lib64/hw/android.hardware.boot@1.0-impl.so" - "lib64/hw/android.hardware.camera.provider@2.4-impl.so" - "lib64/hw/android.hardware.drm@1.0-impl.so" - "lib64/hw/android.hardware.gnss@1.1-impl-qti.so" - "lib64/hw/android.hardware.light@2.0-impl.so" - "lib64/hw/android.hardware.memtrack@1.0-impl.so" - "lib64/hw/android.hardware.renderscript@1.0-impl.so" - "lib64/hw/android.hardware.soundtrigger@2.2-impl.so" - "lib64/hw/audio.bluetooth.default.so" - "lib64/hw/audio.primary.default.so" - "lib64/hw/audio.primary.sdm710.so" - "lib64/hw/audio.r_submix.default.so" - "lib64/hw/audio.usb.default.so" - "lib64/hw/bootctrl.sdm710.so" - "lib64/hw/gralloc.default.so" - "lib64/hw/local_time.default.so" - "lib64/hw/power.default.so" - "lib64/hw/sensors.bonito.so" - "lib64/hw/vibrator.default.so" - "lib64/libalsautils.so" - "lib64/libbinderdebug.so" - "lib64/libbluetooth_audio_session.so" - "lib64/libcld80211.so" - "lib64/libdisppower-pixel.so" - "lib64/libeffects.so" - "lib64/libeffectsconfig.so" - "lib64/libgnss.so" - "lib64/libgps.utils.so" - "lib64/libhwc2on1adapter.so" - "lib64/libhwc2onfbadapter.so" - "lib64/libhwminijail.so" - "lib64/libipanat.so" - "lib64/libkeymaster4_1support.so" - "lib64/libkeymaster4support.so" - "lib64/libkeystore-engine-wifi-hidl.so" - "lib64/libkeystore-wifi-hidl.so" - "lib64/libloc_core.so" - "lib64/liblocation_api.so" - "lib64/libnbaio_mono.so" - "lib64/libnetfilter_conntrack.so" - "lib64/libnfnetlink.so" - "lib64/liboffloadhal.so" - "lib64/libperfmgr.so" - "lib64/libpixelhealth.so" - "lib64/libprotobuf-cpp-full-3.9.1.so" - "lib64/libprotobuf-cpp-lite-3.9.1.so" - "lib64/libreference-ril.so" - "lib64/libril.so" - "lib64/librilutils.so" - "lib64/libsensorndkbridge.so" - "lib64/libtinycompress.so" - "lib64/libvibrator.so" - "lib64/libwifi-hal.so" - "lib64/libwpa_client.so" - "lib64/libz_stable.so" - "lib64/ls_client.so" - "lib64/mediacas/libclearkeycasplugin.so" - "lib64/mediadrm/libdrmclearkeyplugin.so" - "lib64/nfc_nci_nxp.so" - "lib64/pixel-power-ext-V1-ndk_platform.so" - "lib64/pixelpowerstats_provider_aidl_interface-cpp.so" - "lib64/soundfx/libaudiopreprocessing.so" - "lib64/soundfx/libbundlewrapper.so" - "lib64/soundfx/libdownmix.so" - "lib64/soundfx/libdynproc.so" - "lib64/soundfx/libeffectproxy.so" - "lib64/soundfx/libhapticgenerator.so" - "lib64/soundfx/libldnhncr.so" - "lib64/soundfx/libmalistener.so" - "lib64/soundfx/libqcompostprocbundle.so" - "lib64/soundfx/libqcomvisualizer.so" - "lib64/soundfx/libqcomvoiceprocessing.so" - "lib64/soundfx/libqcomvoiceprocessingdescriptors.so" - "lib64/soundfx/libreverbwrapper.so" - "lib64/soundfx/libvisualizer.so" - "lib64/soundfx/libvolumelistener.so" - "lib64/vendor.nxp.nxpese@1.0.so" - "lib64/vendor.nxp.nxpnfc@1.0.so" - "odm/etc/NOTICE.xml.gz" - "odm/etc/build.prop" - "odm/etc/group" - "odm/etc/passwd" - "odm/etc/permissions/sku_G020A/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020B/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020C/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020D/android.hardware.nfc.ese.xml" - "odm/etc/permissions/sku_G020D/android.hardware.se.omapi.ese.xml" - "odm/etc/permissions/sku_G020D/com.google.hardware.pixel.japan.xml" - "odm/etc/permissions/sku_G020E/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020F/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020G/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020H/android.hardware.nfc.ese.xml" - "odm/etc/permissions/sku_G020H/com.google.hardware.pixel.japan.xml" - "odm/etc/vintf/manifest_G020A.xml" - "odm/etc/vintf/manifest_G020B.xml" - "odm/etc/vintf/manifest_G020C.xml" - "odm/etc/vintf/manifest_G020D.xml" - "odm/etc/vintf/manifest_G020E.xml" - "odm/etc/vintf/manifest_G020F.xml" - "odm/etc/vintf/manifest_G020G.xml" - "odm/etc/vintf/manifest_G020H.xml" - "odm_dlkm/etc/NOTICE.xml.gz" - "odm_dlkm/etc/build.prop" - "overlay/EmergencyInfo__auto_generated_rro_vendor.apk" - "overlay/NfcNci__auto_generated_rro_vendor.apk" - "overlay/Settings__auto_generated_rro_vendor.apk" - "overlay/StorageManager__auto_generated_rro_vendor.apk" - "overlay/SystemUI__auto_generated_rro_vendor.apk" - "overlay/TeleService__auto_generated_rro_vendor.apk" - "overlay/Telecom__auto_generated_rro_vendor.apk" - "overlay/Traceur__auto_generated_rro_vendor.apk" - "overlay/framework-res__auto_generated_rro_vendor.apk" - "ueventd.rc" - "usr/idc/uinput-fpc.idc" - "usr/keylayout/uinput-fpc.kl" - "vendor_dlkm/etc/NOTICE.xml.gz" - "vendor_dlkm/etc/build.prop" - - # Exclude overlays, symlinks and extra files that we override - - # Overlays - "overlay/SettingsGoogle__auto_generated_rro_vendor.apk" - "overlay/SystemUIGoogle__auto_generated_rro_vendor.apk" - - # SELinux - "etc/selinux/precompiled_sepolicy.system_ext_sepolicy_and_mapping.sha256" - - # Symlinks - "lib/libEGL_adreno.so" - "lib/libq3dtools_adreno.so" - "lib64/libEGL_adreno.so" - "lib64/libq3dtools_adreno.so" - "rfs/apq/gnss/hlos" - "rfs/apq/gnss/ramdumps" - "rfs/apq/gnss/readonly/firmware" - "rfs/apq/gnss/readonly/vendor/firmware" - "rfs/apq/gnss/readwrite" - "rfs/apq/gnss/shared" - "rfs/mdm/adsp/hlos" - "rfs/mdm/adsp/ramdumps" - "rfs/mdm/adsp/readonly/firmware" - "rfs/mdm/adsp/readonly/vendor/firmware" - "rfs/mdm/adsp/readwrite" - "rfs/mdm/adsp/shared" - "rfs/mdm/cdsp/hlos" - "rfs/mdm/cdsp/ramdumps" - "rfs/mdm/cdsp/readonly/firmware" - "rfs/mdm/cdsp/readwrite" - "rfs/mdm/cdsp/shared" - "rfs/mdm/mpss/hlos" - "rfs/mdm/mpss/ramdumps" - "rfs/mdm/mpss/readonly/firmware" - "rfs/mdm/mpss/readonly/vendor/firmware" - "rfs/mdm/mpss/readwrite" - "rfs/mdm/mpss/shared" - "rfs/mdm/slpi/hlos" - "rfs/mdm/slpi/ramdumps" - "rfs/mdm/slpi/readonly/firmware" - "rfs/mdm/slpi/readwrite" - "rfs/mdm/slpi/shared" - "rfs/mdm/tn/hlos" - "rfs/mdm/tn/ramdumps" - "rfs/mdm/tn/readonly/firmware" - "rfs/mdm/tn/readwrite" - "rfs/mdm/tn/shared" - "rfs/msm/adsp/hlos" - "rfs/msm/adsp/ramdumps" - "rfs/msm/adsp/readonly/firmware" - "rfs/msm/adsp/readonly/vendor/firmware" - "rfs/msm/adsp/readwrite" - "rfs/msm/adsp/shared" - "rfs/msm/cdsp/hlos" - "rfs/msm/cdsp/ramdumps" - "rfs/msm/cdsp/readonly/firmware" - "rfs/msm/cdsp/readonly/vendor/firmware" - "rfs/msm/cdsp/readwrite" - "rfs/msm/cdsp/shared" - "rfs/msm/mpss/hlos" - "rfs/msm/mpss/ramdumps" - "rfs/msm/mpss/readonly/firmware" - "rfs/msm/mpss/readonly/vendor/firmware" - "rfs/msm/mpss/readwrite" - "rfs/msm/mpss/shared" - "rfs/msm/slpi/hlos" - "rfs/msm/slpi/ramdumps" - "rfs/msm/slpi/readonly/firmware" - "rfs/msm/slpi/readonly/vendor/firmware" - "rfs/msm/slpi/readwrite" - "rfs/msm/slpi/shared" - - # Exclude files that compile with BUILD_WITHOUT_VENDOR := false - # or manually added as build targets in device-lineage.mk - - # Bluetooth - "lib/android.hardware.bluetooth@1.0.so" - "lib/hardware.google.bluetooth.bt_channel_avoidance@1.0.so" - "lib/hardware.google.bluetooth.sar@1.0.so" - "lib/vendor.qti.hardware.bluetooth_audio@2.0.so" - "lib64/android.hardware.bluetooth@1.0.so" - "lib64/hardware.google.bluetooth.bt_channel_avoidance@1.0.so" - "lib64/hardware.google.bluetooth.sar@1.0.so" - "lib64/vendor.qti.hardware.bluetooth_audio@2.0.so" - - # CHRE - "bin/chre" - "etc/init/chre_daemon.rc" - - # Codec2 - "lib/android.hardware.media.c2@1.0.so" - "lib/libavservices_minijail_vendor.so" - "lib/libcodec2_hidl@1.0.so" - "lib/libcodec2_hidl_plugin.so" - "lib/libcodec2_vndk.so" - "lib/libstagefright_bufferpool@2.0.1.so" - "lib64/android.hardware.media.c2@1.0.so" - "lib64/libcodec2_vndk.so" - "lib64/libstagefright_bufferpool@2.0.1.so" - - # Confirmation UI - "lib64/android.hardware.confirmationui@1.0.so" - "lib64/libteeui_hal_support.so" - - # Display - "bin/hw/vendor.qti.hardware.display.allocator@1.0-service" - "etc/init/vendor.qti.hardware.display.allocator@1.0-service.rc" - "lib/android.hardware.graphics.composer@2.1.so" - "lib/android.hardware.graphics.composer@2.2.so" - "lib/android.hardware.graphics.composer@2.3.so" - "lib/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so" - "lib/hw/gralloc.sdm710.so" - "lib/hw/hwcomposer.sdm710.so" - "lib/hw/memtrack.sdm710.so" - "lib/libdisplaydebug.so" - "lib/libdrm.so" - "lib/libdrmutils.so" - "lib/libgpu_tonemapper.so" - "lib/libgralloccore.so" - "lib/libgrallocutils.so" - "lib/libqdMetaData.so" - "lib/libqdutils.so" - "lib/libqservice.so" - "lib/libsdmcore.so" - "lib/libsdmutils.so" - "lib/vendor.display.config@1.0.so" - "lib/vendor.display.config@1.1.so" - "lib/vendor.display.config@1.2.so" - "lib/vendor.display.config@1.3.so" - "lib64/android.hardware.graphics.composer@2.3.so" - "lib64/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so" - "lib64/hw/gralloc.sdm710.so" - "lib64/hw/hwcomposer.sdm710.so" - "lib64/hw/memtrack.sdm710.so" - "lib64/libdisplaydebug.so" - "lib64/libdrm.so" - "lib64/libdrmutils.so" - "lib64/libgpu_tonemapper.so" - "lib64/libgralloccore.so" - "lib64/libgrallocutils.so" - "lib64/libqdMetaData.so" - "lib64/libqdutils.so" - "lib64/libqservice.so" - "lib64/libsdmcore.so" - "lib64/libsdmutils.so" - "lib64/vendor.display.config@1.0.so" - "lib64/vendor.display.config@1.1.so" - "lib64/vendor.display.config@1.2.so" - "lib64/vendor.display.config@1.3.so" - - # HIDL - "lib/libhidltransport.so" - "lib/libhwbinder.so" - "lib64/libhidltransport.so" - "lib64/libhwbinder.so" - - # Identity credential - "etc/permissions/android.hardware.identity_credential.xml" - "lib64/android.hardware.identity-support-lib.so" - "lib64/libcppbor_external.so" - "lib64/libcppcose_rkp.so" - "lib64/libkeymaster_messages.so" - "lib64/libkeymaster_portable.so" - "lib64/libpuresoftkeymasterdevice.so" - "lib64/libsoft_attestation_cert.so" - - # Json - "lib/libjson.so" - "lib64/libjson.so" - - # Light - "lib/hardware.google.light@1.0.so" - "lib/hw/lights.qcom.so" - "lib64/hardware.google.light@1.0.so" - "lib64/hw/lights.qcom.so" - - # Media - "lib/libOmxCore.so" - "lib/libOmxVdec.so" - "lib/libOmxVenc.so" - "lib/libc2dcolorconvert.so" - "lib/libmm-omxcore.so" - "lib/libplatformconfig.so" - "lib/libstagefrighthw.so" - "lib64/libOmxCore.so" - "lib64/libOmxVdec.so" - "lib64/libOmxVenc.so" - "lib64/libc2dcolorconvert.so" - "lib64/libmm-omxcore.so" - "lib64/libplatformconfig.so" - "lib64/libstagefrighthw.so" - - # Protobuf - "lib/libprotobuf-cpp-full.so" - "lib64/libprotobuf-cpp-full.so" - - # RIL - "bin/cnd" - "bin/diag_mdlog" - "bin/hw/qcrild" - "bin/hw/vendor.google.radioext@1.0-service" - "bin/ims_rtp_daemon" - "bin/imsdatadaemon" - "bin/imsqmidaemon" - "bin/imsrcsd" - "bin/irsc_util" - "bin/modem_svc" - "bin/netmgrd" - "bin/pd-mapper" - "bin/port-bridge" - "bin/qti" - "bin/rmt_storage" - "bin/tftp_server" - "etc/cne/SwimConfig.xml" - "etc/cne/wqeclient/ATT/ATT_profile1.xml" - "etc/cne/wqeclient/ATT/ATT_profile2.xml" - "etc/cne/wqeclient/ATT/ATT_profile3.xml" - "etc/cne/wqeclient/ATT/ATT_profile4.xml" - "etc/cne/wqeclient/ATT/ATT_profile5.xml" - "etc/cne/wqeclient/ATT/ATT_profile6.xml" - "etc/cne/wqeclient/ROW/ROW_profile1.xml" - "etc/cne/wqeclient/ROW/ROW_profile2.xml" - "etc/cne/wqeclient/ROW/ROW_profile3.xml" - "etc/cne/wqeclient/ROW/ROW_profile4.xml" - "etc/cne/wqeclient/ROW/ROW_profile5.xml" - "etc/cne/wqeclient/ROW/ROW_profile6.xml" - "etc/cne/wqeclient/ROW/ROW_profile7.xml" - "etc/cne/wqeclient/VZW/VZW_profile1.xml" - "etc/cne/wqeclient/VZW/VZW_profile2.xml" - "etc/cne/wqeclient/VZW/VZW_profile3.xml" - "etc/cne/wqeclient/VZW/VZW_profile4.xml" - "etc/cne/wqeclient/VZW/VZW_profile5.xml" - "etc/cne/wqeclient/VZW/VZW_profile6.xml" - "etc/data/dsi_config.xml" - "etc/data/netmgr_config.xml" - "etc/init/qcrild.rc" - "etc/init/vendor.google.radioext@1.0-service.rc" - "lib/com.qualcomm.qti.imscmservice@1.0.so" - "lib/com.qualcomm.qti.uceservice@2.0.so" - "lib/com.qualcomm.qti.uceservice@2.1.so" - "lib/com.quicinc.cne.api@1.0.so" - "lib/com.quicinc.cne.api@1.1.so" - "lib/com.quicinc.cne.constants@1.0.so" - "lib/com.quicinc.cne.constants@2.0.so" - "lib/com.quicinc.cne.constants@2.1.so" - "lib/com.quicinc.cne.server@1.0.so" - "lib/com.quicinc.cne.server@2.0.so" - "lib/com.quicinc.cne.server@2.1.so" - "lib/lib-imsdpl.so" - "lib/lib-imsqimf.so" - "lib/lib-imsrcs-v2.so" - "lib/lib-imsxml.so" - "lib/lib-rtpcommon.so" - "lib/lib-rtpcore.so" - "lib/lib-rtpdaemoninterface.so" - "lib/lib-rtpsl.so" - "lib/lib-uceservice.so" - "lib/libcne.so" - "lib/libcneapiclient.so" - "lib/libcneoplookup.so" - "lib/libcneqmiutils.so" - "lib/libconfigdb.so" - "lib/libdiag.so" - "lib/libdsi_netctrl.so" - "lib/libdsutils.so" - "lib/libidl.so" - "lib/liblqe.so" - "lib/libmdmdetect.so" - "lib/libnetmgr.so" - "lib/libpdmapper.so" - "lib/libpdnotifier.so" - "lib/libqcci_legacy.so" - "lib/libqcmaputils.so" - "lib/libqcrilFramework.so" - "lib/libqdi.so" - "lib/libqdp.so" - "lib/libqmi.so" - "lib/libqmi_cci.so" - "lib/libqmi_client_helper.so" - "lib/libqmi_client_qmux.so" - "lib/libqmi_common_so.so" - "lib/libqmi_csi.so" - "lib/libqmi_encdec.so" - "lib/libqmi_vs-google-1.so" - "lib/libqmiservices.so" - "lib/libqrtr.so" - "lib/libqsocket.so" - "lib/libril-qc-ltedirectdisc.so" - "lib/libril-qc-radioconfig.so" - "lib/libril-qcril-hook-oem.so" - "lib/librilqmiservices.so" - "lib/libsettings.so" - "lib/libsystem_health_mon.so" - "lib/libwms.so" - "lib/libwqe.so" - "lib/libxml.so" - "lib/qcrild_librilutils.so" - "lib/vendor.google.radioext@1.0.so" - "lib/vendor.google.radioext@1.1.so" - "lib/vendor.google.radioext@1.2.so" - "lib/vendor.google.radioext@1.3.so" - "lib/vendor.qti.hardware.data.latency@1.0.so" - "lib/vendor.qti.hardware.radio.am@1.0.so" - "lib/vendor.qti.hardware.radio.atcmdfwd@1.0.so" - "lib/vendor.qti.hardware.radio.ims@1.0.so" - "lib/vendor.qti.hardware.radio.ims@1.1.so" - "lib/vendor.qti.hardware.radio.ims@1.2.so" - "lib/vendor.qti.hardware.radio.ims@1.3.so" - "lib/vendor.qti.hardware.radio.ims@1.4.so" - "lib/vendor.qti.hardware.radio.internal.deviceinfo@1.0.so" - "lib/vendor.qti.hardware.radio.qcrilhook@1.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@1.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.1.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.2.so" - "lib/vendor.qti.hardware.radio.uim@1.0.so" - "lib/vendor.qti.hardware.radio.uim@1.1.so" - "lib/vendor.qti.hardware.radio.uim_remote_client@1.0.so" - "lib/vendor.qti.hardware.radio.uim_remote_client@1.1.so" - "lib/vendor.qti.hardware.radio.uim_remote_server@1.0.so" - "lib/vendor.qti.ims.callinfo@1.0.so" - "lib/vendor.qti.imsrtpservice@1.0-service-Impl.so" - "lib/vendor.qti.imsrtpservice@1.0.so" - "lib64/com.qualcomm.qti.imscmservice@1.0.so" - "lib64/com.qualcomm.qti.uceservice@2.0.so" - "lib64/com.qualcomm.qti.uceservice@2.1.so" - "lib64/com.quicinc.cne.api@1.0.so" - "lib64/com.quicinc.cne.api@1.1.so" - "lib64/com.quicinc.cne.constants@1.0.so" - "lib64/com.quicinc.cne.constants@2.0.so" - "lib64/com.quicinc.cne.constants@2.1.so" - "lib64/com.quicinc.cne.server@1.0.so" - "lib64/com.quicinc.cne.server@2.0.so" - "lib64/com.quicinc.cne.server@2.1.so" - "lib64/lib-imsdpl.so" - "lib64/lib-imsqimf.so" - "lib64/lib-imsrcs-v2.so" - "lib64/lib-imsxml.so" - "lib64/lib-rtpcommon.so" - "lib64/lib-rtpcore.so" - "lib64/lib-rtpdaemoninterface.so" - "lib64/lib-rtpsl.so" - "lib64/lib-uceservice.so" - "lib64/libcne.so" - "lib64/libcneapiclient.so" - "lib64/libcneoplookup.so" - "lib64/libcneqmiutils.so" - "lib64/libconfigdb.so" - "lib64/libdiag.so" - "lib64/libdsi_netctrl.so" - "lib64/libdsutils.so" - "lib64/libidl.so" - "lib64/liblqe.so" - "lib64/libmdmdetect.so" - "lib64/libnetmgr.so" - "lib64/libpdmapper.so" - "lib64/libpdnotifier.so" - "lib64/libqcci_legacy.so" - "lib64/libqcmaputils.so" - "lib64/libqcrilFramework.so" - "lib64/libqdi.so" - "lib64/libqdp.so" - "lib64/libqmi.so" - "lib64/libqmi_cci.so" - "lib64/libqmi_client_helper.so" - "lib64/libqmi_client_qmux.so" - "lib64/libqmi_common_so.so" - "lib64/libqmi_csi.so" - "lib64/libqmi_encdec.so" - "lib64/libqmi_modem_svc.so" - "lib64/libqmi_thermal-google-1.so" - "lib64/libqmi_vs-google-1.so" - "lib64/libqmiservices.so" - "lib64/libqrtr.so" - "lib64/libqsocket.so" - "lib64/libril-qc-hal-qmi.so" - "lib64/libril-qc-ltedirectdisc.so" - "lib64/libril-qc-radioconfig.so" - "lib64/libril-qcril-hook-oem.so" - "lib64/librilqmiservices.so" - "lib64/librmnetctl.so" - "lib64/libsettings.so" - "lib64/libsystem_health_mon.so" - "lib64/libwms.so" - "lib64/libwqe.so" - "lib64/libxml.so" - "lib64/qcrild_librilutils.so" - "lib64/vendor.google.radioext@1.0.so" - "lib64/vendor.google.radioext@1.1.so" - "lib64/vendor.google.radioext@1.2.so" - "lib64/vendor.google.radioext@1.3.so" - "lib64/vendor.qti.googleext.imsext@1.0.so" - "lib64/vendor.qti.hardware.data.latency@1.0.so" - "lib64/vendor.qti.hardware.radio.am@1.0.so" - "lib64/vendor.qti.hardware.radio.atcmdfwd@1.0.so" - "lib64/vendor.qti.hardware.radio.ims@1.0.so" - "lib64/vendor.qti.hardware.radio.ims@1.1.so" - "lib64/vendor.qti.hardware.radio.ims@1.2.so" - "lib64/vendor.qti.hardware.radio.ims@1.3.so" - "lib64/vendor.qti.hardware.radio.ims@1.4.so" - "lib64/vendor.qti.hardware.radio.internal.deviceinfo@1.0.so" - "lib64/vendor.qti.hardware.radio.lpa@1.0.so" - "lib64/vendor.qti.hardware.radio.qcrilhook@1.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@1.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.1.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.2.so" - "lib64/vendor.qti.hardware.radio.uim@1.0.so" - "lib64/vendor.qti.hardware.radio.uim@1.1.so" - "lib64/vendor.qti.hardware.radio.uim_remote_client@1.0.so" - "lib64/vendor.qti.hardware.radio.uim_remote_client@1.1.so" - "lib64/vendor.qti.hardware.radio.uim_remote_server@1.0.so" - "lib64/vendor.qti.ims.callinfo@1.0.so" - "lib64/vendor.qti.imsrtpservice@1.0-service-Impl.so" - "lib64/vendor.qti.imsrtpservice@1.0.so" - "radio/qcril_database/qcril.db" - "radio/qcril_database/upgrade/0_initial.sql" - "radio/qcril_database/upgrade/10_remove_germany_hard_ecc_110.sql" - "radio/qcril_database/upgrade/11_israel_normal_ecc.sql" - "radio/qcril_database/upgrade/12_brazil_ecc.sql" - "radio/qcril_database/upgrade/13_show_emer_ui_in_india.sql" - "radio/qcril_database/upgrade/1_version_intro.sql" - "radio/qcril_database/upgrade/2_version_add_wps_config.sql" - "radio/qcril_database/upgrade/3_version_google_feature.sql" - "radio/qcril_database/upgrade/3_version_update_wps_config.sql" - "radio/qcril_database/upgrade/4_version_google_feature.sql" - "radio/qcril_database/upgrade/5_recheck_ecc_setting.sql" - "radio/qcril_database/upgrade/6_remove_unnecessary_entry.sql" - "radio/qcril_database/upgrade/7_singapore_ecc_995.sql" - "radio/qcril_database/upgrade/8_germany_ecc_110.sql" - "radio/qcril_database/upgrade/9_remove_germany_ecc_110.sql" - - # Wi-Fi - "lib/libcld80211.so" - "lib/libwifi-hal-ctrl.so" - "lib/libwifi-hal-qcom.so" - "lib64/libwifi-hal-ctrl.so" - "lib64/libwifi-hal-qcom.so" - - # Wi-Fi service - "bin/hw/vendor.google.wifi_ext@1.0-service-vendor" - "etc/init/vendor.google.wifi_ext@1.0-service.rc" - "etc/vintf/manifest/manifest_wifi_ext.xml" - "lib64/google_wifi_firmware_config_info_cc_proto.so" - "lib64/vendor.google.wifi_ext@1.1.so" - "lib64/vendor.google.wifi_ext@1.2.so" - - # Misc interfaces - "lib/android.frameworks.sensorservice@1.0.so" - "lib/android.hardware.gatekeeper@1.0.so" - "lib/android.hardware.keymaster@3.0.so" - "lib/android.hardware.keymaster@4.0.so" - "lib/android.hardware.sensors@1.0.so" - "lib/android.hardware.sensors@2.0.so" - "lib64/android.frameworks.stats@1.0.so" - "lib64/android.hardware.authsecret@1.0.so" - "lib64/android.hardware.biometrics.fingerprint@2.1.so" - "lib64/android.hardware.biometrics.fingerprint@2.2.so" - "lib64/android.hardware.gatekeeper@1.0.so" - "lib64/android.hardware.neuralnetworks@1.0.so" - "lib64/android.hardware.neuralnetworks@1.1.so" - "lib64/android.hardware.neuralnetworks@1.2.so" - "lib64/android.hardware.neuralnetworks@1.3.so" - "lib64/android.hardware.oemlock@1.0.so" - "lib64/android.hardware.radio.config@1.0.so" - "lib64/android.hardware.radio.config@1.1.so" - "lib64/android.hardware.radio.deprecated@1.0.so" - "lib64/android.hardware.radio@1.2.so" - "lib64/android.hardware.radio@1.3.so" - "lib64/android.hardware.sensors@2.0.so" - "lib64/android.hardware.weaver@1.0.so" - "lib64/android.system.net.netd@1.0.so" - "lib64/android.system.net.netd@1.1.so" - - # Completely skip files that are not required - - # Cryptfshw - "etc/init/vendor.qti.hardware.cryptfshw@1.0-service-qti.rc" - "lib/libcryptfshwcommon.so" - "lib/vendor.qti.hardware.cryptfshw@1.0.so" - "lib64/libcryptfshwcommon.so" - "lib64/vendor.qti.hardware.cryptfshw@1.0.so" - - # Display - "lib/libdisplayconfig.so" - "lib64/libdisplayconfig.so" - - # Google battery - "bin/hw/vendor.google.google_battery@1.1-service-vendor" - "etc/init/vendor.google.google_battery@1.1-service.rc" - "lib64/vendor.google.google_battery@1.0.so" - "lib64/vendor.google.google_battery@1.1.so" - - # IOP - "lib/vendor.qti.hardware.iop@1.0.so" - "lib64/vendor.qti.hardware.iop@1.0.so" - - # Perf - "lib/vendor.qti.hardware.perf@1.0.so" - "lib/vendor.qti.hardware.perf@2.0.so" - "lib64/vendor.qti.hardware.perf@1.0.so" - "lib64/vendor.qti.hardware.perf@2.0.so" - - # Test mapping - "firmware/TEST_MAPPING" -) - -# Initialize the helper -setup_vendor_deps "${ANDROID_ROOT}" - -generate_prop_list_from_image "${_input_image}" "${_output_file}" VENDOR_SKIP_FILES - -# Fixups -function presign() { - sed -i "s|vendor/${1}$|vendor/${1};PRESIGNED|g" "${_output_file}" -} - -function symlink() { - sed -i "s|vendor/${1}$|vendor/${1};SYMLINK=${2}|g" "${_output_file}" -} - -function as_module() { - sed -i "s|vendor/${1}$|-vendor/${1}|g" "${_output_file}" -} - -function header() { - sed -i "1s/^/${1}\n/" "${_output_file}" -} - -symlink "lib/egl/libEGL_adreno.so" "vendor/lib/libEGL_adreno.so" -symlink "lib/egl/libGLESv2_adreno.so" "vendor/lib/libGLESv2_adreno.so" -symlink "lib/egl/libq3dtools_adreno.so" "vendor/lib/libq3dtools_adreno.so" -symlink "lib64/egl/libEGL_adreno.so" "vendor/lib64/libEGL_adreno.so" -symlink "lib64/egl/libGLESv2_adreno.so" "vendor/lib64/libGLESv2_adreno.so" -symlink "lib64/egl/libq3dtools_adreno.so" "vendor/lib64/libq3dtools_adreno.so" - -as_module "lib/libbtnv.so" -as_module "lib/libadsprpc.so" -as_module "lib/libMpeg4SwEncoder.so" -as_module "lib64/libbtnv.so" -as_module "lib64/libadsprpc.so" -as_module "lib64/libMpeg4SwEncoder.so" - -header "# All blobs are extracted from Google factory images for each new ASB" diff --git a/bonito/setup-makefiles.py b/bonito/setup-makefiles.py new file mode 100755 index 00000000..32947cfe --- /dev/null +++ b/bonito/setup-makefiles.py @@ -0,0 +1 @@ +#!./extract-files.py --regenerate_makefiles diff --git a/bonito/setup-makefiles.sh b/bonito/setup-makefiles.sh deleted file mode 100755 index 828e2cfc..00000000 --- a/bonito/setup-makefiles.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -DEVICE=bonito -VENDOR=google - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -# Initialize the helper -setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" - -# Warning headers and guards -write_headers - -write_makefiles "${MY_DIR}/proprietary-files.txt" true -write_makefiles "${MY_DIR}/proprietary-files-carriersettings.txt" true -write_makefiles "${MY_DIR}/proprietary-files-radio.txt" true -write_makefiles "${MY_DIR}/proprietary-files-vendor.txt" true - -append_firmware_calls_to_makefiles "${MY_DIR}/proprietary-firmware.txt" - -# Finish -write_footers diff --git a/bootctrl/Android.bp b/bootctrl/Android.bp deleted file mode 100644 index e990ba1a..00000000 --- a/bootctrl/Android.bp +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright (C) 2019 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. -// - -package { - default_applicable_licenses: ["Android-Apache-2.0"], -} - -cc_library { - name: "bootctrl.sdm710", - defaults: ["bootctrl_hal_defaults"], - static_libs: ["libgptutils.bonito"], -} diff --git a/device-bonito.mk b/device-bonito.mk index c95e14d0..55809ff9 100644 --- a/device-bonito.mk +++ b/device-bonito.mk @@ -20,6 +20,9 @@ include device/google/bonito/device-common.mk DEVICE_PACKAGE_OVERLAYS += device/google/bonito/bonito/overlay +# CHRE +$(call soong_config_set,chre,chre_daemon_dsp_library,//vendor/google/bonito:libadsprpc) + # SKU specific RROs PRODUCT_PACKAGES += \ SettingsOverlayG020A \ diff --git a/device-common.mk b/device-common.mk index 95b4cf12..3d5a4ccf 100644 --- a/device-common.mk +++ b/device-common.mk @@ -30,10 +30,6 @@ PRODUCT_PROPERTY_OVERRIDES += vendor.audio.adm.buffering.ms=3 PRODUCT_PROPERTY_OVERRIDES += audio_hal.period_multiplier=2 PRODUCT_PROPERTY_OVERRIDES += af.fast_track_multiplier=1 -# Set c2 codec in default -PRODUCT_PROPERTY_OVERRIDES += debug.stagefright.ccodec=4 -PRODUCT_PROPERTY_OVERRIDES += debug.stagefright.omx_default_rank=512 - # Setting vendor SPL VENDOR_SECURITY_PATCH = 2022-05-05 @@ -98,8 +94,6 @@ PRODUCT_COPY_FILES += \ PRODUCT_USE_DYNAMIC_PARTITIONS := true PRODUCT_RETROFIT_DYNAMIC_PARTITIONS := true PRODUCT_PACKAGES += \ - bootctrl.sdm710 \ - bootctrl.sdm710.recovery \ check_dynamic_partitions \ AB_OTA_POSTINSTALL_CONFIG += \ diff --git a/device-lineage.mk b/device-lineage.mk index c7dc0269..d0329f44 100644 --- a/device-lineage.mk +++ b/device-lineage.mk @@ -10,9 +10,6 @@ DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay-lineage # Add common definitions for Qualcomm $(call inherit-product, hardware/qcom-caf/common/common.mk) -# PifPrebuilt -$(call inherit-product-if-exists, vendor/certification/config.mk) - # AiAi Config PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/allowlist_com.google.android.as.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/sysconfig/allowlist_com.google.android.as.xml @@ -31,15 +28,20 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.telephony.euicc.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.hardware.telephony.euicc.xml # GMS -# ifeq ($(WITH_GMS),true) -# GMS_MAKEFILE=gms_minimal.mk -# endif -WITH_GMS := true -$(call inherit-product, vendor/gapps/arm64/arm64-vendor.mk) +ifeq ($(WITH_GMS),true) +GMS_MAKEFILE=gms_minimal.mk +endif # Google Assistant PRODUCT_PRODUCT_PROPERTIES += ro.opa.eligible_device=true +# Lineage Health +include hardware/google/pixel/lineage_health/device.mk + +$(call soong_config_set,lineage_health,charging_control_charging_path,/sys/class/power_supply/battery/charge_disable) +$(call soong_config_set,lineage_health,charging_control_charging_enabled,0) +$(call soong_config_set,lineage_health,charging_control_charging_disabled,1) + # LiveDisplay PRODUCT_PACKAGES += \ vendor.lineage.livedisplay@2.0-service-sdm @@ -53,75 +55,20 @@ PRODUCT_PACKAGES += \ PresencePolling \ RcsService -# Build necessary packages for product - -# Display -PRODUCT_PACKAGES += \ - vendor.display.config@1.0 - # Build necessary packages for vendor -# Bluetooth -PRODUCT_PACKAGES += \ - android.hardware.bluetooth@1.0.vendor \ - hardware.google.bluetooth.bt_channel_avoidance@1.0.vendor \ - hardware.google.bluetooth.sar@1.0.vendor:64 \ - vendor.qti.hardware.bluetooth_audio@2.0.vendor - # CHRE PRODUCT_PACKAGES += \ - chre - -# Codec2 -PRODUCT_PACKAGES += \ - android.hardware.media.c2@1.0.vendor:32 \ - libavservices_minijail_vendor:32 \ - libavservices_minijail.vendor:64 \ - libcodec2_hidl@1.0.vendor:32 \ - libcodec2_vndk.vendor \ - libstagefright_bufferpool@2.0.1.vendor + chre_daemon_msm # Configstore PRODUCT_PACKAGES += \ disable_configstore -# Confirmation UI -PRODUCT_PACKAGES += \ - android.hardware.confirmationui@1.0.vendor:64 \ - libteeui_hal_support.vendor:64 - -# Display -PRODUCT_PACKAGES += \ - vendor.display.config@1.0.vendor \ - vendor.display.config@1.1.vendor \ - vendor.display.config@1.2.vendor \ - vendor.display.config@1.3.vendor - -# HIDL -PRODUCT_PACKAGES += \ - libhidltransport.vendor \ - libhwbinder.vendor - # Identity credential PRODUCT_PACKAGES += \ - android.hardware.identity-support-lib.vendor:64 \ android.hardware.identity_credential.xml -# Nos -PRODUCT_PACKAGES += \ - libkeymaster4support.vendor:64 \ - libkeymaster4_1support.vendor:64 - -# Json -PRODUCT_PACKAGES += \ - libjson - -# Protobuf -PRODUCT_PACKAGES += \ - libprotobuf-cpp-full-vendorcompat \ - libprotobuf-cpp-full-3.9.1-vendorcompat \ - libprotobuf-cpp-lite-3.9.1-vendorcompat - # Telephony PRODUCT_PACKAGES += \ qti-telephony-hidl-wrapper \ @@ -133,68 +80,7 @@ PRODUCT_PACKAGES += \ # VNDK FWK detect PRODUCT_PACKAGES += \ - libqti_vndfwk_detect.vendor \ libvndfwk_detect_jni.qti.vendor -# Wi-Fi -PRODUCT_PACKAGES += \ - android.hardware.wifi-V2-ndk.vendor:64 \ - android.hardware.wifi@1.0.vendor:64 \ - libwifi-hal:64 \ - libwifi-hal-qcom \ - libwifi-system-iface.vendor:64 - -# Misc interfaces -PRODUCT_PACKAGES += \ - android.frameworks.sensorservice@1.0.vendor \ - android.frameworks.stats@1.0.vendor:64 \ - android.hardware.authsecret@1.0.vendor:64 \ - android.hardware.biometrics.fingerprint@2.1.vendor:64 \ - android.hardware.biometrics.fingerprint@2.2.vendor:64 \ - android.hardware.gatekeeper@1.0.vendor \ - android.hardware.keymaster@3.0.vendor:32 \ - android.hardware.keymaster@4.0.vendor:32 \ - android.hardware.keymaster@4.1.vendor:64 \ - android.hardware.neuralnetworks@1.0.vendor:64 \ - android.hardware.neuralnetworks@1.1.vendor:64 \ - android.hardware.neuralnetworks@1.2.vendor:64 \ - android.hardware.neuralnetworks@1.3.vendor:64 \ - android.hardware.oemlock@1.0.vendor:64 \ - android.hardware.radio.config@1.0.vendor:64 \ - android.hardware.radio.config@1.1.vendor:64 \ - android.hardware.radio.config@1.2.vendor:64 \ - android.hardware.radio.deprecated@1.0.vendor:64 \ - android.hardware.radio@1.2.vendor:64 \ - android.hardware.radio@1.3.vendor:64 \ - android.hardware.radio@1.4.vendor:64 \ - android.hardware.radio@1.5.vendor:64 \ - android.hardware.secure_element@1.1.vendor:64 \ - android.hardware.secure_element@1.2.vendor:64 \ - android.hardware.sensors@1.0.vendor:32 \ - android.hardware.sensors@2.0.vendor \ - android.hardware.thermal@1.0.vendor:64 \ - android.hardware.weaver@1.0.vendor:64 \ - android.system.net.netd@1.1.vendor:64 - -# Misc -PRODUCT_PACKAGES += \ - libcrypto_utils.vendor:64 \ - libpng.vendor \ - libsqlite.vendor \ - libssl.vendor:32 - # Properties TARGET_VENDOR_PROP := $(LOCAL_PATH)/vendor.prop - -# Shims -PRODUCT_PACKAGES += \ - android.frameworks.stats-V1-ndk_platform.vendor:64 \ - android.hardware.identity-V3-ndk_platform.vendor:64 \ - android.hardware.keymaster-V3-ndk_platform.vendor:64 \ - android.hardware.power-V1-ndk_platform.vendor:64 \ - android.hardware.power.stats-V1-ndk_platform:64 \ - android.hardware.rebootescrow-V1-ndk_platform.vendor:64 - -# VNDK -PRODUCT_PACKAGES += \ - libcrypto-v33 diff --git a/device-sargo.mk b/device-sargo.mk index e4931560..9ce8c15f 100644 --- a/device-sargo.mk +++ b/device-sargo.mk @@ -20,6 +20,9 @@ include device/google/bonito/device-common.mk DEVICE_PACKAGE_OVERLAYS += device/google/bonito/sargo/overlay +# CHRE +$(call soong_config_set,chre,chre_daemon_dsp_library,//vendor/google/sargo:libadsprpc) + # SKU specific RROs PRODUCT_PACKAGES += \ SettingsOverlayG020E \ @@ -24,12 +24,8 @@ PRODUCT_SOONG_NAMESPACES += \ hardware/google/pixel \ hardware/qcom/sdm845 \ hardware/qcom/wlan/legacy \ - vendor/google/camera \ - vendor/qcom/sdm845 \ - vendor/google/interfaces \ - vendor/google_devices/common/proprietary/confirmatioui_hal \ - vendor/google_nos/host/android \ - vendor/google_nos/test/system-test-harness + hardware/qcom-caf/bootctrl \ + vendor/qcom/opensource/data-ipa-cfg-mgr-legacy-um PRODUCT_PROPERTY_OVERRIDES += \ keyguard.no_require_sim=true @@ -137,10 +133,6 @@ PRODUCT_PACKAGES += \ PRODUCT_PRODUCT_PROPERTIES += \ ro.sys.sdcardfs=1 -PRODUCT_PACKAGES += \ - bootctrl.sdm710 \ - bootctrl.sdm710.recovery - PRODUCT_PROPERTY_OVERRIDES += \ ro.cp_system_other_odex=1 @@ -350,10 +342,6 @@ PRODUCT_PACKAGES += \ android.hardware.graphics.mapper@2.0-impl-qti-display \ vendor.qti.hardware.display.allocator@1.0-service -# RenderScript HAL -PRODUCT_PACKAGES += \ - android.hardware.renderscript@1.0-impl - # Health HAL PRODUCT_PACKAGES += \ android.hardware.health@2.1-impl-bonito \ @@ -372,9 +360,7 @@ PRODUCT_PROPERTY_OVERRIDES += \ # Memtrack HAL PRODUCT_PACKAGES += \ - memtrack.$(TARGET_CHIPSET) \ - android.hardware.memtrack@1.0-impl \ - android.hardware.memtrack@1.0-service + vendor.qti.hardware.memtrack-service # Bluetooth SoC PRODUCT_PROPERTY_OVERRIDES += \ @@ -426,22 +412,6 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ android.hardware.usb.gadget-service.bonito -PRODUCT_PACKAGES += \ - libmm-omxcore \ - libOmxCore \ - libstagefrighthw \ - libOmxVdec \ - libOmxVenc \ - libc2dcolorconvert - -# Enable Codec 2.0 -PRODUCT_PROPERTY_OVERRIDES += \ - debug.media.codec2=2 \ - -# Disable OMX -PRODUCT_PROPERTY_OVERRIDES += \ - vendor.media.omx=0 \ - # Create input surface on the framework side PRODUCT_PROPERTY_OVERRIDES += \ debug.stagefright.c2inputsurface=-1 \ @@ -488,9 +458,10 @@ endif # Boot control HAL PRODUCT_PACKAGES += \ - android.hardware.boot@1.2-impl-pixel-legacy \ - android.hardware.boot@1.2-impl-pixel-legacy.recovery \ - android.hardware.boot@1.2-service \ + android.hardware.boot-service.qti \ + android.hardware.boot-service.qti.recovery + +$(call soong_config_set,QTI_GPT_UTILS,USE_BSG_FRAMEWORK,false) PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/thermal_info_config_$(PRODUCT_HARDWARE).json:$(TARGET_COPY_OUT_VENDOR)/etc/thermal_info_config.json @@ -527,8 +498,8 @@ endif # Wifi PRODUCT_PACKAGES += \ + android.hardware.wifi-service \ wificond \ - libwpa_client \ WifiOverlay # Connectivity @@ -600,10 +571,7 @@ PRODUCT_COPY_FILES += \ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/media_codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \ $(LOCAL_PATH)/media_codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \ - frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \ - frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_video.xml \ - $(LOCAL_PATH)/media_profiles_V1_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \ - $(LOCAL_PATH)/media_codecs_omx.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_omx.xml + $(LOCAL_PATH)/media_profiles_V1_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml PRODUCT_PROPERTY_OVERRIDES += \ audio.snd_card.open.retries=50 @@ -619,10 +587,6 @@ PRODUCT_PACKAGES += \ PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/gps.conf:$(TARGET_COPY_OUT_VENDOR)/etc/gps.conf -# Vendor seccomp policy files for media components: -PRODUCT_COPY_FILES += \ - $(LOCAL_PATH)/seccomp_policy/mediacodec.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/mediacodec.policy - ifneq (,$(filter eng, $(TARGET_BUILD_VARIANT))) # Subsystem ramdump PRODUCT_PROPERTY_OVERRIDES += \ diff --git a/gpt-utils/Android.bp b/dumpstate/Android.bp index f599f1a8..1ccc41b5 100644 --- a/gpt-utils/Android.bp +++ b/dumpstate/Android.bp @@ -1,5 +1,5 @@ // -// Copyright (C) 2019 The Android Open Source Project +// Copyright 2016 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. @@ -16,32 +16,32 @@ package { // See: http://go/android-license-faq - // A large-scale-change added 'default_applicable_licenses' to import - // all of the 'license_kinds' from "device_google_bonito_license" - // to get the below license kinds: - // SPDX-license-identifier-BSD - default_applicable_licenses: ["device_google_bonito_license"], + default_applicable_licenses: [ + "Android-Apache-2.0", + ], } -cc_library { - name: "libgptutils.bonito", - vendor: true, - recovery_available: true, +cc_binary { + name: "android.hardware.dumpstate@1.1-service.bonito", + init_rc: ["android.hardware.dumpstate@1.1-service.bonito.rc"], + relative_install_path: "hw", + srcs: [ + "DumpstateDevice.cpp", + "service.cpp", + ], shared_libs: [ + "android.hardware.dumpstate@1.0", + "android.hardware.dumpstate@1.1", + "libbase", "libcutils", + "libdumpstateutil", + "libhidlbase", "liblog", - "libz", + "libutils", ], cflags: [ - "-Wall", "-Werror", + "-Wall", ], - srcs: [ - "gpt-utils.cpp", - ], - owner: "qti", - header_libs: [ - "device_kernel_headers", - ], - export_include_dirs: ["."], + proprietary: true, } diff --git a/dumpstate/Android.mk b/dumpstate/Android.mk deleted file mode 100644 index 6e7a5399..00000000 --- a/dumpstate/Android.mk +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright 2016 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. -# - -LOCAL_PATH:= $(call my-dir) -include $(CLEAR_VARS) -LOCAL_MODULE := android.hardware.dumpstate@1.1-service.bonito -LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0 -LOCAL_LICENSE_CONDITIONS := notice -LOCAL_INIT_RC := android.hardware.dumpstate@1.1-service.bonito.rc -LOCAL_MODULE_RELATIVE_PATH := hw - -LOCAL_SRC_FILES := \ - DumpstateDevice.cpp \ - service.cpp - -LOCAL_SHARED_LIBRARIES := \ - android.hardware.dumpstate@1.0 \ - android.hardware.dumpstate@1.1 \ - libbase \ - libcutils \ - libdumpstateutil \ - libhidlbase \ - liblog \ - libutils - -LOCAL_CFLAGS := -Werror -Wall - -LOCAL_MODULE_TAGS := optional -LOCAL_PROPRIETARY_MODULE := true - -include $(BUILD_EXECUTABLE) diff --git a/dumpstate/DumpstateDevice.cpp b/dumpstate/DumpstateDevice.cpp index cae03783..cae03783 100755..100644 --- a/dumpstate/DumpstateDevice.cpp +++ b/dumpstate/DumpstateDevice.cpp diff --git a/extract-files.py b/extract-files.py new file mode 100755 index 00000000..7c80ec7f --- /dev/null +++ b/extract-files.py @@ -0,0 +1,13 @@ +#!/bin/bash +# +# SPDX-FileCopyrightText: 2024 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +set -e + +MY_DIR="$(cd "$(dirname "${0}")"; pwd -P)" + +pushd "${MY_DIR}/bonito" +./extract-files.py $@ +popd diff --git a/extract-files.sh b/extract-files.sh deleted file mode 100755 index 86bfc713..00000000 --- a/extract-files.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2020 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -MY_DIR="$(cd "$(dirname "${0}")"; pwd -P)" - -"${MY_DIR}/bonito/extract-files.sh" "$@" diff --git a/gpt-utils/gpt-utils.cpp b/gpt-utils/gpt-utils.cpp deleted file mode 100644 index 6e8f91bc..00000000 --- a/gpt-utils/gpt-utils.cpp +++ /dev/null @@ -1,1546 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define _LARGEFILE64_SOURCE /* enable lseek64() */ - -/****************************************************************************** - * INCLUDE SECTION - ******************************************************************************/ -#include <fcntl.h> -#include <string.h> -#include <errno.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <scsi/ufs/ioctl.h> -#include <scsi/ufs/ufs.h> -#include <unistd.h> -#include <linux/fs.h> -#include <limits.h> -#include <dirent.h> -#include <inttypes.h> -#include <linux/kernel.h> -#include <map> -#include <vector> -#include <string> -#define LOG_TAG "gpt-utils" -#include <cutils/log.h> -#include <cutils/properties.h> -#include "gpt-utils.h" -#include <endian.h> -#include <zlib.h> - - -/****************************************************************************** - * DEFINE SECTION - ******************************************************************************/ -#define BLK_DEV_FILE "/dev/block/mmcblk0" -/* list the names of the backed-up partitions to be swapped */ -/* extension used for the backup partitions - tzbak, abootbak, etc. */ -#define BAK_PTN_NAME_EXT "bak" -#define XBL_PRIMARY "/dev/block/platform/soc/7c4000.sdhci/by-name/xbl" -#define XBL_BACKUP "/dev/block/platform/soc/7c4000.sdhci/by-name/xblbak" -#define XBL_AB_PRIMARY "/dev/block/platform/soc/7c4000.sdhci/by-name/xbl_a" -#define XBL_AB_SECONDARY "/dev/block/platform/soc/7c4000.sdhci/by-name/xbl_b" -/* GPT defines */ -#define MAX_LUNS 26 -//Size of the buffer that needs to be passed to the UFS ioctl -#define UFS_ATTR_DATA_SIZE 32 -//This will allow us to get the root lun path from the path to the partition. -//i.e: from /dev/block/sdaXXX get /dev/block/sda. The assumption here is that -//the boot critical luns lie between sda to sdz which is acceptable because -//only user added external disks,etc would lie beyond that limit which do not -//contain partitions that interest us here. -#define PATH_TRUNCATE_LOC (sizeof("/dev/block/sda") - 1) - -//From /dev/block/sda get just sda -#define LUN_NAME_START_LOC (sizeof("/dev/block/") - 1) -#define BOOT_LUN_A_ID 1 -#define BOOT_LUN_B_ID 2 -/****************************************************************************** - * MACROS - ******************************************************************************/ - - -#define GET_4_BYTES(ptr) ((uint32_t) *((uint8_t *)(ptr)) | \ - ((uint32_t) *((uint8_t *)(ptr) + 1) << 8) | \ - ((uint32_t) *((uint8_t *)(ptr) + 2) << 16) | \ - ((uint32_t) *((uint8_t *)(ptr) + 3) << 24)) - -#define GET_8_BYTES(ptr) ((uint64_t) *((uint8_t *)(ptr)) | \ - ((uint64_t) *((uint8_t *)(ptr) + 1) << 8) | \ - ((uint64_t) *((uint8_t *)(ptr) + 2) << 16) | \ - ((uint64_t) *((uint8_t *)(ptr) + 3) << 24) | \ - ((uint64_t) *((uint8_t *)(ptr) + 4) << 32) | \ - ((uint64_t) *((uint8_t *)(ptr) + 5) << 40) | \ - ((uint64_t) *((uint8_t *)(ptr) + 6) << 48) | \ - ((uint64_t) *((uint8_t *)(ptr) + 7) << 56)) - -#define PUT_4_BYTES(ptr, y) *((uint8_t *)(ptr)) = (y) & 0xff; \ - *((uint8_t *)(ptr) + 1) = ((y) >> 8) & 0xff; \ - *((uint8_t *)(ptr) + 2) = ((y) >> 16) & 0xff; \ - *((uint8_t *)(ptr) + 3) = ((y) >> 24) & 0xff; - -/****************************************************************************** - * TYPES - ******************************************************************************/ -using namespace std; -enum gpt_state { - GPT_OK = 0, - GPT_BAD_SIGNATURE, - GPT_BAD_CRC -}; -//List of LUN's containing boot critical images. -//Required in the case of UFS devices -struct update_data { - char lun_list[MAX_LUNS][PATH_MAX]; - uint32_t num_valid_entries; -}; - -/****************************************************************************** - * FUNCTIONS - ******************************************************************************/ -/** - * ========================================================================== - * - * \brief Read/Write len bytes from/to block dev - * - * \param [in] fd block dev file descriptor (returned from open) - * \param [in] rw RW flag: 0 - read, != 0 - write - * \param [in] offset block dev offset [bytes] - RW start position - * \param [in] buf Pointer to the buffer containing the data - * \param [in] len RW size in bytes. Buf must be at least that big - * - * \return 0 on success - * - * ========================================================================== - */ -static int blk_rw(int fd, int rw, int64_t offset, uint8_t *buf, unsigned len) -{ - int r; - - if (lseek64(fd, offset, SEEK_SET) < 0) { - fprintf(stderr, "block dev lseek64 %" PRIi64 " failed: %s\n", offset, - strerror(errno)); - return -1; - } - - if (rw) - r = write(fd, buf, len); - else - r = read(fd, buf, len); - - if (r < 0) { - fprintf(stderr, "block dev %s failed: %s\n", rw ? "write" : "read", - strerror(errno)); - } else { - if (rw) { - r = fsync(fd); - if (r < 0) - fprintf(stderr, "fsync failed: %s\n", strerror(errno)); - } else { - r = 0; - } - } - - return r; -} - - - -/** - * ========================================================================== - * - * \brief Search within GPT for partition entry with the given name - * or it's backup twin (name-bak). - * - * \param [in] ptn_name Partition name to seek - * \param [in] pentries_start Partition entries array start pointer - * \param [in] pentries_end Partition entries array end pointer - * \param [in] pentry_size Single partition entry size [bytes] - * - * \return First partition entry pointer that matches the name or NULL - * - * ========================================================================== - */ -static uint8_t *gpt_pentry_seek(const char *ptn_name, - const uint8_t *pentries_start, - const uint8_t *pentries_end, - uint32_t pentry_size) -{ - char *pentry_name; - unsigned len = strlen(ptn_name); - - for (pentry_name = (char *) (pentries_start + PARTITION_NAME_OFFSET); - pentry_name < (char *) pentries_end; pentry_name += pentry_size) { - char name8[MAX_GPT_NAME_SIZE / 2]; - unsigned i; - - /* Partition names in GPT are UTF-16 - ignoring UTF-16 2nd byte */ - for (i = 0; i < sizeof(name8); i++) - name8[i] = pentry_name[i * 2]; - if (!strncmp(ptn_name, name8, len)) - if (name8[len] == 0 || !strcmp(&name8[len], BAK_PTN_NAME_EXT)) - return (uint8_t *) (pentry_name - PARTITION_NAME_OFFSET); - } - - return NULL; -} - - - -/** - * ========================================================================== - * - * \brief Swaps boot chain in GPT partition entries array - * - * \param [in] pentries_start Partition entries array start - * \param [in] pentries_end Partition entries array end - * \param [in] pentry_size Single partition entry size - * - * \return 0 on success, 1 if no backup partitions found - * - * ========================================================================== - */ -static int gpt_boot_chain_swap(const uint8_t *pentries_start, - const uint8_t *pentries_end, - uint32_t pentry_size) -{ - const char ptn_swap_list[][MAX_GPT_NAME_SIZE] = { PTN_SWAP_LIST }; - - int backup_not_found = 1; - unsigned i; - - for (i = 0; i < ARRAY_SIZE(ptn_swap_list); i++) { - uint8_t *ptn_entry; - uint8_t *ptn_bak_entry; - uint8_t ptn_swap[PTN_ENTRY_SIZE]; - //Skip the xbl partition on UFS devices. That is handled - //seperately. - if (gpt_utils_is_ufs_device() && !strncmp(ptn_swap_list[i], - PTN_XBL, - strlen(PTN_XBL))) - continue; - - ptn_entry = gpt_pentry_seek(ptn_swap_list[i], pentries_start, - pentries_end, pentry_size); - if (ptn_entry == NULL) - continue; - - ptn_bak_entry = gpt_pentry_seek(ptn_swap_list[i], - ptn_entry + pentry_size, pentries_end, pentry_size); - if (ptn_bak_entry == NULL) { - fprintf(stderr, "'%s' partition not backup - skip safe update\n", - ptn_swap_list[i]); - continue; - } - - /* swap primary <-> backup partition entries */ - memcpy(ptn_swap, ptn_entry, PTN_ENTRY_SIZE); - memcpy(ptn_entry, ptn_bak_entry, PTN_ENTRY_SIZE); - memcpy(ptn_bak_entry, ptn_swap, PTN_ENTRY_SIZE); - backup_not_found = 0; - } - - return backup_not_found; -} - - - -/** - * ========================================================================== - * - * \brief Sets secondary GPT boot chain - * - * \param [in] fd block dev file descriptor - * \param [in] boot Boot chain to switch to - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt2_set_boot_chain(int fd, enum boot_chain boot) -{ - int64_t gpt2_header_offset; - uint64_t pentries_start_offset; - uint32_t gpt_header_size; - uint32_t pentry_size; - uint32_t pentries_array_size; - - uint8_t *gpt_header = NULL; - uint8_t *pentries = NULL; - uint32_t crc; - uint32_t blk_size = 0; - int r; - - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - r = -1; - goto EXIT; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "Failed to allocate memory to hold GPT block\n"); - r = -1; - goto EXIT; - } - gpt2_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt2_header_offset < 0) { - fprintf(stderr, "Getting secondary GPT header offset failed: %s\n", - strerror(errno)); - r = -1; - goto EXIT; - } - - /* Read primary GPT header from block dev */ - r = blk_rw(fd, 0, blk_size, gpt_header, blk_size); - - if (r) { - fprintf(stderr, "Failed to read primary GPT header from blk dev\n"); - goto EXIT; - } - pentries_start_offset = - GET_8_BYTES(gpt_header + PENTRIES_OFFSET) * blk_size; - pentry_size = GET_4_BYTES(gpt_header + PENTRY_SIZE_OFFSET); - pentries_array_size = - GET_4_BYTES(gpt_header + PARTITION_COUNT_OFFSET) * pentry_size; - - pentries = (uint8_t *) calloc(1, pentries_array_size); - if (pentries == NULL) { - fprintf(stderr, - "Failed to alloc memory for GPT partition entries array\n"); - r = -1; - goto EXIT; - } - /* Read primary GPT partititon entries array from block dev */ - r = blk_rw(fd, 0, pentries_start_offset, pentries, pentries_array_size); - if (r) - goto EXIT; - - crc = crc32(0, pentries, pentries_array_size); - if (GET_4_BYTES(gpt_header + PARTITION_CRC_OFFSET) != crc) { - fprintf(stderr, "Primary GPT partition entries array CRC invalid\n"); - r = -1; - goto EXIT; - } - - /* Read secondary GPT header from block dev */ - r = blk_rw(fd, 0, gpt2_header_offset, gpt_header, blk_size); - if (r) - goto EXIT; - - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - pentries_start_offset = - GET_8_BYTES(gpt_header + PENTRIES_OFFSET) * blk_size; - - if (boot == BACKUP_BOOT) { - r = gpt_boot_chain_swap(pentries, pentries + pentries_array_size, - pentry_size); - if (r) - goto EXIT; - } - - crc = crc32(0, pentries, pentries_array_size); - PUT_4_BYTES(gpt_header + PARTITION_CRC_OFFSET, crc); - - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - crc = crc32(0, gpt_header, gpt_header_size); - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, crc); - - /* Write the modified GPT header back to block dev */ - r = blk_rw(fd, 1, gpt2_header_offset, gpt_header, blk_size); - if (!r) - /* Write the modified GPT partititon entries array back to block dev */ - r = blk_rw(fd, 1, pentries_start_offset, pentries, - pentries_array_size); - -EXIT: - if(gpt_header) - free(gpt_header); - if (pentries) - free(pentries); - return r; -} - -/** - * ========================================================================== - * - * \brief Checks GPT state (header signature and CRC) - * - * \param [in] fd block dev file descriptor - * \param [in] gpt GPT header to be checked - * \param [out] state GPT header state - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt_get_state(int fd, enum gpt_instance gpt, enum gpt_state *state) -{ - int64_t gpt_header_offset; - uint32_t gpt_header_size; - uint8_t *gpt_header = NULL; - uint32_t crc; - uint32_t blk_size = 0; - - *state = GPT_OK; - - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - goto error; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "gpt_get_state:Failed to alloc memory for header\n"); - goto error; - } - if (gpt == PRIMARY_GPT) - gpt_header_offset = blk_size; - else { - gpt_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt_header_offset < 0) { - fprintf(stderr, "gpt_get_state:Seek to end of GPT part fail\n"); - goto error; - } - } - - if (blk_rw(fd, 0, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "gpt_get_state: blk_rw failed\n"); - goto error; - } - if (memcmp(gpt_header, GPT_SIGNATURE, sizeof(GPT_SIGNATURE))) - *state = GPT_BAD_SIGNATURE; - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - - crc = GET_4_BYTES(gpt_header + HEADER_CRC_OFFSET); - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - if (crc32(0, gpt_header, gpt_header_size) != crc) - *state = GPT_BAD_CRC; - free(gpt_header); - return 0; -error: - if (gpt_header) - free(gpt_header); - return -1; -} - - - -/** - * ========================================================================== - * - * \brief Sets GPT header state (used to corrupt and fix GPT signature) - * - * \param [in] fd block dev file descriptor - * \param [in] gpt GPT header to be checked - * \param [in] state GPT header state to set (GPT_OK or GPT_BAD_SIGNATURE) - * - * \return 0 on success - * - * ========================================================================== - */ -static int gpt_set_state(int fd, enum gpt_instance gpt, enum gpt_state state) -{ - int64_t gpt_header_offset; - uint32_t gpt_header_size; - uint8_t *gpt_header = NULL; - uint32_t crc; - uint32_t blk_size = 0; - - if (ioctl(fd, BLKSSZGET, &blk_size) != 0) { - fprintf(stderr, "Failed to get GPT device block size: %s\n", - strerror(errno)); - goto error; - } - gpt_header = (uint8_t*)malloc(blk_size); - if (!gpt_header) { - fprintf(stderr, "Failed to alloc memory for gpt header\n"); - goto error; - } - if (gpt == PRIMARY_GPT) - gpt_header_offset = blk_size; - else { - gpt_header_offset = lseek64(fd, 0, SEEK_END) - blk_size; - if (gpt_header_offset < 0) { - fprintf(stderr, "Failed to seek to end of GPT device\n"); - goto error; - } - } - if (blk_rw(fd, 0, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "Failed to r/w gpt header\n"); - goto error; - } - if (state == GPT_OK) - memcpy(gpt_header, GPT_SIGNATURE, sizeof(GPT_SIGNATURE)); - else if (state == GPT_BAD_SIGNATURE) - *gpt_header = 0; - else { - fprintf(stderr, "gpt_set_state: Invalid state\n"); - goto error; - } - - gpt_header_size = GET_4_BYTES(gpt_header + HEADER_SIZE_OFFSET); - - /* header CRC is calculated with this field cleared */ - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, 0); - crc = crc32(0, gpt_header, gpt_header_size); - PUT_4_BYTES(gpt_header + HEADER_CRC_OFFSET, crc); - - if (blk_rw(fd, 1, gpt_header_offset, gpt_header, blk_size)) { - fprintf(stderr, "gpt_set_state: blk write failed\n"); - goto error; - } - return 0; -error: - if(gpt_header) - free(gpt_header); - return -1; -} - -int get_scsi_node_from_bootdevice(const char *bootdev_path, - char *sg_node_path, - size_t buf_size) -{ - char sg_dir_path[PATH_MAX] = {0}; - char real_path[PATH_MAX] = {0}; - DIR *scsi_dir = NULL; - struct dirent *de; - int node_found = 0; - if (!bootdev_path || !sg_node_path) { - fprintf(stderr, "%s : invalid argument\n", - __func__); - goto error; - } - if (readlink(bootdev_path, real_path, sizeof(real_path) - 1) < 0) { - fprintf(stderr, "failed to resolve link for %s(%s)\n", - bootdev_path, - strerror(errno)); - goto error; - } - if(strlen(real_path) < PATH_TRUNCATE_LOC + 1){ - fprintf(stderr, "Unrecognized path :%s:\n", - real_path); - goto error; - } - //For the safe side in case there are additional partitions on - //the XBL lun we truncate the name. - real_path[PATH_TRUNCATE_LOC] = '\0'; - if(strlen(real_path) < LUN_NAME_START_LOC + 1){ - fprintf(stderr, "Unrecognized truncated path :%s:\n", - real_path); - goto error; - } - //This will give us /dev/block/sdb/device/scsi_generic - //which contains a file sgY whose name gives us the path - //to /dev/sgY which we return - snprintf(sg_dir_path, sizeof(sg_dir_path) - 1, - "/sys/block/%s/device/scsi_generic", - &real_path[LUN_NAME_START_LOC]); - scsi_dir = opendir(sg_dir_path); - if (!scsi_dir) { - fprintf(stderr, "%s : Failed to open %s(%s)\n", - __func__, - sg_dir_path, - strerror(errno)); - goto error; - } - while((de = readdir(scsi_dir))) { - if (de->d_name[0] == '.') - continue; - else if (!strncmp(de->d_name, "sg", 2)) { - snprintf(sg_node_path, - buf_size -1, - "/dev/%s", - de->d_name); - fprintf(stderr, "%s:scsi generic node is :%s:\n", - __func__, - sg_node_path); - node_found = 1; - break; - } - } - if(!node_found) { - fprintf(stderr,"%s: Unable to locate scsi generic node\n", - __func__); - goto error; - } - closedir(scsi_dir); - return 0; -error: - if (scsi_dir) - closedir(scsi_dir); - return -1; -} - -int set_boot_lun(char *sg_dev, uint8_t boot_lun_id) -{ - int fd = -1; - int rc; - struct ufs_ioctl_query_data *data = NULL; - size_t ioctl_data_size = sizeof(struct ufs_ioctl_query_data) + UFS_ATTR_DATA_SIZE; - - data = (struct ufs_ioctl_query_data*)malloc(ioctl_data_size); - if (!data) { - fprintf(stderr, "%s: Failed to alloc query data struct\n", - __func__); - goto error; - } - memset(data, 0, ioctl_data_size); - data->opcode = UPIU_QUERY_OPCODE_WRITE_ATTR; - data->idn = QUERY_ATTR_IDN_BOOT_LU_EN; - data->buf_size = UFS_ATTR_DATA_SIZE; - data->buffer[0] = boot_lun_id; - fd = open(sg_dev, O_RDWR); - if (fd < 0) { - fprintf(stderr, "%s: Failed to open %s(%s)\n", - __func__, - sg_dev, - strerror(errno)); - goto error; - } - rc = ioctl(fd, UFS_IOCTL_QUERY, data); - if (rc) { - fprintf(stderr, "%s: UFS query ioctl failed(%s)\n", - __func__, - strerror(errno)); - goto error; - } - close(fd); - free(data); - return 0; -error: - if (fd >= 0) - close(fd); - if (data) - free(data); - return -1; -} - -//Swtich betwieen using either the primary or the backup -//boot LUN for boot. This is required since UFS boot partitions -//cannot have a backup GPT which is what we use for failsafe -//updates of the other 'critical' partitions. This function will -//not be invoked for emmc targets and on UFS targets is only required -//to be invoked for XBL. -// -//The algorithm to do this is as follows: -//- Find the real block device(eg: /dev/block/sdb) that corresponds -// to the /dev/block/bootdevice/by-name/xbl(bak) symlink -// -//- Once we have the block device 'node' name(sdb in the above example) -// use this node to to locate the scsi generic device that represents -// it by checking the file /sys/block/sdb/device/scsi_generic/sgY -// -//- Once we locate sgY we call the query ioctl on /dev/sgy to switch -//the boot lun to either LUNA or LUNB -int gpt_utils_set_xbl_boot_partition(enum boot_chain chain) -{ - struct stat st; - ///sys/block/sdX/device/scsi_generic/ - char sg_dev_node[PATH_MAX] = {0}; - uint8_t boot_lun_id = 0; - const char *boot_dev = NULL; - - if (chain == BACKUP_BOOT) { - boot_lun_id = BOOT_LUN_B_ID; - if (!stat(XBL_BACKUP, &st)) - boot_dev = XBL_BACKUP; - else if (!stat(XBL_AB_SECONDARY, &st)) - boot_dev = XBL_AB_SECONDARY; - else { - fprintf(stderr, "%s: Failed to locate secondary xbl\n", - __func__); - goto error; - } - } else if (chain == NORMAL_BOOT) { - boot_lun_id = BOOT_LUN_A_ID; - if (!stat(XBL_PRIMARY, &st)) - boot_dev = XBL_PRIMARY; - else if (!stat(XBL_AB_PRIMARY, &st)) - boot_dev = XBL_AB_PRIMARY; - else { - fprintf(stderr, "%s: Failed to locate primary xbl\n", - __func__); - goto error; - } - } else { - fprintf(stderr, "%s: Invalid boot chain id\n", __func__); - goto error; - } - //We need either both xbl and xblbak or both xbl_a and xbl_b to exist at - //the same time. If not the current configuration is invalid. - if((stat(XBL_PRIMARY, &st) || - stat(XBL_BACKUP, &st)) && - (stat(XBL_AB_PRIMARY, &st) || - stat(XBL_AB_SECONDARY, &st))) { - fprintf(stderr, "%s:primary/secondary XBL prt not found(%s)\n", - __func__, - strerror(errno)); - goto error; - } - fprintf(stderr, "%s: setting %s lun as boot lun\n", - __func__, - boot_dev); - if (get_scsi_node_from_bootdevice(boot_dev, - sg_dev_node, - sizeof(sg_dev_node))) { - fprintf(stderr, "%s: Failed to get scsi node path for xblbak\n", - __func__); - goto error; - } - if (set_boot_lun(sg_dev_node, boot_lun_id)) { - fprintf(stderr, "%s: Failed to set xblbak as boot partition\n", - __func__); - goto error; - } - return 0; -error: - return -1; -} - -int gpt_utils_is_ufs_device() -{ - char bootdevice[PROPERTY_VALUE_MAX] = {0}; - property_get("ro.boot.bootdevice", bootdevice, "N/A"); - if (strlen(bootdevice) < strlen(".ufshc") + 1) - return 0; - return (!strncmp(&bootdevice[strlen(bootdevice) - strlen(".ufshc")], - ".ufshc", - sizeof(".ufshc"))); -} -//dev_path is the path to the block device that contains the GPT image that -//needs to be updated. This would be the device which holds one or more critical -//boot partitions and their backups. In the case of EMMC this function would -//be invoked only once on /dev/block/mmcblk1 since it holds the GPT image -//containing all the partitions For UFS devices it could potentially be -//invoked multiple times, once for each LUN containing critical image(s) and -//their backups -int prepare_partitions(enum boot_update_stage stage, const char *dev_path) -{ - int r = 0; - int fd = -1; - int is_ufs = gpt_utils_is_ufs_device(); - enum gpt_state gpt_prim, gpt_second; - enum boot_update_stage internal_stage; - struct stat xbl_partition_stat; - - if (!dev_path) { - fprintf(stderr, "%s: Invalid dev_path\n", - __func__); - r = -1; - goto EXIT; - } - fd = open(dev_path, O_RDWR); - if (fd < 0) { - fprintf(stderr, "%s: Opening '%s' failed: %s\n", - __func__, - BLK_DEV_FILE, - strerror(errno)); - r = -1; - goto EXIT; - } - r = gpt_get_state(fd, PRIMARY_GPT, &gpt_prim) || - gpt_get_state(fd, SECONDARY_GPT, &gpt_second); - if (r) { - fprintf(stderr, "%s: Getting GPT headers state failed\n", - __func__); - goto EXIT; - } - - /* These 2 combinations are unexpected and unacceptable */ - if (gpt_prim == GPT_BAD_CRC || gpt_second == GPT_BAD_CRC) { - fprintf(stderr, "%s: GPT headers CRC corruption detected, aborting\n", - __func__); - r = -1; - goto EXIT; - } - if (gpt_prim == GPT_BAD_SIGNATURE && gpt_second == GPT_BAD_SIGNATURE) { - fprintf(stderr, "%s: Both GPT headers corrupted, aborting\n", - __func__); - r = -1; - goto EXIT; - } - - /* Check internal update stage according GPT headers' state */ - if (gpt_prim == GPT_OK && gpt_second == GPT_OK) - internal_stage = UPDATE_MAIN; - else if (gpt_prim == GPT_BAD_SIGNATURE) - internal_stage = UPDATE_BACKUP; - else if (gpt_second == GPT_BAD_SIGNATURE) - internal_stage = UPDATE_FINALIZE; - else { - fprintf(stderr, "%s: Abnormal GPTs state: primary (%d), secondary (%d), " - "aborting\n", __func__, gpt_prim, gpt_second); - r = -1; - goto EXIT; - } - - /* Stage already set - ready for update, exitting */ - if ((int) stage == (int) internal_stage - 1) - goto EXIT; - /* Unexpected stage given */ - if (stage != internal_stage) { - r = -1; - goto EXIT; - } - - switch (stage) { - case UPDATE_MAIN: - if (is_ufs) { - if(stat(XBL_PRIMARY, &xbl_partition_stat)|| - stat(XBL_BACKUP, &xbl_partition_stat)){ - //Non fatal error. Just means this target does not - //use XBL but relies on sbl whose update is handled - //by the normal methods. - fprintf(stderr, "%s: xbl part not found(%s).Assuming sbl in use\n", - __func__, - strerror(errno)); - } else { - //Switch the boot lun so that backup boot LUN is used - r = gpt_utils_set_xbl_boot_partition(BACKUP_BOOT); - if(r){ - fprintf(stderr, "%s: Failed to set xbl backup partition as boot\n", - __func__); - goto EXIT; - } - } - } - //Fix up the backup GPT table so that it actually points to - //the backup copy of the boot critical images - fprintf(stderr, "%s: Preparing for primary partition update\n", - __func__); - r = gpt2_set_boot_chain(fd, BACKUP_BOOT); - if (r) { - if (r < 0) - fprintf(stderr, - "%s: Setting secondary GPT to backup boot failed\n", - __func__); - /* No backup partitions - do not corrupt GPT, do not flag error */ - else - r = 0; - goto EXIT; - } - //corrupt the primary GPT so that the backup(which now points to - //the backup boot partitions is used) - r = gpt_set_state(fd, PRIMARY_GPT, GPT_BAD_SIGNATURE); - if (r) { - fprintf(stderr, "%s: Corrupting primary GPT header failed\n", - __func__); - goto EXIT; - } - break; - case UPDATE_BACKUP: - if (is_ufs) { - if(stat(XBL_PRIMARY, &xbl_partition_stat)|| - stat(XBL_BACKUP, &xbl_partition_stat)){ - //Non fatal error. Just means this target does not - //use XBL but relies on sbl whose update is handled - //by the normal methods. - fprintf(stderr, "%s: xbl part not found(%s).Assuming sbl in use\n", - __func__, - strerror(errno)); - } else { - //Switch the boot lun so that backup boot LUN is used - r = gpt_utils_set_xbl_boot_partition(NORMAL_BOOT); - if(r) { - fprintf(stderr, "%s: Failed to set xbl backup partition as boot\n", - __func__); - goto EXIT; - } - } - } - //Fix the primary GPT header so that is used - fprintf(stderr, "%s: Preparing for backup partition update\n", - __func__); - r = gpt_set_state(fd, PRIMARY_GPT, GPT_OK); - if (r) { - fprintf(stderr, "%s: Fixing primary GPT header failed\n", - __func__); - goto EXIT; - } - //Corrupt the scondary GPT header - r = gpt_set_state(fd, SECONDARY_GPT, GPT_BAD_SIGNATURE); - if (r) { - fprintf(stderr, "%s: Corrupting secondary GPT header failed\n", - __func__); - goto EXIT; - } - break; - case UPDATE_FINALIZE: - //Undo the changes we had made in the UPDATE_MAIN stage so that the - //primary/backup GPT headers once again point to the same set of - //partitions - fprintf(stderr, "%s: Finalizing partitions\n", - __func__); - r = gpt2_set_boot_chain(fd, NORMAL_BOOT); - if (r < 0) { - fprintf(stderr, "%s: Setting secondary GPT to normal boot failed\n", - __func__); - goto EXIT; - } - - r = gpt_set_state(fd, SECONDARY_GPT, GPT_OK); - if (r) { - fprintf(stderr, "%s: Fixing secondary GPT header failed\n", - __func__); - goto EXIT; - } - break; - default:; - } - -EXIT: - if (fd >= 0) { - fsync(fd); - close(fd); - } - return r; -} - -int add_lun_to_update_list(char *lun_path, struct update_data *dat) -{ - uint32_t i = 0; - struct stat st; - if (!lun_path || !dat){ - fprintf(stderr, "%s: Invalid data", - __func__); - return -1; - } - if (stat(lun_path, &st)) { - fprintf(stderr, "%s: Unable to access %s. Skipping adding to list", - __func__, - lun_path); - return -1; - } - if (dat->num_valid_entries == 0) { - fprintf(stderr, "%s: Copying %s into lun_list[%d]\n", - __func__, - lun_path, - i); - strlcpy(dat->lun_list[0], lun_path, - PATH_MAX * sizeof(char)); - dat->num_valid_entries = 1; - } else { - for (i = 0; (i < dat->num_valid_entries) && - (dat->num_valid_entries < MAX_LUNS - 1); i++) { - //Check if the current LUN is not already part - //of the lun list - if (!strncmp(lun_path,dat->lun_list[i], - strlen(dat->lun_list[i]))) { - //LUN already in list..Return - return 0; - } - } - fprintf(stderr, "%s: Copying %s into lun_list[%d]\n", - __func__, - lun_path, - dat->num_valid_entries); - //Add LUN path lun list - strlcpy(dat->lun_list[dat->num_valid_entries], lun_path, - PATH_MAX * sizeof(char)); - dat->num_valid_entries++; - } - return 0; -} - -int prepare_boot_update(enum boot_update_stage stage) -{ - int is_ufs = gpt_utils_is_ufs_device(); - struct stat ufs_dir_stat; - struct update_data data; - int rcode = 0; - uint32_t i = 0; - int is_error = 0; - const char ptn_swap_list[][MAX_GPT_NAME_SIZE] = { PTN_SWAP_LIST }; - //Holds /dev/block/bootdevice/by-name/*bak entry - char buf[PATH_MAX] = {0}; - //Holds the resolved path of the symlink stored in buf - char real_path[PATH_MAX] = {0}; - - if (!is_ufs) { - //emmc device. Just pass in path to mmcblk0 - return prepare_partitions(stage, BLK_DEV_FILE); - } else { - //Now we need to find the list of LUNs over - //which the boot critical images are spread - //and set them up for failsafe updates.To do - //this we find out where the symlinks for the - //each of the paths under - ///dev/block/bootdevice/by-name/PTN_SWAP_LIST - //actually point to. - fprintf(stderr, "%s: Running on a UFS device\n", - __func__); - memset(&data, '\0', sizeof(struct update_data)); - for (i=0; i < ARRAY_SIZE(ptn_swap_list); i++) { - //XBL on UFS does not follow the convention - //of being loaded based on well known GUID'S. - //We take care of switching the UFS boot LUN - //explicitly later on. - if (!strncmp(ptn_swap_list[i], - PTN_XBL, - strlen(PTN_XBL))) - continue; - snprintf(buf, sizeof(buf), - "%s/%sbak", - BOOT_DEV_DIR, - ptn_swap_list[i]); - if (stat(buf, &ufs_dir_stat)) { - continue; - } - if (readlink(buf, real_path, sizeof(real_path) - 1) < 0) - { - fprintf(stderr, "%s: readlink error. Skipping %s", - __func__, - strerror(errno)); - } else { - if(strlen(real_path) < PATH_TRUNCATE_LOC + 1){ - fprintf(stderr, "Unknown path.Skipping :%s:\n", - real_path); - } else { - real_path[PATH_TRUNCATE_LOC] = '\0'; - add_lun_to_update_list(real_path, &data); - } - } - memset(buf, '\0', sizeof(buf)); - memset(real_path, '\0', sizeof(real_path)); - } - for (i=0; i < data.num_valid_entries; i++) { - fprintf(stderr, "%s: Preparing %s for update stage %d\n", - __func__, - data.lun_list[i], - stage); - rcode = prepare_partitions(stage, data.lun_list[i]); - if (rcode != 0) - { - fprintf(stderr, "%s: Failed to prepare %s.Continuing..\n", - __func__, - data.lun_list[i]); - is_error = 1; - } - } - } - if (is_error) - return -1; - return 0; -} - -//Given a parttion name(eg: rpm) get the path to the block device that -//represents the GPT disk the partition resides on. In the case of emmc it -//would be the default emmc dev(/dev/block/mmcblk0). In the case of UFS we look -//through the /dev/block/bootdevice/by-name/ tree for partname, and resolve -//the path to the LUN from there. -static int get_dev_path_from_partition_name(const char *partname, - char *buf, - size_t buflen) -{ - struct stat st; - char path[PATH_MAX] = {0}; - if (!partname || !buf || buflen < ((PATH_TRUNCATE_LOC) + 1)) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - if (gpt_utils_is_ufs_device()) { - //Need to find the lun that holds partition partname - snprintf(path, sizeof(path), - "%s/%s", - BOOT_DEV_DIR, - partname); - if (stat(path, &st)) { - goto error; - } - if (readlink(path, buf, buflen) < 0) - { - goto error; - } else { - buf[PATH_TRUNCATE_LOC] = '\0'; - } - } else { - snprintf(buf, buflen, "/dev/block/mmcblk0"); - } - return 0; - -error: - return -1; -} - -int gpt_utils_get_partition_map(vector<string>& ptn_list, - map<string, vector<string>>& partition_map) { - char devpath[PATH_MAX] = {'\0'}; - map<string, vector<string>>::iterator it; - if (ptn_list.size() < 1) { - fprintf(stderr, "%s: Invalid ptn list\n", __func__); - return -1; - } - //Go through the passed in list - for (uint32_t i = 0; i < ptn_list.size(); i++) - { - //Key in the map is the path to the device that holds the - //partition - if (get_dev_path_from_partition_name(ptn_list[i].c_str(), - devpath, - sizeof(devpath))) { - //Not necessarily an error. The partition may just - //not be present. - continue; - } - string path = devpath; - it = partition_map.find(path); - if (it != partition_map.end()) { - it->second.push_back(ptn_list[i]); - } else { - vector<string> str_vec; - str_vec.push_back( ptn_list[i]); - partition_map.insert(pair<string, vector<string>> - (path, str_vec)); - } - memset(devpath, '\0', sizeof(devpath)); - } - return 0; -} - -//Get the block size of the disk represented by decsriptor fd -static uint32_t gpt_get_block_size(int fd) -{ - uint32_t block_size = 0; - if (fd < 0) { - ALOGE("%s: invalid descriptor", - __func__); - goto error; - } - if (ioctl(fd, BLKSSZGET, &block_size) != 0) { - ALOGE("%s: Failed to get GPT dev block size : %s", - __func__, - strerror(errno)); - goto error; - } - return block_size; -error: - return 0; -} - -//Write the GPT header present in the passed in buffer back to the -//disk represented by fd -static int gpt_set_header(uint8_t *gpt_header, int fd, - enum gpt_instance instance) -{ - uint32_t block_size = 0; - off_t gpt_header_offset = 0; - if (!gpt_header || fd < 0) { - ALOGE("%s: Invalid arguments", - __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - ALOGI("%s: Block size is : %d", __func__, block_size); - if (block_size == 0) { - ALOGE("%s: Failed to get block size", __func__); - goto error; - } - if (instance == PRIMARY_GPT) - gpt_header_offset = block_size; - else - gpt_header_offset = lseek64(fd, 0, SEEK_END) - block_size; - if (gpt_header_offset <= 0) { - ALOGE("%s: Failed to get gpt header offset",__func__); - goto error; - } - ALOGI("%s: Writing back header to offset %ld", __func__, - gpt_header_offset); - if (blk_rw(fd, 1, gpt_header_offset, gpt_header, block_size)) { - ALOGE("%s: Failed to write back GPT header", __func__); - goto error; - } - return 0; -error: - return -1; -} - -//Read out the GPT header for the disk that contains the partition partname -static uint8_t* gpt_get_header(const char *partname, enum gpt_instance instance) -{ - uint8_t* hdr = NULL; - char devpath[PATH_MAX] = {0}; - int64_t hdr_offset = 0; - uint32_t block_size = 0; - int fd = -1; - if (!partname) { - ALOGE("%s: Invalid partition name", __func__); - goto error; - } - if (get_dev_path_from_partition_name(partname, devpath, sizeof(devpath)) - != 0) { - ALOGE("%s: Failed to resolve path for %s", - __func__, - partname); - goto error; - } - fd = open(devpath, O_RDWR); - if (fd < 0) { - ALOGE("%s: Failed to open %s : %s", - __func__, - devpath, - strerror(errno)); - goto error; - } - block_size = gpt_get_block_size(fd); - if (block_size == 0) - { - ALOGE("%s: Failed to get gpt block size for %s", - __func__, - partname); - goto error; - } - - hdr = (uint8_t*)malloc(block_size); - if (!hdr) { - ALOGE("%s: Failed to allocate memory for gpt header", - __func__); - } - if (instance == PRIMARY_GPT) - hdr_offset = block_size; - else { - hdr_offset = lseek64(fd, 0, SEEK_END) - block_size; - } - if (hdr_offset < 0) { - ALOGE("%s: Failed to get gpt header offset", - __func__); - goto error; - } - if (blk_rw(fd, 0, hdr_offset, hdr, block_size)) { - ALOGE("%s: Failed to read GPT header from device", - __func__); - goto error; - } - close(fd); - return hdr; -error: - if (fd >= 0) - close(fd); - if (hdr) - free(hdr); - return NULL; -} - -//Returns the partition entry array based on the -//passed in buffer which contains the gpt header. -//The fd here is the descriptor for the 'disk' which -//holds the partition -static uint8_t* gpt_get_pentry_arr(uint8_t *hdr, int fd) -{ - uint64_t pentries_start = 0; - uint32_t pentry_size = 0; - uint32_t block_size = 0; - uint32_t pentries_arr_size = 0; - uint8_t *pentry_arr = NULL; - int rc = 0; - if (!hdr) { - ALOGE("%s: Invalid header", __func__); - goto error; - } - if (fd < 0) { - ALOGE("%s: Invalid fd", __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - if (!block_size) { - ALOGE("%s: Failed to get gpt block size for", - __func__); - goto error; - } - pentries_start = GET_8_BYTES(hdr + PENTRIES_OFFSET) * block_size; - pentry_size = GET_4_BYTES(hdr + PENTRY_SIZE_OFFSET); - pentries_arr_size = - GET_4_BYTES(hdr + PARTITION_COUNT_OFFSET) * pentry_size; - pentry_arr = (uint8_t*)calloc(1, pentries_arr_size); - if (!pentry_arr) { - ALOGE("%s: Failed to allocate memory for partition array", - __func__); - goto error; - } - rc = blk_rw(fd, 0, - pentries_start, - pentry_arr, - pentries_arr_size); - if (rc) { - ALOGE("%s: Failed to read partition entry array", - __func__); - goto error; - } - return pentry_arr; -error: - if (pentry_arr) - free(pentry_arr); - return NULL; -} - -static int gpt_set_pentry_arr(uint8_t *hdr, int fd, uint8_t* arr) -{ - uint32_t block_size = 0; - uint64_t pentries_start = 0; - uint32_t pentry_size = 0; - uint32_t pentries_arr_size = 0; - int rc = 0; - if (!hdr || fd < 0 || !arr) { - ALOGE("%s: Invalid argument", __func__); - goto error; - } - block_size = gpt_get_block_size(fd); - if (!block_size) { - ALOGE("%s: Failed to get gpt block size for", - __func__); - goto error; - } - ALOGI("%s : Block size is %d", __func__, block_size); - pentries_start = GET_8_BYTES(hdr + PENTRIES_OFFSET) * block_size; - pentry_size = GET_4_BYTES(hdr + PENTRY_SIZE_OFFSET); - pentries_arr_size = - GET_4_BYTES(hdr + PARTITION_COUNT_OFFSET) * pentry_size; - ALOGI("%s: Writing partition entry array of size %d to offset %" PRIu64, - __func__, - pentries_arr_size, - pentries_start); - rc = blk_rw(fd, 1, - pentries_start, - arr, - pentries_arr_size); - if (rc) { - ALOGE("%s: Failed to read partition entry array", - __func__); - goto error; - } - return 0; -error: - return -1; -} - - - -//Allocate a handle used by calls to the "gpt_disk" api's -struct gpt_disk * gpt_disk_alloc() -{ - struct gpt_disk *disk; - disk = (struct gpt_disk *)malloc(sizeof(struct gpt_disk)); - if (!disk) { - ALOGE("%s: Failed to allocate memory", __func__); - goto end; - } - memset(disk, 0, sizeof(struct gpt_disk)); -end: - return disk; -} - -//Free previously allocated/initialized handle -void gpt_disk_free(struct gpt_disk *disk) -{ - if (!disk) - return; - if (disk->hdr) - free(disk->hdr); - if (disk->hdr_bak) - free(disk->hdr_bak); - if (disk->pentry_arr) - free(disk->pentry_arr); - if (disk->pentry_arr_bak) - free(disk->pentry_arr_bak); - free(disk); - return; -} - -//fills up the passed in gpt_disk struct with information about the -//disk represented by path dev. Returns 0 on success and -1 on error. -int gpt_disk_get_disk_info(const char *dev, struct gpt_disk *dsk) -{ - struct gpt_disk *disk = NULL; - int fd = -1; - uint32_t gpt_header_size = 0; - - if (!dsk || !dev) { - ALOGE("%s: Invalid arguments", __func__); - goto error; - } - disk = dsk; - disk->hdr = gpt_get_header(dev, PRIMARY_GPT); - if (!disk->hdr) { - ALOGE("%s: Failed to get primary header", __func__); - goto error; - } - gpt_header_size = GET_4_BYTES(disk->hdr + HEADER_SIZE_OFFSET); - disk->hdr_crc = crc32(0, disk->hdr, gpt_header_size); - disk->hdr_bak = gpt_get_header(dev, PRIMARY_GPT); - if (!disk->hdr_bak) { - ALOGE("%s: Failed to get backup header", __func__); - goto error; - } - disk->hdr_bak_crc = crc32(0, disk->hdr_bak, gpt_header_size); - - //Descriptor for the block device. We will use this for further - //modifications to the partition table - if (get_dev_path_from_partition_name(dev, - disk->devpath, - sizeof(disk->devpath)) != 0) { - ALOGE("%s: Failed to resolve path for %s", - __func__, - dev); - goto error; - } - fd = open(disk->devpath, O_RDWR); - if (fd < 0) { - ALOGE("%s: Failed to open %s: %s", - __func__, - disk->devpath, - strerror(errno)); - goto error; - } - disk->pentry_arr = gpt_get_pentry_arr(disk->hdr, fd); - if (!disk->pentry_arr) { - ALOGE("%s: Failed to obtain partition entry array", - __func__); - goto error; - } - disk->pentry_arr_bak = gpt_get_pentry_arr(disk->hdr_bak, fd); - if (!disk->pentry_arr_bak) { - ALOGE("%s: Failed to obtain backup partition entry array", - __func__); - goto error; - } - disk->pentry_size = GET_4_BYTES(disk->hdr + PENTRY_SIZE_OFFSET); - disk->pentry_arr_size = - GET_4_BYTES(disk->hdr + PARTITION_COUNT_OFFSET) * - disk->pentry_size; - disk->pentry_arr_crc = GET_4_BYTES(disk->hdr + PARTITION_CRC_OFFSET); - disk->pentry_arr_bak_crc = GET_4_BYTES(disk->hdr_bak + - PARTITION_CRC_OFFSET); - disk->block_size = gpt_get_block_size(fd); - close(fd); - disk->is_initialized = GPT_DISK_INIT_MAGIC; - return 0; -error: - if (fd >= 0) - close(fd); - return -1; -} - -//Get pointer to partition entry from a allocated gpt_disk structure -uint8_t* gpt_disk_get_pentry(struct gpt_disk *disk, - const char *partname, - enum gpt_instance instance) -{ - uint8_t *ptn_arr = NULL; - if (!disk || !partname || disk->is_initialized != GPT_DISK_INIT_MAGIC) { - ALOGE("%s: Invalid argument",__func__); - goto error; - } - ptn_arr = (instance == PRIMARY_GPT) ? - disk->pentry_arr : disk->pentry_arr_bak; - return (gpt_pentry_seek(partname, ptn_arr, - ptn_arr + disk->pentry_arr_size , - disk->pentry_size)); -error: - return NULL; -} - -//Update CRC values for the various components of the gpt_disk -//structure. This function should be called after any of the fields -//have been updated before the structure contents are written back to -//disk. -int gpt_disk_update_crc(struct gpt_disk *disk) -{ - uint32_t gpt_header_size = 0; - if (!disk || (disk->is_initialized != GPT_DISK_INIT_MAGIC)) { - ALOGE("%s: invalid argument", __func__); - goto error; - } - //Recalculate the CRC of the primary partiton array - disk->pentry_arr_crc = crc32(0, - disk->pentry_arr, - disk->pentry_arr_size); - //Recalculate the CRC of the backup partition array - disk->pentry_arr_bak_crc = crc32(0, - disk->pentry_arr_bak, - disk->pentry_arr_size); - //Update the partition CRC value in the primary GPT header - PUT_4_BYTES(disk->hdr + PARTITION_CRC_OFFSET, disk->pentry_arr_crc); - //Update the partition CRC value in the backup GPT header - PUT_4_BYTES(disk->hdr_bak + PARTITION_CRC_OFFSET, - disk->pentry_arr_bak_crc); - //Update the CRC value of the primary header - gpt_header_size = GET_4_BYTES(disk->hdr + HEADER_SIZE_OFFSET); - //Header CRC is calculated with its own CRC field set to 0 - PUT_4_BYTES(disk->hdr + HEADER_CRC_OFFSET, 0); - PUT_4_BYTES(disk->hdr_bak + HEADER_CRC_OFFSET, 0); - disk->hdr_crc = crc32(0, disk->hdr, gpt_header_size); - disk->hdr_bak_crc = crc32(0, disk->hdr_bak, gpt_header_size); - PUT_4_BYTES(disk->hdr + HEADER_CRC_OFFSET, disk->hdr_crc); - PUT_4_BYTES(disk->hdr_bak + HEADER_CRC_OFFSET, disk->hdr_bak_crc); - return 0; -error: - return -1; -} - -//Write the contents of struct gpt_disk back to the actual disk -int gpt_disk_commit(struct gpt_disk *disk) -{ - int fd = -1; - if (!disk || (disk->is_initialized != GPT_DISK_INIT_MAGIC)){ - ALOGE("%s: Invalid args", __func__); - goto error; - } - fd = open(disk->devpath, O_RDWR); - if (fd < 0) { - ALOGE("%s: Failed to open %s: %s", - __func__, - disk->devpath, - strerror(errno)); - goto error; - } - ALOGI("%s: Writing back primary GPT header", __func__); - //Write the primary header - if(gpt_set_header(disk->hdr, fd, PRIMARY_GPT) != 0) { - ALOGE("%s: Failed to update primary GPT header", - __func__); - goto error; - } - ALOGI("%s: Writing back primary partition array", __func__); - //Write back the primary partition array - if (gpt_set_pentry_arr(disk->hdr, fd, disk->pentry_arr)) { - ALOGE("%s: Failed to write primary GPT partition arr", - __func__); - goto error; - } - fsync(fd); - close(fd); - return 0; -error: - if (fd >= 0) - close(fd); - return -1; -} diff --git a/gpt-utils/gpt-utils.h b/gpt-utils/gpt-utils.h deleted file mode 100644 index 3a93ab34..00000000 --- a/gpt-utils/gpt-utils.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2013, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __GPT_UTILS_H__ -#define __GPT_UTILS_H__ -#include <vector> -#include <string> -#include <map> -#ifdef __cplusplus -extern "C" { -#endif -#include <unistd.h> -#include <stdlib.h> -/****************************************************************************** - * GPT HEADER DEFINES - ******************************************************************************/ -#define GPT_SIGNATURE "EFI PART" -#define HEADER_SIZE_OFFSET 12 -#define HEADER_CRC_OFFSET 16 -#define PRIMARY_HEADER_OFFSET 24 -#define BACKUP_HEADER_OFFSET 32 -#define FIRST_USABLE_LBA_OFFSET 40 -#define LAST_USABLE_LBA_OFFSET 48 -#define PENTRIES_OFFSET 72 -#define PARTITION_COUNT_OFFSET 80 -#define PENTRY_SIZE_OFFSET 84 -#define PARTITION_CRC_OFFSET 88 - -#define TYPE_GUID_OFFSET 0 -#define TYPE_GUID_SIZE 16 -#define PTN_ENTRY_SIZE 128 -#define UNIQUE_GUID_OFFSET 16 -#define FIRST_LBA_OFFSET 32 -#define LAST_LBA_OFFSET 40 -#define ATTRIBUTE_FLAG_OFFSET 48 -#define PARTITION_NAME_OFFSET 56 -#define MAX_GPT_NAME_SIZE 72 - -/****************************************************************************** - * AB RELATED DEFINES - ******************************************************************************/ -//Bit 48 onwords in the attribute field are the ones where we are allowed to -//store our AB attributes. -#define AB_FLAG_OFFSET (ATTRIBUTE_FLAG_OFFSET + 6) -#define GPT_DISK_INIT_MAGIC 0xABCD -#define AB_PARTITION_ATTR_SLOT_ACTIVE (0x1<<2) -#define AB_PARTITION_ATTR_BOOT_SUCCESSFUL (0x1<<6) -#define AB_PARTITION_ATTR_UNBOOTABLE (0x1<<7) -#define AB_SLOT_ACTIVE_VAL 0xF -#define AB_SLOT_INACTIVE_VAL 0x0 -#define AB_SLOT_ACTIVE 1 -#define AB_SLOT_INACTIVE 0 -#define AB_SLOT_A_SUFFIX "_a" -#define AB_SLOT_B_SUFFIX "_b" -#define PTN_XBL "xbl" -#define PTN_SWAP_LIST PTN_XBL, \ - "abl", "aop", "cmnlib", "cmnlib64", "devcfg", \ - "dtbo", "hyp", "keymaster", "qupfw", "storsec", \ - "tz", "vbmeta", "xbl_config" - -#define AB_PTN_LIST PTN_SWAP_LIST, "boot", "system", "vendor", "modem", \ - "system_ext", "product" -#define BOOT_DEV_DIR "/dev/block/bootdevice/by-name" - -/****************************************************************************** - * HELPER MACROS - ******************************************************************************/ -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -/****************************************************************************** - * TYPES - ******************************************************************************/ -enum boot_update_stage { - UPDATE_MAIN = 1, - UPDATE_BACKUP, - UPDATE_FINALIZE -}; - -enum gpt_instance { - PRIMARY_GPT = 0, - SECONDARY_GPT -}; - -enum boot_chain { - NORMAL_BOOT = 0, - BACKUP_BOOT -}; - -struct gpt_disk { - //GPT primary header - uint8_t *hdr; - //primary header crc - uint32_t hdr_crc; - //GPT backup header - uint8_t *hdr_bak; - //backup header crc - uint32_t hdr_bak_crc; - //Partition entries array - uint8_t *pentry_arr; - //Partition entries array for backup table - uint8_t *pentry_arr_bak; - //Size of the pentry array - uint32_t pentry_arr_size; - //Size of each element in the pentry array - uint32_t pentry_size; - //CRC of the partition entry array - uint32_t pentry_arr_crc; - //CRC of the backup partition entry array - uint32_t pentry_arr_bak_crc; - //Path to block dev representing the disk - char devpath[PATH_MAX]; - //Block size of disk - uint32_t block_size; - uint32_t is_initialized; -}; - -/****************************************************************************** - * FUNCTION PROTOTYPES - ******************************************************************************/ -int prepare_boot_update(enum boot_update_stage stage); -//GPT disk methods -struct gpt_disk* gpt_disk_alloc(); -//Free previously allocated gpt_disk struct -void gpt_disk_free(struct gpt_disk *disk); -//Get the details of the disk holding the partition whose name -//is passed in via dev -int gpt_disk_get_disk_info(const char *dev, struct gpt_disk *disk); - -//Get pointer to partition entry from a allocated gpt_disk structure -uint8_t* gpt_disk_get_pentry(struct gpt_disk *disk, - const char *partname, - enum gpt_instance instance); - -//Update the crc fields of the modified disk structure -int gpt_disk_update_crc(struct gpt_disk *disk); - -//Write the contents of struct gpt_disk back to the actual disk -int gpt_disk_commit(struct gpt_disk *disk); - -//Return if the current device is UFS based or not -int gpt_utils_is_ufs_device(); - -//Swtich betwieen using either the primary or the backup -//boot LUN for boot. This is required since UFS boot partitions -//cannot have a backup GPT which is what we use for failsafe -//updates of the other 'critical' partitions. This function will -//not be invoked for emmc targets and on UFS targets is only required -//to be invoked for XBL. -// -//The algorithm to do this is as follows: -//- Find the real block device(eg: /dev/block/sdb) that corresponds -// to the /dev/block/bootdevice/by-name/xbl(bak) symlink -// -//- Once we have the block device 'node' name(sdb in the above example) -// use this node to to locate the scsi generic device that represents -// it by checking the file /sys/block/sdb/device/scsi_generic/sgY -// -//- Once we locate sgY we call the query ioctl on /dev/sgy to switch -//the boot lun to either LUNA or LUNB -int gpt_utils_set_xbl_boot_partition(enum boot_chain chain); - -//Given a vector of partition names as a input and a reference to a map, -//populate the map to indicate which physical disk each of the partitions -//sits on. The key in the map is the path to the block device where the -//partition lies and the value is a vector of strings indicating which of -//the passed in partition names sits on that device. -int gpt_utils_get_partition_map(std::vector<std::string>& partition_list, - std::map<std::string,std::vector<std::string>>& partition_map); -#ifdef __cplusplus -} -#endif -#endif /* __GPT_UTILS_H__ */ diff --git a/json-c/AUTHORS b/json-c/AUTHORS deleted file mode 100644 index b389989c..00000000 --- a/json-c/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Michael Clark <michael@metaparadigm.com> -Jehiah Czebotar <jehiah@gmail.com> -Eric Haszlakiewicz <hawicz+json-c@gmail.com> -C. Watford (christopher.watford@gmail.com) - diff --git a/json-c/Android.configure.mk b/json-c/Android.configure.mk deleted file mode 100644 index a6265ada..00000000 --- a/json-c/Android.configure.mk +++ /dev/null @@ -1,39 +0,0 @@ -# This file is the top android makefile for all sub-modules. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -json_c_TOP := $(LOCAL_PATH) - -JSON_C_BUILT_SOURCES := Android.mk - -JSON_C_BUILT_SOURCES := $(patsubst %, $(abspath $(json_c_TOP))/%, $(JSON_C_BUILT_SOURCES)) - -.PHONY: json-c-configure json-c-configure-real -json-c-configure-real: - echo $(JSON_C_BUILT_SOURCES) - cd $(json_c_TOP) ; \ - $(abspath $(json_c_TOP))/autogen.sh && \ - CC="$(CONFIGURE_CC)" \ - CFLAGS="$(CONFIGURE_CFLAGS)" \ - LD=$(TARGET_LD) \ - LDFLAGS="$(CONFIGURE_LDFLAGS)" \ - CPP=$(CONFIGURE_CPP) \ - CPPFLAGS="$(CONFIGURE_CPPFLAGS)" \ - PKG_CONFIG_LIBDIR=$(CONFIGURE_PKG_CONFIG_LIBDIR) \ - PKG_CONFIG_TOP_BUILD_DIR=/ \ - ac_cv_func_malloc_0_nonnull=yes \ - ac_cv_func_realloc_0_nonnull=yes \ - $(abspath $(json_c_TOP))/$(CONFIGURE) --host=$(CONFIGURE_HOST) \ - --prefix=/system \ - && \ - for file in $(JSON_C_BUILT_SOURCES); do \ - rm -f $$file && \ - make -C $$(dirname $$file) $$(basename $$file) ; \ - done - -json-c-configure: json-c-configure-real - -PA_CONFIGURE_TARGETS += json-c-configure - --include $(json_c_TOP)/Android.mk diff --git a/json-c/COPYING b/json-c/COPYING deleted file mode 100644 index 740d1258..00000000 --- a/json-c/COPYING +++ /dev/null @@ -1,42 +0,0 @@ - -Copyright (c) 2009-2012 Eric Haszlakiewicz - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ----------------------------------------------------------------- - -Copyright (c) 2004, 2005 Metaparadigm Pte Ltd - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/json-c/ChangeLog b/json-c/ChangeLog deleted file mode 100644 index 584ed1fd..00000000 --- a/json-c/ChangeLog +++ /dev/null @@ -1,218 +0,0 @@ - -NEXT.VERSION - - ...nothing yet... - -0.12 - - * Address security issues: - * CVE-2013-6371: hash collision denial of service - * CVE-2013-6370: buffer overflow if size_t is larger than int - - * Avoid potential overflow in json_object_get_double - - * Eliminate the mc_abort() function and MC_ABORT macro. - - * Make the json_tokener_errors array local. It has been deprecated for - a while, and json_tokener_error_desc() should be used instead. - - * change the floating point output format to %.17g so values with - more than 6 digits show up in the output. - - * Remove the old libjson.so name compatibility support. The library is - only created as libjson-c.so now and headers are only installed - into the ${prefix}/json-c directory. - - * When supported by the linker, add the -Bsymbolic-functions flag. - - * Various changes to fix the build on MSVC. - - * Make strict mode more strict: - * number must not start with 0 - * no single-quote strings - * no comments - * trailing char not allowed - * only allow lowercase literals - - * Added a json_object_new_double_s() convenience function to allow - an exact string representation of a double to be specified when - creating the object and use it in json_tokener_parse_ex() so - a re-serialized object more exactly matches the input. - - * Add support NaN and Infinity - - -0.11 - - * IMPORTANT: the name of the library has changed to libjson-c.so and - the header files are now in include/json-c. - The pkgconfig name has also changed from json to json-c. - You should change your build to use appropriate -I and -l options. - A compatibility shim is in place so builds using the old name will - continue to work, but that will be removed in the next release. - * Maximum recursion depth is now a runtime option. - json_tokener_new() is provided for compatibility. - json_tokener_new_ex(depth) - * Include json_object_iterator.h in the installed headers. - * Add support for building on Android. - * Rewrite json_object_object_add to replace just the value if the key already exists so keys remain valid. - * Make it safe to delete keys while iterating with the json_object_object_foreach macro. - * Add a json_set_serializer() function to allow the string output of a json_object to be customized. - * Make float parsing locale independent. - * Add a json_tokener_set_flags() function and a JSON_TOKENER_STRICT flag. - * Enable -Werror when building. - * speed improvements to parsing 64-bit integers on systems with working sscanf - * Add a json_object_object_length function. - * Fix a bug (buffer overrun) when expanding arrays to more than 64 entries. - -0.10 - - * Add a json_object_to_json_string_ext() function to allow output to be - formatted in a more human readable form. - * Add json_object_object_get_ex(), a NULL-safe get object method, to be able - to distinguish between a key not present and the value being NULL. - * Add an alternative iterator implementation, see json_object_iterator.h - * Make json_object_iter public to enable external use of the - json_object_object_foreachC macro. - * Add a printbuf_memset() function to provide an effecient way to set and - append things like whitespace indentation. - * Adjust json_object_is_type and json_object_get_type so they return - json_type_null for NULL objects and handle NULL passed to - json_objct_object_get(). - * Rename boolean type to json_bool. - * Fix various compile issues for Visual Studio and MinGW. - * Allow json_tokener_parse_ex() to be re-used to parse multiple object. - Also, fix some parsing issues with capitalized hexadecimal numbers and - number in E notation. - * Add json_tokener_get_error() and json_tokener_error_desc() to better - encapsulate the process of retrieving errors while parsing. - * Various improvements to the documentation of many functions. - * Add new json_object_array_sort() function. - * Fix a bug in json_object_get_int(), which would incorrectly return 0 - when called on a string type object. - Eric Haszlakiewicz - * Add a json_type_to_name() function. - Eric Haszlakiewicz - * Add a json_tokener_parse_verbose() function. - Jehiah Czebotar - * Improve support for null bytes within JSON strings. - Jehiah Czebotar - * Fix file descriptor leak if memory allocation fails in json_util - Zachary Blair, zack_blair at hotmail dot com - * Add int64 support. Two new functions json_object_net_int64 and - json_object_get_int64. Binary compatibility preserved. - Eric Haszlakiewicz, EHASZLA at transunion com - Rui Miguel Silva Seabra, rms at 1407 dot org - * Fix subtle bug in linkhash where lookup could hang after all slots - were filled then successively freed. - Spotted by Jean-Marc Naud, j dash m at newtraxtech dot com - * Make json_object_from_file take const char *filename - Spotted by Vikram Raj V, vsagar at attinteractive dot com - * Add handling of surrogate pairs (json_tokener.c, test4.c, Makefile.am) - Brent Miller, bdmiller at yahoo dash inc dot com - * Correction to comment describing printbuf_memappend in printbuf.h - Brent Miller, bdmiller at yahoo dash inc dot com - -0.9 - * Add README.html README-WIN32.html config.h.win32 to Makefile.am - Michael Clark, <michael@metaparadigm.com> - * Add const qualifier to the json_tokener_parse functions - Eric Haszlakiewicz, EHASZLA at transunion dot com - * Rename min and max so we can never clash with C or C++ std library - Ian Atha, thatha at yahoo dash inc dot com - * Fix any noticeable spelling or grammar errors. - * Make sure every va_start has a va_end. - * Check all pointers for validity. - Erik Hovland, erik at hovland dot org - * Fix json_object_get_boolean to return false for empty string - Spotted by Vitaly Kruglikov, Vitaly dot Kruglikov at palm dot com - * optimizations to json_tokener_parse_ex(), printbuf_memappend() - Brent Miller, bdmiller at yahoo dash inc dot com - * Disable REFCOUNT_DEBUG by default in json_object.c - * Don't use this as a variable, so we can compile with a C++ compiler - * Add casts from void* to type of assignment when using malloc - * Add #ifdef __cplusplus guards to all of the headers - * Add typedefs for json_object, json_tokener, array_list, printbuf, lh_table - Michael Clark, <michael@metaparadigm.com> - * Null pointer dereference fix. Fix json_object_get_boolean strlen test - to not return TRUE for zero length string. Remove redundant includes. - Erik Hovland, erik at hovland dot org - * Fixed warning reported by adding -Wstrict-prototypes - -Wold-style-definition to the compilatin flags. - Dotan Barak, dotanba at gmail dot com - * Add const correctness to public interfaces - Gerard Krol, g dot c dot krol at student dot tudelft dot nl - -0.8 - * Add va_end for every va_start - Dotan Barak, dotanba at gmail dot com - * Add macros to enable compiling out debug code - Geoffrey Young, geoff at modperlcookbook dot org - * Fix bug with use of capital E in numbers with exponents - Mateusz Loskot, mateusz at loskot dot net - * Add stddef.h include - * Patch allows for json-c compile with -Werror and not fail due to - -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations - Geoffrey Young, geoff at modperlcookbook dot org - -0.7 - * Add escaping of backslash to json output - * Add escaping of foward slash on tokenizing and output - * Changes to internal tokenizer from using recursion to - using a depth state structure to allow incremental parsing - -0.6 - * Fix bug in escaping of control characters - Johan Björklund, johbjo09 at kth dot se - * Remove include "config.h" from headers (should only - be included from .c files) - Michael Clark <michael@metaparadigm.com> - -0.5 - * Make headers C++ compatible by change *this to *obj - * Add ifdef C++ extern "C" to headers - * Use simpler definition of min and max in bits.h - Larry Lansing, llansing at fuzzynerd dot com - - * Remove automake 1.6 requirement - * Move autogen commands into autogen.sh. Update README - * Remove error pointer special case for Windows - * Change license from LGPL to MIT - Michael Clark <michael@metaparadigm.com> - -0.4 - * Fix additional error case in object parsing - * Add back sign reversal in nested object parse as error pointer - value is negative, while error value is positive. - Michael Clark <michael@metaparadigm.com> - -0.3 - * fix pointer arithmetic bug for error pointer check in is_error() macro - * fix type passed to printbuf_memappend in json_tokener - * update autotools bootstrap instructions in README - Michael Clark <michael@metaparadigm.com> - -0.2 - * printbuf.c - C. Watford (christopher.watford@gmail.com) - Added a Win32/Win64 compliant implementation of vasprintf - * debug.c - C. Watford (christopher.watford@gmail.com) - Removed usage of vsyslog on Win32/Win64 systems, needs to be handled - by a configure script - * json_object.c - C. Watford (christopher.watford@gmail.com) - Added scope operator to wrap usage of json_object_object_foreach, this - needs to be rethought to be more ANSI C friendly - * json_object.h - C. Watford (christopher.watford@gmail.com) - Added Microsoft C friendly version of json_object_object_foreach - * json_tokener.c - C. Watford (christopher.watford@gmail.com) - Added a Win32/Win64 compliant implementation of strndup - * json_util.c - C. Watford (christopher.watford@gmail.com) - Added cast and mask to suffice size_t v. unsigned int conversion - correctness - * json_tokener.c - sign reversal issue on error info for nested object parse - spotted by Johan Björklund (johbjo09 at kth.se) - * json_object.c - escape " in json_escape_str - * Change to automake and libtool to build shared and static library - Michael Clark <michael@metaparadigm.com> - -0.1 - * initial release diff --git a/json-c/Doxyfile b/json-c/Doxyfile deleted file mode 100644 index da39aca2..00000000 --- a/json-c/Doxyfile +++ /dev/null @@ -1,1153 +0,0 @@ -# Doxyfile 1.3.8 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = json-c - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.12.99 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of source -# files, where putting all generated files in the same directory would otherwise -# cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is used -# as the annotated text. Otherwise, the brief description is used as-is. If left -# blank, the following values are used ("$name" is automatically replaced with the -# name of the entity): "The $name class" "The $name widget" "The $name file" -# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = NO - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superseded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/json-c/Makefile.am b/json-c/Makefile.am deleted file mode 100644 index 26ced270..00000000 --- a/json-c/Makefile.am +++ /dev/null @@ -1,74 +0,0 @@ -include Makefile.am.inc - -EXTRA_DIST = README.html README-WIN32.html config.h.win32 doc json-c.vcproj -SUBDIRS = . tests - -lib_LTLIBRARIES = libjson-c.la - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = json-c.pc - -libjson_cincludedir = $(includedir)/json-c -libjson_cinclude_HEADERS = \ - arraylist.h \ - bits.h \ - debug.h \ - json.h \ - json_config.h \ - json_c_version.h \ - json_inttypes.h \ - json_object.h \ - json_object_iterator.h \ - json_object_private.h \ - json_tokener.h \ - json_util.h \ - linkhash.h \ - printbuf.h \ - random_seed.h - -#libjsonx_includedir = $(libdir)/json-c-@VERSION@ -# -#libjsonx_include_HEADERS = \ -# json_config.h - -libjson_c_la_LDFLAGS = -version-info 2:0:0 -no-undefined @JSON_BSYMBOLIC_LDFLAGS@ - -libjson_c_la_SOURCES = \ - arraylist.c \ - debug.c \ - json_c_version.c \ - json_object.c \ - json_object_iterator.c \ - json_tokener.c \ - json_util.c \ - linkhash.c \ - printbuf.c \ - random_seed.c - - -distclean-local: - -rm -rf $(testsubdir) - -rm -rf config.h.in~ Makefile.in aclocal.m4 autom4te.cache/ config.guess config.sub depcomp install-sh ltmain.sh missing - -rm -f INSTALL test-driver tests/Makefile.in compile - -maintainer-clean-local: - -rm -rf configure - -uninstall-local: - rm -rf "$(DESTDIR)@includedir@/json-c" - rm -f "$(DESTDIR)@includedir@/json" - -ANDROID_CFLAGS = -I$(top_srcdir) -DHAVE_CONFIG_H - -Android.mk: Makefile.am - androgenizer -:PROJECT json-c \ - -:SHARED libjson-c \ - -:TAGS eng debug \ - -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ - -:SOURCES $(libjson_c_la_SOURCES) $(nodist_libjson_c_la_SOURCES) \ - -:CFLAGS $(DEFS) $(ANDROID_CFLAGS) $(libjson_c_la_CFLAGS) \ - -:LDFLAGS $(libjson_c_la_LDFLAGS) $(libjson_c_la_LIBADD) \ - -:HEADER_TARGET json-c \ - -:HEADERS $(libjson_cinclude_HEADERS) \ - -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ - > $@ diff --git a/json-c/Makefile.am.inc b/json-c/Makefile.am.inc deleted file mode 100644 index fec591b6..00000000 --- a/json-c/Makefile.am.inc +++ /dev/null @@ -1,2 +0,0 @@ -AM_CFLAGS = -Wall -Werror -Wno-error=deprecated-declarations -Wextra -Wwrite-strings -Wno-unused-parameter -std=gnu99 -D_GNU_SOURCE -D_REENTRANT - diff --git a/json-c/README b/json-c/README deleted file mode 100644 index e69de29b..00000000 --- a/json-c/README +++ /dev/null diff --git a/json-c/README-WIN32.html b/json-c/README-WIN32.html deleted file mode 100644 index abdb39e7..00000000 --- a/json-c/README-WIN32.html +++ /dev/null @@ -1,50 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>JSON-C - A JSON implementation in C - Win32 specific notes</title>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- </head>
- <body>
- <h2>Windows specific notes for JSON-C</h2>
- <p>Please send Win32 bug reports to <a href="mailto:christopher.watford@gmail.com">christopher.watford@gmail.com</a></p>
- <p><b>Win32 Specific Changes:</b></p>
- <ul>
- <li>
- Various functions have been redefined to their Win32 version (i.e. <tt>open</tt>
- on win32 is <tt>_open</tt>)</li>
- <li>
- Implemented missing functions from MS's libc (i.e. <tt>vasprintf</tt>)</li>
- <li>
- Added code to allow Win64 support without integer resizing issues, this
- probably makes it much nicer on 64bit machines everywhere (i.e. using <tt>ptrdiff_t</tt>
- for pointer math)</li>
- </ul>
- <p><b>Porting Changelog:</b></p>
- <dl>
- <dt><tt>printbuf.c</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Added a Win32/Win64 compliant implementation of <tt>vasprintf</tt></dd>
- <dt><tt>debug.c</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Removed usage of <tt>vsyslog</tt> on Win32/Win64 systems, needs to be handled
- by a configure script</dd>
- <dt><tt>json_object.c</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Added scope operator to wrap usage of <tt>json_object_object_foreach</tt>, this needs to be
- rethought to be more ANSI C friendly</dd>
- <dt><tt>json_object.h</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Added Microsoft C friendly version of <tt>json_object_object_foreach</tt></dd>
- <dt><tt>json_tokener.c</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Added a Win32/Win64 compliant implementation of <tt>strndup</tt></dd>
- <dt><tt>json_util.c</tt> - C. Watford (christopher.watford@gmail.com)</dt>
- <dd>
- Added cast and mask to suffice <tt>size_t</tt> v. <tt>unsigned int</tt>
- conversion correctness</dd>
- </dl>
- <p>This program is free software; you can redistribute it and/or modify it under
- the terms of the MIT License. See COPYING for details.</p>
- <hr />
- </body>
-</html>
diff --git a/json-c/README.html b/json-c/README.html deleted file mode 100644 index dc696af3..00000000 --- a/json-c/README.html +++ /dev/null @@ -1,34 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <title>JSON-C - A JSON implementation in C</title> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - </head> - <body> - <h2>JSON-C - A JSON implementation in C</h2> - - <h3>Overview</h3> - <p>JSON-C implements a reference counting object model that allows you to easily - construct JSON objects in C, output them as JSON formatted strings and parse - JSON formatted strings back into the C representation of JSON objects.</p> - - <h3>Building</h3> - <p>To setup JSON-C to build on your system please run <tt>configure</tt> and <tt>make</tt>.</p> - <p>If you are on Win32 and are not using the VS project file, be sure - to rename <tt>config.h.win32</tt> to <tt>config.h</tt> before building.</p> - - <h3>Documentation</h3> - <P>Doxygen generated documentation exists <a href="doc/html/json__object_8h.html">here</a> - and Win32 specific notes can be found <a href="README-WIN32.html">here</a>.</P> - - <h3><a href="https://github.com/json-c/json-c">GIT Reposository</a></h3> - <p><strong><code>git clone https://github.com/json-c/json-c.git</code></strong></p> - - <h3><a href="http://groups.google.com/group/json-c">Mailing List</a></h3> - <pi>Send email to <strong><code>json-c <i><at></i> googlegroups <i><dot></i> com</code></strong></p> - - <h3><a href="COPYING">License</a></h3> - <p>This program is free software; you can redistribute it and/or modify it under the terms of the MIT License..</p> - <hr/> - </body> -</html> diff --git a/json-c/README.md b/json-c/README.md deleted file mode 100644 index bf4d2e4f..00000000 --- a/json-c/README.md +++ /dev/null @@ -1,63 +0,0 @@ -`json-c` -======== - -Building on Unix with `git`, `gcc` and `autotools` --------------------------------------------------- - -Home page for json-c: https://github.com/json-c/json-c/wiki - -Caution: do **NOT** use sources from svn.metaparadigm.com, -they are old. - -Prerequisites: - - - `gcc`, `clang`, or another C compiler - - `libtool` - -If you're not using a release tarball, you'll also need: - - - `autoconf` (`autoreconf`) - - `automake` - -Make sure you have a complete `libtool` install, including `libtoolize`. - -`json-c` GitHub repo: https://github.com/json-c/json-c - -```bash -$ git clone https://github.com/json-c/json-c.git -$ cd json-c -$ sh autogen.sh -``` - -followed by - -```bash -$ ./configure -$ make -$ make install -``` - -To build and run the test programs: - -```bash -$ make check -``` - -Linking to `libjson-c` ----------------------- - -If your system has `pkgconfig`, -then you can just add this to your `makefile`: - -```make -CFLAGS += $(shell pkg-config --cflags json-c) -LDFLAGS += $(shell pkg-config --libs json-c) -``` - -Without `pkgconfig`, you would do something like this: - -```make -JSON_C_DIR=/path/to/json_c/install -CFLAGS += -I$(JSON_C_DIR)/include/json-c -LDFLAGS+= -L$(JSON_C_DIR)/lib -ljson-c -``` diff --git a/json-c/RELEASE_CHECKLIST.txt b/json-c/RELEASE_CHECKLIST.txt deleted file mode 100644 index 47132582..00000000 --- a/json-c/RELEASE_CHECKLIST.txt +++ /dev/null @@ -1,132 +0,0 @@ - -Release checklist: - -release=0.12 -git clone https://github.com/json-c/json-c json-c-${release} -cd json-c-${release} - -Check that the compile works on Linux -Check that the compile works on NetBSD -Check that the compile works on Windows -Check ChangeLog to see if anything should be added. -Make any fixes/changes *before* branching. - - git branch json-c-${release} - git checkout json-c-${release} - ------------- - -Update the version in json_c_version.h -Update the version in Doxyfile -Update the version in configure.ac - Use ${release}. - -Update the libjson_la_LDFLAGS line in Makefile.am to the new version. - Generally, unless we're doing a major release, change: - -version-info x:y:z - to - -version-info x:y+1:z - ------------- - -Generate the configure script and other files: - sh autogen.sh - git add -f Makefile.in aclocal.m4 config.guess \ - config.sub configure depcomp install-sh \ - ltmain.sh missing tests/Makefile.in \ - INSTALL - - # check for anything else to be added: - git status --ignored - git commit - ------------- - -Generate the doxygen documentation: - doxygen - git add -f doc - git commit doc - ------------- - -cd .. -echo .git > excludes -echo autom4te.cache >> excludes -tar -czf json-c-${release}.tar.gz -X excludes json-c-${release} - -echo doc >> excludes -tar -czf json-c-${release}-nodoc.tar.gz -X excludes json-c-${release} - ------------- - -Tag the branch: -cd json-c-${release} -git tag -a json-c-${release}-$(date +%Y%m%d) -m "Release json-c-${release}" - -git push origin json-c-${release} -git push --tags - ------------- - -Go to Amazon S3 service at: - https://console.aws.amazon.com/s3/ - -Upload the two tarballs in the json-c_releases folder. - When uploading, use "Reduced Redundancy", and make the uploaded files publicly accessible. - -Logout of Amazon S3, and verify that the files are visible. - https://s3.amazonaws.com/json-c_releases/releases/index.html - -=================================== - -Post-release checklist: - -git checkout master -Add new section to ChangeLog -Update the version in json_c_version.h -Update the version in Doxyfile -Update the version in configure.ac - Use ${release}.99 to indicate a version "newer" than anything on the branch. - -Leave the libjson_la_LDFLAGS line in Makefile.am alone. - For more details see: - http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html - ------------- - -Update the gh-pages branch with new docs: - -cd json-c-${release} -git checkout json-c-${release} -cd .. - -git clone -b gh-pages https://github.com/json-c/json-c json-c-pages -cd json-c-pages -mkdir json-c-${release} -cp -R ../json-c-${release}/doc json-c-${release}/. -cp ../json-c-${release}/README-WIN32.html json-c-${release}/. -git add json-c-${release} -git commit - -vi index.html - Add/change links to current release. - -git commit index.html - -git push - ------------- - -Update checksums on wiki page. - -cd .. -openssl sha -sha256 json-c*gz -openssl md5 json-c*gz - -Copy and paste this output into the wiki page at: - https://github.com/json-c/json-c/wiki - ------------- - -Send an email to the mailing list. - diff --git a/json-c/arraylist.c b/json-c/arraylist.c deleted file mode 100644 index 1d899fa9..00000000 --- a/json-c/arraylist.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * $Id: arraylist.c,v 1.4 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include "config.h" - -#ifdef STDC_HEADERS -# include <stdlib.h> -# include <string.h> -#endif /* STDC_HEADERS */ - -#if defined(HAVE_STRINGS_H) && !defined(_STRING_H) && !defined(__USE_BSD) -# include <strings.h> -#endif /* HAVE_STRINGS_H */ - -#include "arraylist.h" - -struct array_list* -array_list_new(array_list_free_fn *free_fn) -{ - struct array_list *arr; - - arr = (struct array_list*)calloc(1, sizeof(struct array_list)); - if(!arr) return NULL; - arr->size = ARRAY_LIST_DEFAULT_SIZE; - arr->length = 0; - arr->free_fn = free_fn; - if(!(arr->array = (void**)calloc(sizeof(void*), arr->size))) { - free(arr); - return NULL; - } - return arr; -} - -extern void -array_list_free(struct array_list *arr) -{ - int i; - for(i = 0; i < arr->length; i++) - if(arr->array[i]) arr->free_fn(arr->array[i]); - free(arr->array); - free(arr); -} - -void* -array_list_get_idx(struct array_list *arr, int i) -{ - if(i >= arr->length) return NULL; - return arr->array[i]; -} - -static int array_list_expand_internal(struct array_list *arr, int max) -{ - void *t; - int new_size; - - if(max < arr->size) return 0; - new_size = arr->size << 1; - if (new_size < max) - new_size = max; - if(!(t = realloc(arr->array, new_size*sizeof(void*)))) return -1; - arr->array = (void**)t; - (void)memset(arr->array + arr->size, 0, (new_size-arr->size)*sizeof(void*)); - arr->size = new_size; - return 0; -} - -int -array_list_put_idx(struct array_list *arr, int idx, void *data) -{ - if(array_list_expand_internal(arr, idx+1)) return -1; - if(arr->array[idx]) arr->free_fn(arr->array[idx]); - arr->array[idx] = data; - if(arr->length <= idx) arr->length = idx + 1; - return 0; -} - -int -array_list_add(struct array_list *arr, void *data) -{ - return array_list_put_idx(arr, arr->length, data); -} - -void -array_list_sort(struct array_list *arr, int(*sort_fn)(const void *, const void *)) -{ - qsort(arr->array, arr->length, sizeof(arr->array[0]), - (int (*)(const void *, const void *))sort_fn); -} - -int -array_list_length(struct array_list *arr) -{ - return arr->length; -} diff --git a/json-c/arraylist.h b/json-c/arraylist.h deleted file mode 100644 index 4f3113c0..00000000 --- a/json-c/arraylist.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * $Id: arraylist.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _arraylist_h_ -#define _arraylist_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -#define ARRAY_LIST_DEFAULT_SIZE 32 - -typedef void (array_list_free_fn) (void *data); - -struct array_list -{ - void **array; - int length; - int size; - array_list_free_fn *free_fn; -}; - -extern struct array_list* -array_list_new(array_list_free_fn *free_fn); - -extern void -array_list_free(struct array_list *al); - -extern void* -array_list_get_idx(struct array_list *al, int i); - -extern int -array_list_put_idx(struct array_list *al, int i, void *data); - -extern int -array_list_add(struct array_list *al, void *data); - -extern int -array_list_length(struct array_list *al); - -extern void -array_list_sort(struct array_list *arr, int(*compar)(const void *, const void *)); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/autogen.sh b/json-c/autogen.sh deleted file mode 100755 index 69e765a6..00000000 --- a/json-c/autogen.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -autoreconf -v --install || exit 1 - -# If there are any options, assume the user wants to run configure. -# To run configure w/o any options, use ./autogen.sh --configure -if [ $# -gt 0 ] ; then - case "$1" in - --conf*) - shift 1 - ;; - esac - exec ./configure "$@" -fi diff --git a/json-c/bits.h b/json-c/bits.h deleted file mode 100644 index d14a1db0..00000000 --- a/json-c/bits.h +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @file - * @deprecated Use json_util.h instead. - * - * $Id: bits.h,v 1.10 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _bits_h_ -#define _bits_h_ - -/** - * @deprecated - */ -#define hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9) -/** - * @deprecated - */ -#define error_ptr(error) ((void*)error) -/** - * @deprecated - */ -#define error_description(error) (json_tokener_get_error(error)) -/** - * @deprecated - */ -#define is_error(ptr) (ptr == NULL) - -#endif diff --git a/json-c/check.log b/json-c/check.log deleted file mode 100644 index 3c73d2ae..00000000 --- a/json-c/check.log +++ /dev/null @@ -1,2 +0,0 @@ -HEAD is now at 6442a2f... json-c: Add libjson to the vendor image -HEAD is now at 6442a2f... json-c: Add libjson to the vendor image diff --git a/json-c/config.h b/json-c/config.h deleted file mode 100644 index f958d440..00000000 --- a/json-c/config.h +++ /dev/null @@ -1,178 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Enable RDRANR Hardware RNG Hash Seed */ -/* #undef ENABLE_RDRAND */ - -/* Define if .gnu.warning accepts long strings. */ -/* #undef HAS_GNU_WARNING_LONG */ - -/* Define to 1 if you have the declaration of `INFINITY', and to 0 if you - don't. */ -#define HAVE_DECL_INFINITY 1 - -/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't. - */ -#define HAVE_DECL_ISINF 1 - -/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't. - */ -#define HAVE_DECL_ISNAN 1 - -/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */ -#define HAVE_DECL_NAN 1 - -/* Define to 1 if you have the declaration of `_finite', and to 0 if you - don't. */ -#define HAVE_DECL__FINITE 0 - -/* Define to 1 if you have the declaration of `_isnan', and to 0 if you don't. - */ -#define HAVE_DECL__ISNAN 0 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -/* #undef HAVE_DOPRNT */ - -/* Define to 1 if you have the <endian.h> header file. */ -#define HAVE_ENDIAN_H 1 - -/* Define to 1 if you have the <fcntl.h> header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the <limits.h> header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if you have the <locale.h> header file. */ -#define HAVE_LOCALE_H 1 - -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `open' function. */ -#define HAVE_OPEN 1 - -/* Define to 1 if your system has a GNU libc compatible `realloc' function, - and to 0 otherwise. */ -#define HAVE_REALLOC 1 - -/* Define to 1 if you have the `setlocale' function. */ -#define HAVE_SETLOCALE 1 - -/* Define to 1 if you have the `snprintf' function. */ -#define HAVE_SNPRINTF 1 - -/* Define to 1 if you have the <stdarg.h> header file. */ -#define HAVE_STDARG_H 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strcasecmp' function. */ -#define HAVE_STRCASECMP 1 - -/* Define to 1 if you have the `strdup' function. */ -#define HAVE_STRDUP 1 - -/* Define to 1 if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strncasecmp' function. */ -#define HAVE_STRNCASECMP 1 - -/* Define to 1 if you have the <syslog.h> header file. */ -#define HAVE_SYSLOG_H 1 - -/* Define to 1 if you have the <sys/cdefs.h> header file. */ -#define HAVE_SYS_CDEFS_H 1 - -/* Define to 1 if you have the <sys/param.h> header file. */ -#define HAVE_SYS_PARAM_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `vasprintf' function. */ -#define HAVE_VASPRINTF 1 - -/* Define to 1 if you have the `vprintf' function. */ -#define HAVE_VPRINTF 1 - -/* Define to 1 if you have the `vsnprintf' function. */ -#define HAVE_VSNPRINTF 1 - -/* Define to 1 if you have the `vsyslog' function. */ -#define HAVE_VSYSLOG 1 - -/* Public define for json_inttypes.h */ -#define JSON_C_HAVE_INTTYPES_H 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -/* #undef NO_MINUS_C_MINUS_O */ - -/* Name of package */ -#define PACKAGE "json-c" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "json-c@googlegroups.com" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "json-c" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "json-c 0.12.99" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "json-c" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "0.12.99" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "0.12.99" - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to rpl_malloc if the replacement function should be used. */ -/* #undef malloc */ - -/* Define to rpl_realloc if the replacement function should be used. */ -/* #undef realloc */ - -/* Define to `unsigned int' if <sys/types.h> does not define. */ -/* #undef size_t */ diff --git a/json-c/config.h.in b/json-c/config.h.in deleted file mode 100644 index af2e5fc2..00000000 --- a/json-c/config.h.in +++ /dev/null @@ -1,177 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Enable RDRANR Hardware RNG Hash Seed */ -#undef ENABLE_RDRAND - -/* Define if .gnu.warning accepts long strings. */ -#undef HAS_GNU_WARNING_LONG - -/* Define to 1 if you have the declaration of `INFINITY', and to 0 if you - don't. */ -#undef HAVE_DECL_INFINITY - -/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't. - */ -#undef HAVE_DECL_ISINF - -/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't. - */ -#undef HAVE_DECL_ISNAN - -/* Define to 1 if you have the declaration of `nan', and to 0 if you don't. */ -#undef HAVE_DECL_NAN - -/* Define to 1 if you have the declaration of `_finite', and to 0 if you - don't. */ -#undef HAVE_DECL__FINITE - -/* Define to 1 if you have the declaration of `_isnan', and to 0 if you don't. - */ -#undef HAVE_DECL__ISNAN - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -#undef HAVE_DOPRNT - -/* Define to 1 if you have the <endian.h> header file. */ -#undef HAVE_ENDIAN_H - -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the <limits.h> header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the <locale.h> header file. */ -#undef HAVE_LOCALE_H - -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#undef HAVE_MALLOC - -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `open' function. */ -#undef HAVE_OPEN - -/* Define to 1 if your system has a GNU libc compatible `realloc' function, - and to 0 otherwise. */ -#undef HAVE_REALLOC - -/* Define to 1 if you have the `setlocale' function. */ -#undef HAVE_SETLOCALE - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Define to 1 if you have the <stdarg.h> header file. */ -#undef HAVE_STDARG_H - -/* Define to 1 if you have the <stdint.h> header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - -/* Define to 1 if you have the `strerror' function. */ -#undef HAVE_STRERROR - -/* Define to 1 if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the `strncasecmp' function. */ -#undef HAVE_STRNCASECMP - -/* Define to 1 if you have the <syslog.h> header file. */ -#undef HAVE_SYSLOG_H - -/* Define to 1 if you have the <sys/cdefs.h> header file. */ -#undef HAVE_SYS_CDEFS_H - -/* Define to 1 if you have the <sys/param.h> header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the <sys/types.h> header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if you have the `vasprintf' function. */ -#undef HAVE_VASPRINTF - -/* Define to 1 if you have the `vprintf' function. */ -#undef HAVE_VPRINTF - -/* Define to 1 if you have the `vsnprintf' function. */ -#undef HAVE_VSNPRINTF - -/* Define to 1 if you have the `vsyslog' function. */ -#undef HAVE_VSYSLOG - -/* Public define for json_inttypes.h */ -#undef JSON_C_HAVE_INTTYPES_H - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to rpl_malloc if the replacement function should be used. */ -#undef malloc - -/* Define to rpl_realloc if the replacement function should be used. */ -#undef realloc - -/* Define to `unsigned int' if <sys/types.h> does not define. */ -#undef size_t diff --git a/json-c/configure.ac b/json-c/configure.ac deleted file mode 100644 index c50f81bd..00000000 --- a/json-c/configure.ac +++ /dev/null @@ -1,107 +0,0 @@ -AC_PREREQ(2.52) - -# Process this file with autoconf to produce a configure script. -AC_INIT([json-c], 0.12.99, [json-c@googlegroups.com]) - -AM_INIT_AUTOMAKE - -AC_PROG_MAKE_SET - -AC_ARG_ENABLE(rdrand, - AS_HELP_STRING([--enable-rdrand], - [Enable RDRAND Hardware RNG Hash Seed generation on supported x86/x64 platforms.]), -[if test x$enableval = xyes; then - enable_rdrand=yes - AC_DEFINE(ENABLE_RDRAND, 1, [Enable RDRANR Hardware RNG Hash Seed]) -fi]) - -if test "x$enable_rdrand" = "xyes"; then - AC_MSG_RESULT([RDRAND Hardware RNG Hash Seed enabled on supported x86/x64 platforms]) -else - AC_MSG_RESULT([RDRAND Hardware RNG Hash Seed disabled. Use --enable-rdrand to enable]) -fi - -# Checks for programs. - -# Checks for libraries. - -# Checks for header files. -AM_PROG_CC_C_O -AC_CONFIG_HEADER(config.h) -AC_CONFIG_HEADER(json_config.h) -AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h limits.h strings.h syslog.h unistd.h [sys/cdefs.h] [sys/param.h] stdarg.h locale.h endian.h) -AC_CHECK_HEADER(inttypes.h,[AC_DEFINE([JSON_C_HAVE_INTTYPES_H],[1],[Public define for json_inttypes.h])]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_FUNC_VPRINTF -AC_FUNC_MEMCMP -AC_FUNC_MALLOC -AC_FUNC_REALLOC -AC_CHECK_FUNCS(strcasecmp strdup strerror snprintf vsnprintf vasprintf open vsyslog strncasecmp setlocale) -AC_CHECK_DECLS([INFINITY], [], [], [[#include <math.h>]]) -AC_CHECK_DECLS([nan], [], [], [[#include <math.h>]]) -AC_CHECK_DECLS([isnan], [], [], [[#include <math.h>]]) -AC_CHECK_DECLS([isinf], [], [], [[#include <math.h>]]) -AC_CHECK_DECLS([_isnan], [], [], [[#include <float.h>]]) -AC_CHECK_DECLS([_finite], [], [], [[#include <float.h>]]) - -#check if .section.gnu.warning accepts long strings (for __warn_references) -AC_LANG_PUSH([C]) - -AC_MSG_CHECKING([if .gnu.warning accepts long strings]) -AC_LINK_IFELSE([AC_LANG_SOURCE([[ -extern void json_object_get(); -__asm__(".section .gnu.json_object_get,\n\t.ascii \"Please link against libjson-c instead of libjson\"\n\t.text"); - -int main(int c,char* v) {return 0;} -]])], [ - AC_DEFINE(HAS_GNU_WARNING_LONG, 1, [Define if .gnu.warning accepts long strings.]) - AC_MSG_RESULT(yes) -], [ - AC_MSG_RESULT(no) -]) - -AC_LANG_POP([C]) - -AM_PROG_LIBTOOL - -# Check for the -Bsymbolic-functions linker flag -AC_ARG_ENABLE([Bsymbolic], - [AS_HELP_STRING([--disable-Bsymbolic], [Avoid linking with -Bsymbolic-function])], - [], - [enable_Bsymbolic=check]) - -AS_IF([test "x$enable_Bsymbolic" = "xcheck"], - [ - saved_LDFLAGS="${LDFLAGS}" - AC_MSG_CHECKING([for -Bsymbolic-functions linker flag]) - LDFLAGS=-Wl,-Bsymbolic-functions - AC_TRY_LINK([], [int main (void) { return 0; }], - [ - AC_MSG_RESULT([yes]) - enable_Bsymbolic=yes - ], - [ - AC_MSG_RESULT([no]) - enable_Bsymbolic=no - ]) - LDFLAGS="${saved_LDFLAGS}" - ]) - -AS_IF([test "x$enable_Bsymbolic" = "xyes"], [JSON_BSYMBOLIC_LDFLAGS=-Wl[,]-Bsymbolic-functions]) -AC_SUBST(JSON_BSYMBOLIC_LDFLAGS) - -AC_CONFIG_FILES([ -Makefile -json-c.pc -tests/Makefile -json-c-uninstalled.pc -]) - -AC_OUTPUT - diff --git a/json-c/debug.c b/json-c/debug.c deleted file mode 100644 index 3b64b590..00000000 --- a/json-c/debug.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * $Id: debug.c,v 1.5 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <stdarg.h> - -#if HAVE_SYSLOG_H -# include <syslog.h> -#endif /* HAVE_SYSLOG_H */ - -#if HAVE_UNISTD_H -# include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -#if HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif /* HAVE_SYS_PARAM_H */ - -#include "debug.h" - -static int _syslog = 0; -static int _debug = 0; - -void mc_set_debug(int debug) { _debug = debug; } -int mc_get_debug(void) { return _debug; } - -extern void mc_set_syslog(int syslog) -{ - _syslog = syslog; -} - -void mc_debug(const char *msg, ...) -{ - va_list ap; - if(_debug) { - va_start(ap, msg); -#if HAVE_VSYSLOG - if(_syslog) { - vsyslog(LOG_DEBUG, msg, ap); - } else -#endif - vprintf(msg, ap); - va_end(ap); - } -} - -void mc_error(const char *msg, ...) -{ - va_list ap; - va_start(ap, msg); -#if HAVE_VSYSLOG - if(_syslog) { - vsyslog(LOG_ERR, msg, ap); - } else -#endif - vfprintf(stderr, msg, ap); - va_end(ap); -} - -void mc_info(const char *msg, ...) -{ - va_list ap; - va_start(ap, msg); -#if HAVE_VSYSLOG - if(_syslog) { - vsyslog(LOG_INFO, msg, ap); - } else -#endif - vfprintf(stderr, msg, ap); - va_end(ap); -} diff --git a/json-c/debug.h b/json-c/debug.h deleted file mode 100644 index 80ca3e43..00000000 --- a/json-c/debug.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * $Id: debug.h,v 1.5 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _DEBUG_H_ -#define _DEBUG_H_ - -#include <stdlib.h> - -#ifdef __cplusplus -extern "C" { -#endif - -extern void mc_set_debug(int debug); -extern int mc_get_debug(void); - -extern void mc_set_syslog(int syslog); - -extern void mc_debug(const char *msg, ...); -extern void mc_error(const char *msg, ...); -extern void mc_info(const char *msg, ...); - -#ifndef __STRING -#define __STRING(x) #x -#endif - -#ifndef PARSER_BROKEN_FIXED - -#define JASSERT(cond) do {} while(0) - -#else - -#define JASSERT(cond) do { \ - if (!(cond)) { \ - mc_error("cjson assert failure %s:%d : cond \"" __STRING(cond) "failed\n", __FILE__, __LINE__); \ - *(int *)0 = 1;\ - abort(); \ - }\ - } while(0) - -#endif - -#define MC_ERROR(x, ...) mc_error(x, ##__VA_ARGS__) - -#ifdef MC_MAINTAINER_MODE -#define MC_SET_DEBUG(x) mc_set_debug(x) -#define MC_GET_DEBUG() mc_get_debug() -#define MC_SET_SYSLOG(x) mc_set_syslog(x) -#define MC_DEBUG(x, ...) mc_debug(x, ##__VA_ARGS__) -#define MC_INFO(x, ...) mc_info(x, ##__VA_ARGS__) -#else -#define MC_SET_DEBUG(x) if (0) mc_set_debug(x) -#define MC_GET_DEBUG() (0) -#define MC_SET_SYSLOG(x) if (0) mc_set_syslog(x) -#define MC_DEBUG(x, ...) if (0) mc_debug(x, ##__VA_ARGS__) -#define MC_INFO(x, ...) if (0) mc_info(x, ##__VA_ARGS__) -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/json-c-uninstalled.pc.in b/json-c/json-c-uninstalled.pc.in deleted file mode 100644 index dab2bab5..00000000 --- a/json-c/json-c-uninstalled.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix= -exec_prefix= -libdir=@abs_top_builddir@ -includedir=@abs_top_srcdir@ - -Name: json -Description: JSON implementation in C -Version: @VERSION@ -Requires: -Libs: -L@abs_top_builddir@ -ljson-c -Cflags: -I@abs_top_srcdir@ diff --git a/json-c/json-c.pc.in b/json-c/json-c.pc.in deleted file mode 100644 index 037739d2..00000000 --- a/json-c/json-c.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: json-c -Description: JSON implementation in C -Version: @VERSION@ -Requires: -Libs: -L${libdir} -ljson-c -Cflags: -I${includedir}/json-c diff --git a/json-c/json.h b/json-c/json.h deleted file mode 100644 index e198f5da..00000000 --- a/json-c/json.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * $Id: json.h,v 1.6 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _json_h_ -#define _json_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "debug.h" -#include "linkhash.h" -#include "arraylist.h" -#include "json_util.h" -#include "json_object.h" -#include "json_tokener.h" -#include "json_object_iterator.h" -#include "json_c_version.h" - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/json_c_version.c b/json-c/json_c_version.c deleted file mode 100644 index 13eb1885..00000000 --- a/json-c/json_c_version.c +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2012 Eric Haszlakiewicz - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - */ -#include "config.h" - -#include "json_c_version.h" - -const char *json_c_version(void) -{ - return JSON_C_VERSION; -} - -int json_c_version_num(void) -{ - return JSON_C_VERSION_NUM; -} - diff --git a/json-c/json_c_version.h b/json-c/json_c_version.h deleted file mode 100644 index d77f1a74..00000000 --- a/json-c/json_c_version.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2012 Eric Haszlakiewicz - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - */ - -#ifndef _json_c_version_h_ -#define _json_c_version_h_ - -#define JSON_C_MAJOR_VERSION 0 -#define JSON_C_MINOR_VERSION 12 -#define JSON_C_MICRO_VERSION 99 -#define JSON_C_VERSION_NUM ((JSON_C_MAJOR_VERSION << 16) | \ - (JSON_C_MINOR_VERSION << 8) | \ - JSON_C_MICRO_VERSION) -#define JSON_C_VERSION "0.12.99" - -const char *json_c_version(void); /* Returns JSON_C_VERSION */ -int json_c_version_num(void); /* Returns JSON_C_VERSION_NUM */ - -#endif diff --git a/json-c/json_config.h b/json-c/json_config.h deleted file mode 100644 index 965ff1c3..00000000 --- a/json-c/json_config.h +++ /dev/null @@ -1,4 +0,0 @@ -/* json_config.h. Generated from json_config.h.in by configure. */ - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define JSON_C_HAVE_INTTYPES_H 1 diff --git a/json-c/json_config.h.in b/json-c/json_config.h.in deleted file mode 100644 index 7888e021..00000000 --- a/json-c/json_config.h.in +++ /dev/null @@ -1,3 +0,0 @@ - -/* Define to 1 if you have the <inttypes.h> header file. */ -#undef JSON_C_HAVE_INTTYPES_H diff --git a/json-c/json_inttypes.h b/json-c/json_inttypes.h deleted file mode 100644 index 9de8d246..00000000 --- a/json-c/json_inttypes.h +++ /dev/null @@ -1,28 +0,0 @@ - -#ifndef _json_inttypes_h_ -#define _json_inttypes_h_ - -#include "json_config.h" - -#if defined(_MSC_VER) && _MSC_VER <= 1700 - -/* Anything less than Visual Studio C++ 10 is missing stdint.h and inttypes.h */ -typedef __int32 int32_t; -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX ((int32_t)_I32_MAX) -typedef __int64 int64_t; -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX ((int64_t)_I64_MAX) -#define PRId64 "I64d" -#define SCNd64 "I64d" - -#else - -#ifdef JSON_C_HAVE_INTTYPES_H -#include <inttypes.h> -#endif -/* inttypes.h includes stdint.h */ - -#endif - -#endif diff --git a/json-c/json_object.c b/json-c/json_object.c deleted file mode 100644 index 8ed02398..00000000 --- a/json-c/json_object.c +++ /dev/null @@ -1,913 +0,0 @@ -/* - * $Id: json_object.c,v 1.17 2006/07/25 03:24:50 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <string.h> -#include <math.h> -#include <errno.h> - -#include "debug.h" -#include "printbuf.h" -#include "linkhash.h" -#include "arraylist.h" -#include "json_inttypes.h" -#include "json_object.h" -#include "json_object_private.h" -#include "json_util.h" -#include "math_compat.h" - -#if !defined(HAVE_STRDUP) && defined(_MSC_VER) - /* MSC has the version as _strdup */ -# define strdup _strdup -#elif !defined(HAVE_STRDUP) -# error You do not have strdup on your system. -#endif /* HAVE_STRDUP */ - -#if !defined(HAVE_SNPRINTF) && defined(_MSC_VER) - /* MSC has the version as _snprintf */ -# define snprintf _snprintf -#elif !defined(HAVE_SNPRINTF) -# error You do not have snprintf on your system. -#endif /* HAVE_SNPRINTF */ - -// Don't define this. It's not thread-safe. -/* #define REFCOUNT_DEBUG 1 */ - -const char *json_number_chars = "0123456789.+-eE"; -const char *json_hex_chars = "0123456789abcdefABCDEF"; - -static void json_object_generic_delete(struct json_object* jso); -static struct json_object* json_object_new(enum json_type o_type); - -static json_object_to_json_string_fn json_object_object_to_json_string; -static json_object_to_json_string_fn json_object_boolean_to_json_string; -static json_object_to_json_string_fn json_object_int_to_json_string; -static json_object_to_json_string_fn json_object_double_to_json_string; -static json_object_to_json_string_fn json_object_string_to_json_string; -static json_object_to_json_string_fn json_object_array_to_json_string; - - -/* ref count debugging */ - -#ifdef REFCOUNT_DEBUG - -static struct lh_table *json_object_table; - -static void json_object_init(void) __attribute__ ((constructor)); -static void json_object_init(void) { - MC_DEBUG("json_object_init: creating object table\n"); - json_object_table = lh_kptr_table_new(128, "json_object_table", NULL); -} - -static void json_object_fini(void) __attribute__ ((destructor)); -static void json_object_fini(void) -{ - struct lh_entry *ent; - if (MC_GET_DEBUG()) - { - if (json_object_table->count) - { - MC_DEBUG("json_object_fini: %d referenced objects at exit\n", - json_object_table->count); - lh_foreach(json_object_table, ent) - { - struct json_object* obj = (struct json_object*)ent->v; - MC_DEBUG("\t%s:%p\n", json_type_to_name(obj->o_type), obj); - } - } - } - MC_DEBUG("json_object_fini: freeing object table\n"); - lh_table_free(json_object_table); -} -#endif /* REFCOUNT_DEBUG */ - - -/* string escaping */ - -static int json_escape_str(struct printbuf *pb, char *str, int len) -{ - int pos = 0, start_offset = 0; - unsigned char c; - while (len--) - { - c = str[pos]; - switch(c) - { - case '\b': - case '\n': - case '\r': - case '\t': - case '\f': - case '"': - case '\\': - case '/': - if(pos - start_offset > 0) - printbuf_memappend(pb, str + start_offset, pos - start_offset); - - if(c == '\b') printbuf_memappend(pb, "\\b", 2); - else if(c == '\n') printbuf_memappend(pb, "\\n", 2); - else if(c == '\r') printbuf_memappend(pb, "\\r", 2); - else if(c == '\t') printbuf_memappend(pb, "\\t", 2); - else if(c == '\f') printbuf_memappend(pb, "\\f", 2); - else if(c == '"') printbuf_memappend(pb, "\\\"", 2); - else if(c == '\\') printbuf_memappend(pb, "\\\\", 2); - else if(c == '/') printbuf_memappend(pb, "\\/", 2); - - start_offset = ++pos; - break; - default: - if(c < ' ') - { - if(pos - start_offset > 0) - printbuf_memappend(pb, str + start_offset, pos - start_offset); - sprintbuf(pb, "\\u00%c%c", - json_hex_chars[c >> 4], - json_hex_chars[c & 0xf]); - start_offset = ++pos; - } else - pos++; - } - } - if (pos - start_offset > 0) - printbuf_memappend(pb, str + start_offset, pos - start_offset); - return 0; -} - - -/* reference counting */ - -extern struct json_object* json_object_get(struct json_object *jso) -{ - if (jso) - jso->_ref_count++; - return jso; -} - -int json_object_put(struct json_object *jso) -{ - if(jso) - { - jso->_ref_count--; - if(!jso->_ref_count) - { - if (jso->_user_delete) - jso->_user_delete(jso, jso->_userdata); - jso->_delete(jso); - return 1; - } - } - return 0; -} - - -/* generic object construction and destruction parts */ - -static void json_object_generic_delete(struct json_object* jso) -{ -#ifdef REFCOUNT_DEBUG - MC_DEBUG("json_object_delete_%s: %p\n", - json_type_to_name(jso->o_type), jso); - lh_table_delete(json_object_table, jso); -#endif /* REFCOUNT_DEBUG */ - printbuf_free(jso->_pb); - free(jso); -} - -static struct json_object* json_object_new(enum json_type o_type) -{ - struct json_object *jso; - - jso = (struct json_object*)calloc(sizeof(struct json_object), 1); - if (!jso) - return NULL; - jso->o_type = o_type; - jso->_ref_count = 1; - jso->_delete = &json_object_generic_delete; -#ifdef REFCOUNT_DEBUG - lh_table_insert(json_object_table, jso, jso); - MC_DEBUG("json_object_new_%s: %p\n", json_type_to_name(jso->o_type), jso); -#endif /* REFCOUNT_DEBUG */ - return jso; -} - - -/* type checking functions */ - -int json_object_is_type(struct json_object *jso, enum json_type type) -{ - if (!jso) - return (type == json_type_null); - return (jso->o_type == type); -} - -enum json_type json_object_get_type(struct json_object *jso) -{ - if (!jso) - return json_type_null; - return jso->o_type; -} - -/* set a custom conversion to string */ - -void json_object_set_serializer(json_object *jso, - json_object_to_json_string_fn to_string_func, - void *userdata, - json_object_delete_fn *user_delete) -{ - // First, clean up any previously existing user info - if (jso->_user_delete) - { - jso->_user_delete(jso, jso->_userdata); - } - jso->_userdata = NULL; - jso->_user_delete = NULL; - - if (to_string_func == NULL) - { - // Reset to the standard serialization function - switch(jso->o_type) - { - case json_type_null: - jso->_to_json_string = NULL; - break; - case json_type_boolean: - jso->_to_json_string = &json_object_boolean_to_json_string; - break; - case json_type_double: - jso->_to_json_string = &json_object_double_to_json_string; - break; - case json_type_int: - jso->_to_json_string = &json_object_int_to_json_string; - break; - case json_type_object: - jso->_to_json_string = &json_object_object_to_json_string; - break; - case json_type_array: - jso->_to_json_string = &json_object_array_to_json_string; - break; - case json_type_string: - jso->_to_json_string = &json_object_string_to_json_string; - break; - } - return; - } - - jso->_to_json_string = to_string_func; - jso->_userdata = userdata; - jso->_user_delete = user_delete; -} - - -/* extended conversion to string */ - -const char* json_object_to_json_string_ext(struct json_object *jso, int flags) -{ - if (!jso) - return "null"; - - if ((!jso->_pb) && !(jso->_pb = printbuf_new())) - return NULL; - - printbuf_reset(jso->_pb); - - if(jso->_to_json_string(jso, jso->_pb, 0, flags) < 0) - return NULL; - - return jso->_pb->buf; -} - -/* backwards-compatible conversion to string */ - -const char* json_object_to_json_string(struct json_object *jso) -{ - return json_object_to_json_string_ext(jso, JSON_C_TO_STRING_SPACED); -} - -static void indent(struct printbuf *pb, int level, int flags) -{ - if (flags & JSON_C_TO_STRING_PRETTY) - { - printbuf_memset(pb, -1, ' ', level * 2); - } -} - -/* json_object_object */ - -static int json_object_object_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - int had_children = 0; - struct json_object_iter iter; - - sprintbuf(pb, "{" /*}*/); - if (flags & JSON_C_TO_STRING_PRETTY) - sprintbuf(pb, "\n"); - json_object_object_foreachC(jso, iter) - { - if (had_children) - { - sprintbuf(pb, ","); - if (flags & JSON_C_TO_STRING_PRETTY) - sprintbuf(pb, "\n"); - } - had_children = 1; - if (flags & JSON_C_TO_STRING_SPACED) - sprintbuf(pb, " "); - indent(pb, level+1, flags); - sprintbuf(pb, "\""); - json_escape_str(pb, iter.key, strlen(iter.key)); - if (flags & JSON_C_TO_STRING_SPACED) - sprintbuf(pb, "\": "); - else - sprintbuf(pb, "\":"); - if(iter.val == NULL) - sprintbuf(pb, "null"); - else - iter.val->_to_json_string(iter.val, pb, level+1,flags); - } - if (flags & JSON_C_TO_STRING_PRETTY) - { - if (had_children) - sprintbuf(pb, "\n"); - indent(pb,level,flags); - } - if (flags & JSON_C_TO_STRING_SPACED) - return sprintbuf(pb, /*{*/ " }"); - else - return sprintbuf(pb, /*{*/ "}"); -} - - -static void json_object_lh_entry_free(struct lh_entry *ent) -{ - free(ent->k); - json_object_put((struct json_object*)ent->v); -} - -static void json_object_object_delete(struct json_object* jso) -{ - lh_table_free(jso->o.c_object); - json_object_generic_delete(jso); -} - -struct json_object* json_object_new_object(void) -{ - struct json_object *jso = json_object_new(json_type_object); - if (!jso) - return NULL; - jso->_delete = &json_object_object_delete; - jso->_to_json_string = &json_object_object_to_json_string; - jso->o.c_object = lh_kchar_table_new(JSON_OBJECT_DEF_HASH_ENTRIES, - NULL, &json_object_lh_entry_free); - if (!jso->o.c_object) - { - json_object_generic_delete(jso); - errno = ENOMEM; - return NULL; - } - return jso; -} - -struct lh_table* json_object_get_object(struct json_object *jso) -{ - if (!jso) - return NULL; - switch(jso->o_type) - { - case json_type_object: - return jso->o.c_object; - default: - return NULL; - } -} - -void json_object_object_add(struct json_object* jso, const char *key, - struct json_object *val) -{ - // We lookup the entry and replace the value, rather than just deleting - // and re-adding it, so the existing key remains valid. - json_object *existing_value = NULL; - struct lh_entry *existing_entry; - existing_entry = lh_table_lookup_entry(jso->o.c_object, (void*)key); - if (!existing_entry) - { - lh_table_insert(jso->o.c_object, strdup(key), val); - return; - } - existing_value = (void *)existing_entry->v; - if (existing_value) - json_object_put(existing_value); - existing_entry->v = val; -} - -int json_object_object_length(struct json_object *jso) -{ - return lh_table_length(jso->o.c_object); -} - -struct json_object* json_object_object_get(struct json_object* jso, const char *key) -{ - struct json_object *result = NULL; - json_object_object_get_ex(jso, key, &result); - return result; -} - -json_bool json_object_object_get_ex(struct json_object* jso, const char *key, struct json_object **value) -{ - if (value != NULL) - *value = NULL; - - if (NULL == jso) - return FALSE; - - switch(jso->o_type) - { - case json_type_object: - return lh_table_lookup_ex(jso->o.c_object, (void*)key, (void**)value); - default: - if (value != NULL) - *value = NULL; - return FALSE; - } -} - -void json_object_object_del(struct json_object* jso, const char *key) -{ - lh_table_delete(jso->o.c_object, key); -} - - -/* json_object_boolean */ - -static int json_object_boolean_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - if (jso->o.c_boolean) - return sprintbuf(pb, "true"); - else - return sprintbuf(pb, "false"); -} - -struct json_object* json_object_new_boolean(json_bool b) -{ - struct json_object *jso = json_object_new(json_type_boolean); - if (!jso) - return NULL; - jso->_to_json_string = &json_object_boolean_to_json_string; - jso->o.c_boolean = b; - return jso; -} - -json_bool json_object_get_boolean(struct json_object *jso) -{ - if (!jso) - return FALSE; - switch(jso->o_type) - { - case json_type_boolean: - return jso->o.c_boolean; - case json_type_int: - return (jso->o.c_int64 != 0); - case json_type_double: - return (jso->o.c_double != 0); - case json_type_string: - return (jso->o.c_string.len != 0); - default: - return FALSE; - } -} - - -/* json_object_int */ - -static int json_object_int_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - return sprintbuf(pb, "%"PRId64, jso->o.c_int64); -} - -struct json_object* json_object_new_int(int32_t i) -{ - struct json_object *jso = json_object_new(json_type_int); - if (!jso) - return NULL; - jso->_to_json_string = &json_object_int_to_json_string; - jso->o.c_int64 = i; - return jso; -} - -int32_t json_object_get_int(struct json_object *jso) -{ - int64_t cint64; - enum json_type o_type; - - if(!jso) return 0; - - o_type = jso->o_type; - cint64 = jso->o.c_int64; - - if (o_type == json_type_string) - { - /* - * Parse strings into 64-bit numbers, then use the - * 64-to-32-bit number handling below. - */ - if (json_parse_int64(jso->o.c_string.str, &cint64) != 0) - return 0; /* whoops, it didn't work. */ - o_type = json_type_int; - } - - switch(o_type) { - case json_type_int: - /* Make sure we return the correct values for out of range numbers. */ - if (cint64 <= INT32_MIN) - return INT32_MIN; - else if (cint64 >= INT32_MAX) - return INT32_MAX; - else - return (int32_t)cint64; - case json_type_double: - return (int32_t)jso->o.c_double; - case json_type_boolean: - return jso->o.c_boolean; - default: - return 0; - } -} - -struct json_object* json_object_new_int64(int64_t i) -{ - struct json_object *jso = json_object_new(json_type_int); - if (!jso) - return NULL; - jso->_to_json_string = &json_object_int_to_json_string; - jso->o.c_int64 = i; - return jso; -} - -int64_t json_object_get_int64(struct json_object *jso) -{ - int64_t cint; - - if (!jso) - return 0; - switch(jso->o_type) - { - case json_type_int: - return jso->o.c_int64; - case json_type_double: - return (int64_t)jso->o.c_double; - case json_type_boolean: - return jso->o.c_boolean; - case json_type_string: - if (json_parse_int64(jso->o.c_string.str, &cint) == 0) - return cint; - default: - return 0; - } -} - - -/* json_object_double */ - -static int json_object_double_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - char buf[128], *p, *q; - int size; - /* Although JSON RFC does not support - NaN or Infinity as numeric values - ECMA 262 section 9.8.1 defines - how to handle these cases as strings */ - if(isnan(jso->o.c_double)) - size = snprintf(buf, sizeof(buf), "NaN"); - else if(isinf(jso->o.c_double)) - if(jso->o.c_double > 0) - size = snprintf(buf, sizeof(buf), "Infinity"); - else - size = snprintf(buf, sizeof(buf), "-Infinity"); - else - size = snprintf(buf, sizeof(buf), "%.17g", jso->o.c_double); - - p = strchr(buf, ','); - if (p) { - *p = '.'; - } else { - p = strchr(buf, '.'); - } - if (p && (flags & JSON_C_TO_STRING_NOZERO)) { - /* last useful digit, always keep 1 zero */ - p++; - for (q=p ; *q ; q++) { - if (*q!='0') p=q; - } - /* drop trailing zeroes */ - *(++p) = 0; - size = p-buf; - } - printbuf_memappend(pb, buf, size); - return size; -} - -struct json_object* json_object_new_double(double d) -{ - struct json_object *jso = json_object_new(json_type_double); - if (!jso) - return NULL; - jso->_to_json_string = &json_object_double_to_json_string; - jso->o.c_double = d; - return jso; -} - -struct json_object* json_object_new_double_s(double d, const char *ds) -{ - struct json_object *jso = json_object_new_double(d); - if (!jso) - return NULL; - - char *new_ds = strdup(ds); - if (!new_ds) - { - json_object_generic_delete(jso); - errno = ENOMEM; - return NULL; - } - json_object_set_serializer(jso, json_object_userdata_to_json_string, - new_ds, json_object_free_userdata); - return jso; -} - -int json_object_userdata_to_json_string(struct json_object *jso, - struct printbuf *pb, int level, int flags) -{ - int userdata_len = strlen(jso->_userdata); - printbuf_memappend(pb, jso->_userdata, userdata_len); - return userdata_len; -} - -void json_object_free_userdata(struct json_object *jso, void *userdata) -{ - free(userdata); -} - -double json_object_get_double(struct json_object *jso) -{ - double cdouble; - char *errPtr = NULL; - - if(!jso) return 0.0; - switch(jso->o_type) { - case json_type_double: - return jso->o.c_double; - case json_type_int: - return jso->o.c_int64; - case json_type_boolean: - return jso->o.c_boolean; - case json_type_string: - errno = 0; - cdouble = strtod(jso->o.c_string.str,&errPtr); - - /* if conversion stopped at the first character, return 0.0 */ - if (errPtr == jso->o.c_string.str) - return 0.0; - - /* - * Check that the conversion terminated on something sensible - * - * For example, { "pay" : 123AB } would parse as 123. - */ - if (*errPtr != '\0') - return 0.0; - - /* - * If strtod encounters a string which would exceed the - * capacity of a double, it returns +/- HUGE_VAL and sets - * errno to ERANGE. But +/- HUGE_VAL is also a valid result - * from a conversion, so we need to check errno. - * - * Underflow also sets errno to ERANGE, but it returns 0 in - * that case, which is what we will return anyway. - * - * See CERT guideline ERR30-C - */ - if ((HUGE_VAL == cdouble || -HUGE_VAL == cdouble) && - (ERANGE == errno)) - cdouble = 0.0; - return cdouble; - default: - return 0.0; - } -} - - -/* json_object_string */ - -static int json_object_string_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - sprintbuf(pb, "\""); - json_escape_str(pb, jso->o.c_string.str, jso->o.c_string.len); - sprintbuf(pb, "\""); - return 0; -} - -static void json_object_string_delete(struct json_object* jso) -{ - free(jso->o.c_string.str); - json_object_generic_delete(jso); -} - -struct json_object* json_object_new_string(const char *s) -{ - struct json_object *jso = json_object_new(json_type_string); - if (!jso) - return NULL; - jso->_delete = &json_object_string_delete; - jso->_to_json_string = &json_object_string_to_json_string; - jso->o.c_string.str = strdup(s); - if (!jso->o.c_string.str) - { - json_object_generic_delete(jso); - errno = ENOMEM; - return NULL; - } - jso->o.c_string.len = strlen(s); - return jso; -} - -struct json_object* json_object_new_string_len(const char *s, int len) -{ - struct json_object *jso = json_object_new(json_type_string); - if (!jso) - return NULL; - jso->_delete = &json_object_string_delete; - jso->_to_json_string = &json_object_string_to_json_string; - jso->o.c_string.str = (char*)malloc(len + 1); - if (!jso->o.c_string.str) - { - json_object_generic_delete(jso); - errno = ENOMEM; - return NULL; - } - memcpy(jso->o.c_string.str, (void *)s, len); - jso->o.c_string.str[len] = '\0'; - jso->o.c_string.len = len; - return jso; -} - -const char* json_object_get_string(struct json_object *jso) -{ - if (!jso) - return NULL; - switch(jso->o_type) - { - case json_type_string: - return jso->o.c_string.str; - default: - return json_object_to_json_string(jso); - } -} - -int json_object_get_string_len(struct json_object *jso) -{ - if (!jso) - return 0; - switch(jso->o_type) - { - case json_type_string: - return jso->o.c_string.len; - default: - return 0; - } -} - - -/* json_object_array */ - -static int json_object_array_to_json_string(struct json_object* jso, - struct printbuf *pb, - int level, - int flags) -{ - int had_children = 0; - int ii; - sprintbuf(pb, "["); - if (flags & JSON_C_TO_STRING_PRETTY) - sprintbuf(pb, "\n"); - for(ii=0; ii < json_object_array_length(jso); ii++) - { - struct json_object *val; - if (had_children) - { - sprintbuf(pb, ","); - if (flags & JSON_C_TO_STRING_PRETTY) - sprintbuf(pb, "\n"); - } - had_children = 1; - if (flags & JSON_C_TO_STRING_SPACED) - sprintbuf(pb, " "); - indent(pb, level + 1, flags); - val = json_object_array_get_idx(jso, ii); - if(val == NULL) - sprintbuf(pb, "null"); - else - val->_to_json_string(val, pb, level+1, flags); - } - if (flags & JSON_C_TO_STRING_PRETTY) - { - if (had_children) - sprintbuf(pb, "\n"); - indent(pb,level,flags); - } - - if (flags & JSON_C_TO_STRING_SPACED) - return sprintbuf(pb, " ]"); - else - return sprintbuf(pb, "]"); -} - -static void json_object_array_entry_free(void *data) -{ - json_object_put((struct json_object*)data); -} - -static void json_object_array_delete(struct json_object* jso) -{ - array_list_free(jso->o.c_array); - json_object_generic_delete(jso); -} - -struct json_object* json_object_new_array(void) -{ - struct json_object *jso = json_object_new(json_type_array); - if (!jso) - return NULL; - jso->_delete = &json_object_array_delete; - jso->_to_json_string = &json_object_array_to_json_string; - jso->o.c_array = array_list_new(&json_object_array_entry_free); - return jso; -} - -struct array_list* json_object_get_array(struct json_object *jso) -{ - if (!jso) - return NULL; - switch(jso->o_type) - { - case json_type_array: - return jso->o.c_array; - default: - return NULL; - } -} - -void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *)) -{ - array_list_sort(jso->o.c_array, sort_fn); -} - -int json_object_array_length(struct json_object *jso) -{ - return array_list_length(jso->o.c_array); -} - -int json_object_array_add(struct json_object *jso,struct json_object *val) -{ - return array_list_add(jso->o.c_array, val); -} - -int json_object_array_put_idx(struct json_object *jso, int idx, - struct json_object *val) -{ - return array_list_put_idx(jso->o.c_array, idx, val); -} - -struct json_object* json_object_array_get_idx(struct json_object *jso, - int idx) -{ - return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); -} - diff --git a/json-c/json_object.h b/json-c/json_object.h deleted file mode 100644 index 0dca0b1e..00000000 --- a/json-c/json_object.h +++ /dev/null @@ -1,617 +0,0 @@ -/* - * $Id: json_object.h,v 1.12 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _json_object_h_ -#define _json_object_h_ - -#ifdef __GNUC__ -#define THIS_FUNCTION_IS_DEPRECATED(func) func __attribute__ ((deprecated)) -#elif defined(_MSC_VER) -#define THIS_FUNCTION_IS_DEPRECATED(func) __declspec(deprecated) func -#else -#define THIS_FUNCTION_IS_DEPRECATED(func) func -#endif - -#include "json_inttypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define JSON_OBJECT_DEF_HASH_ENTRIES 16 - -/** - * A flag for the json_object_to_json_string_ext() and - * json_object_to_file_ext() functions which causes the output - * to have no extra whitespace or formatting applied. - */ -#define JSON_C_TO_STRING_PLAIN 0 -/** - * A flag for the json_object_to_json_string_ext() and - * json_object_to_file_ext() functions which causes the output to have - * minimal whitespace inserted to make things slightly more readable. - */ -#define JSON_C_TO_STRING_SPACED (1<<0) -/** - * A flag for the json_object_to_json_string_ext() and - * json_object_to_file_ext() functions which causes - * the output to be formatted. - * - * See the "Two Space Tab" option at http://jsonformatter.curiousconcept.com/ - * for an example of the format. - */ -#define JSON_C_TO_STRING_PRETTY (1<<1) -/** - * A flag to drop trailing zero for float values - */ -#define JSON_C_TO_STRING_NOZERO (1<<2) - -#undef FALSE -#define FALSE ((json_bool)0) - -#undef TRUE -#define TRUE ((json_bool)1) - -extern const char *json_number_chars; -extern const char *json_hex_chars; - -/* CAW: added for ANSI C iteration correctness */ -struct json_object_iter -{ - char *key; - struct json_object *val; - struct lh_entry *entry; -}; - -/* forward structure definitions */ - -typedef int json_bool; -typedef struct printbuf printbuf; -typedef struct lh_table lh_table; -typedef struct array_list array_list; -typedef struct json_object json_object; -typedef struct json_object_iter json_object_iter; -typedef struct json_tokener json_tokener; - -/** - * Type of custom user delete functions. See json_object_set_serializer. - */ -typedef void (json_object_delete_fn)(struct json_object *jso, void *userdata); - -/** - * Type of a custom serialization function. See json_object_set_serializer. - */ -typedef int (json_object_to_json_string_fn)(struct json_object *jso, - struct printbuf *pb, - int level, - int flags); - -/* supported object types */ - -typedef enum json_type { - /* If you change this, be sure to update json_type_to_name() too */ - json_type_null, - json_type_boolean, - json_type_double, - json_type_int, - json_type_object, - json_type_array, - json_type_string -} json_type; - -/* reference counting functions */ - -/** - * Increment the reference count of json_object, thereby grabbing shared - * ownership of obj. - * - * @param obj the json_object instance - */ -extern struct json_object* json_object_get(struct json_object *obj); - -/** - * Decrement the reference count of json_object and free if it reaches zero. - * You must have ownership of obj prior to doing this or you will cause an - * imbalance in the reference count. - * - * @param obj the json_object instance - * @returns 1 if the object was freed. - */ -int json_object_put(struct json_object *obj); - -/** - * Check if the json_object is of a given type - * @param obj the json_object instance - * @param type one of: - json_type_null (i.e. obj == NULL), - json_type_boolean, - json_type_double, - json_type_int, - json_type_object, - json_type_array, - json_type_string - */ -extern int json_object_is_type(struct json_object *obj, enum json_type type); - -/** - * Get the type of the json_object. See also json_type_to_name() to turn this - * into a string suitable, for instance, for logging. - * - * @param obj the json_object instance - * @returns type being one of: - json_type_null (i.e. obj == NULL), - json_type_boolean, - json_type_double, - json_type_int, - json_type_object, - json_type_array, - json_type_string - */ -extern enum json_type json_object_get_type(struct json_object *obj); - - -/** Stringify object to json format. - * Equivalent to json_object_to_json_string_ext(obj, JSON_C_TO_STRING_SPACED) - * The pointer you get is an internal of your json object. You don't - * have to free it, later use of json_object_put() should be sufficient. - * If you can not ensure there's no concurrent access to *obj use - * strdup(). - * @param obj the json_object instance - * @returns a string in JSON format - */ -extern const char* json_object_to_json_string(struct json_object *obj); - -/** Stringify object to json format - * @see json_object_to_json_string() for details on how to free string. - * @param obj the json_object instance - * @param flags formatting options, see JSON_C_TO_STRING_PRETTY and other constants - * @returns a string in JSON format - */ -extern const char* json_object_to_json_string_ext(struct json_object *obj, int -flags); - -/** - * Set a custom serialization function to be used when this particular object - * is converted to a string by json_object_to_json_string. - * - * If a custom serializer is already set on this object, any existing - * user_delete function is called before the new one is set. - * - * If to_string_func is NULL, the other parameters are ignored - * and the default behaviour is reset. - * - * The userdata parameter is optional and may be passed as NULL. If provided, - * it is passed to to_string_func as-is. This parameter may be NULL even - * if user_delete is non-NULL. - * - * The user_delete parameter is optional and may be passed as NULL, even if - * the userdata parameter is non-NULL. It will be called just before the - * json_object is deleted, after it's reference count goes to zero - * (see json_object_put()). - * If this is not provided, it is up to the caller to free the userdata at - * an appropriate time. (i.e. after the json_object is deleted) - * - * @param jso the object to customize - * @param to_string_func the custom serialization function - * @param userdata an optional opaque cookie - * @param user_delete an optional function from freeing userdata - */ -extern void json_object_set_serializer(json_object *jso, - json_object_to_json_string_fn to_string_func, - void *userdata, - json_object_delete_fn *user_delete); - -/** - * Simply call free on the userdata pointer. - * Can be used with json_object_set_serializer(). - * - * @param jso unused - * @param userdata the pointer that is passed to free(). - */ -json_object_delete_fn json_object_free_userdata; - -/** - * Copy the jso->_userdata string over to pb as-is. - * Can be used with json_object_set_serializer(). - * - * @param jso The object whose _userdata is used. - * @param pb The destination buffer. - * @param level Ignored. - * @param flags Ignored. - */ -json_object_to_json_string_fn json_object_userdata_to_json_string; - - -/* object type methods */ - -/** Create a new empty object with a reference count of 1. The caller of - * this object initially has sole ownership. Remember, when using - * json_object_object_add or json_object_array_put_idx, ownership will - * transfer to the object/array. Call json_object_get if you want to maintain - * shared ownership or also add this object as a child of multiple objects or - * arrays. Any ownerships you acquired but did not transfer must be released - * through json_object_put. - * - * @returns a json_object of type json_type_object - */ -extern struct json_object* json_object_new_object(void); - -/** Get the hashtable of a json_object of type json_type_object - * @param obj the json_object instance - * @returns a linkhash - */ -extern struct lh_table* json_object_get_object(struct json_object *obj); - -/** Get the size of an object in terms of the number of fields it has. - * @param obj the json_object whose length to return - */ -extern int json_object_object_length(struct json_object* obj); - -/** Add an object field to a json_object of type json_type_object - * - * The reference count will *not* be incremented. This is to make adding - * fields to objects in code more compact. If you want to retain a reference - * to an added object, independent of the lifetime of obj, you must wrap the - * passed object with json_object_get. - * - * Upon calling this, the ownership of val transfers to obj. Thus you must - * make sure that you do in fact have ownership over this object. For instance, - * json_object_new_object will give you ownership until you transfer it, - * whereas json_object_object_get does not. - * - * @param obj the json_object instance - * @param key the object field name (a private copy will be duplicated) - * @param val a json_object or NULL member to associate with the given field - */ -extern void json_object_object_add(struct json_object* obj, const char *key, - struct json_object *val); - -/** Get the json_object associate with a given object field - * - * *No* reference counts will be changed. There is no need to manually adjust - * reference counts through the json_object_put/json_object_get methods unless - * you need to have the child (value) reference maintain a different lifetime - * than the owning parent (obj). Ownership of the returned value is retained - * by obj (do not do json_object_put unless you have done a json_object_get). - * If you delete the value from obj (json_object_object_del) and wish to access - * the returned reference afterwards, make sure you have first gotten shared - * ownership through json_object_get (& don't forget to do a json_object_put - * or transfer ownership to prevent a memory leak). - * - * @param obj the json_object instance - * @param key the object field name - * @returns the json_object associated with the given field name - * @deprecated Please use json_object_object_get_ex - */ -THIS_FUNCTION_IS_DEPRECATED(extern struct json_object* json_object_object_get(struct json_object* obj, - const char *key)); - -/** Get the json_object associated with a given object field. - * - * This returns true if the key is found, false in all other cases (including - * if obj isn't a json_type_object). - * - * *No* reference counts will be changed. There is no need to manually adjust - * reference counts through the json_object_put/json_object_get methods unless - * you need to have the child (value) reference maintain a different lifetime - * than the owning parent (obj). Ownership of value is retained by obj. - * - * @param obj the json_object instance - * @param key the object field name - * @param value a pointer where to store a reference to the json_object - * associated with the given field name. - * - * It is safe to pass a NULL value. - * @returns whether or not the key exists - */ -extern json_bool json_object_object_get_ex(struct json_object* obj, - const char *key, - struct json_object **value); - -/** Delete the given json_object field - * - * The reference count will be decremented for the deleted object. If there - * are no more owners of the value represented by this key, then the value is - * freed. Otherwise, the reference to the value will remain in memory. - * - * @param obj the json_object instance - * @param key the object field name - */ -extern void json_object_object_del(struct json_object* obj, const char *key); - -/** - * Iterate through all keys and values of an object. - * - * Adding keys to the object while iterating is NOT allowed. - * - * Deleting an existing key, or replacing an existing key with a - * new value IS allowed. - * - * @param obj the json_object instance - * @param key the local name for the char* key variable defined in the body - * @param val the local name for the json_object* object variable defined in - * the body - */ -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L - -# define json_object_object_foreach(obj,key,val) \ - char *key; \ - struct json_object *val __attribute__((__unused__)); \ - for(struct lh_entry *entry ## key = json_object_get_object(obj)->head, *entry_next ## key = NULL; \ - ({ if(entry ## key) { \ - key = (char*)entry ## key->k; \ - val = (struct json_object*)entry ## key->v; \ - entry_next ## key = entry ## key->next; \ - } ; entry ## key; }); \ - entry ## key = entry_next ## key ) - -#else /* ANSI C or MSC */ - -# define json_object_object_foreach(obj,key,val) \ - char *key;\ - struct json_object *val; \ - struct lh_entry *entry ## key; \ - struct lh_entry *entry_next ## key = NULL; \ - for(entry ## key = json_object_get_object(obj)->head; \ - (entry ## key ? ( \ - key = (char*)entry ## key->k, \ - val = (struct json_object*)entry ## key->v, \ - entry_next ## key = entry ## key->next, \ - entry ## key) : 0); \ - entry ## key = entry_next ## key) - -#endif /* defined(__GNUC__) && !defined(__STRICT_ANSI__) && __STDC_VERSION__ >= 199901L */ - -/** Iterate through all keys and values of an object (ANSI C Safe) - * @param obj the json_object instance - * @param iter the object iterator - */ -#define json_object_object_foreachC(obj,iter) \ - for(iter.entry = json_object_get_object(obj)->head; (iter.entry ? (iter.key = (char*)iter.entry->k, iter.val = (struct json_object*)iter.entry->v, iter.entry) : 0); iter.entry = iter.entry->next) - -/* Array type methods */ - -/** Create a new empty json_object of type json_type_array - * @returns a json_object of type json_type_array - */ -extern struct json_object* json_object_new_array(void); - -/** Get the arraylist of a json_object of type json_type_array - * @param obj the json_object instance - * @returns an arraylist - */ -extern struct array_list* json_object_get_array(struct json_object *obj); - -/** Get the length of a json_object of type json_type_array - * @param obj the json_object instance - * @returns an int - */ -extern int json_object_array_length(struct json_object *obj); - -/** Sorts the elements of jso of type json_type_array -* -* Pointers to the json_object pointers will be passed as the two arguments -* to @sort_fn -* -* @param obj the json_object instance -* @param sort_fn a sorting function -*/ -extern void json_object_array_sort(struct json_object *jso, int(*sort_fn)(const void *, const void *)); - -/** Add an element to the end of a json_object of type json_type_array - * - * The reference count will *not* be incremented. This is to make adding - * fields to objects in code more compact. If you want to retain a reference - * to an added object you must wrap the passed object with json_object_get - * - * @param obj the json_object instance - * @param val the json_object to be added - */ -extern int json_object_array_add(struct json_object *obj, - struct json_object *val); - -/** Insert or replace an element at a specified index in an array (a json_object of type json_type_array) - * - * The reference count will *not* be incremented. This is to make adding - * fields to objects in code more compact. If you want to retain a reference - * to an added object you must wrap the passed object with json_object_get - * - * The reference count of a replaced object will be decremented. - * - * The array size will be automatically be expanded to the size of the - * index if the index is larger than the current size. - * - * @param obj the json_object instance - * @param idx the index to insert the element at - * @param val the json_object to be added - */ -extern int json_object_array_put_idx(struct json_object *obj, int idx, - struct json_object *val); - -/** Get the element at specificed index of the array (a json_object of type json_type_array) - * @param obj the json_object instance - * @param idx the index to get the element at - * @returns the json_object at the specified index (or NULL) - */ -extern struct json_object* json_object_array_get_idx(struct json_object *obj, - int idx); - -/* json_bool type methods */ - -/** Create a new empty json_object of type json_type_boolean - * @param b a json_bool TRUE or FALSE (0 or 1) - * @returns a json_object of type json_type_boolean - */ -extern struct json_object* json_object_new_boolean(json_bool b); - -/** Get the json_bool value of a json_object - * - * The type is coerced to a json_bool if the passed object is not a json_bool. - * integer and double objects will return FALSE if there value is zero - * or TRUE otherwise. If the passed object is a string it will return - * TRUE if it has a non zero length. If any other object type is passed - * TRUE will be returned if the object is not NULL. - * - * @param obj the json_object instance - * @returns a json_bool - */ -extern json_bool json_object_get_boolean(struct json_object *obj); - - -/* int type methods */ - -/** Create a new empty json_object of type json_type_int - * Note that values are stored as 64-bit values internally. - * To ensure the full range is maintained, use json_object_new_int64 instead. - * @param i the integer - * @returns a json_object of type json_type_int - */ -extern struct json_object* json_object_new_int(int32_t i); - - -/** Create a new empty json_object of type json_type_int - * @param i the integer - * @returns a json_object of type json_type_int - */ -extern struct json_object* json_object_new_int64(int64_t i); - - -/** Get the int value of a json_object - * - * The type is coerced to a int if the passed object is not a int. - * double objects will return their integer conversion. Strings will be - * parsed as an integer. If no conversion exists then 0 is returned - * and errno is set to EINVAL. null is equivalent to 0 (no error values set) - * - * Note that integers are stored internally as 64-bit values. - * If the value of too big or too small to fit into 32-bit, INT32_MAX or - * INT32_MIN are returned, respectively. - * - * @param obj the json_object instance - * @returns an int - */ -extern int32_t json_object_get_int(struct json_object *obj); - -/** Get the int value of a json_object - * - * The type is coerced to a int64 if the passed object is not a int64. - * double objects will return their int64 conversion. Strings will be - * parsed as an int64. If no conversion exists then 0 is returned. - * - * NOTE: Set errno to 0 directly before a call to this function to determine - * whether or not conversion was successful (it does not clear the value for - * you). - * - * @param obj the json_object instance - * @returns an int64 - */ -extern int64_t json_object_get_int64(struct json_object *obj); - - -/* double type methods */ - -/** Create a new empty json_object of type json_type_double - * @param d the double - * @returns a json_object of type json_type_double - */ -extern struct json_object* json_object_new_double(double d); - -/** - * Create a new json_object of type json_type_double, using - * the exact serialized representation of the value. - * - * This allows for numbers that would otherwise get displayed - * inefficiently (e.g. 12.3 => "12.300000000000001") to be - * serialized with the more convenient form. - * - * Note: this is used by json_tokener_parse_ex() to allow for - * an exact re-serialization of a parsed object. - * - * An equivalent sequence of calls is: - * @code - * jso = json_object_new_double(d); - * json_object_set_serializer(d, json_object_userdata_to_json_string, - * strdup(ds), json_object_free_userdata) - * @endcode - * - * @param d the numeric value of the double. - * @param ds the string representation of the double. This will be copied. - */ -extern struct json_object* json_object_new_double_s(double d, const char *ds); - -/** Get the double floating point value of a json_object - * - * The type is coerced to a double if the passed object is not a double. - * integer objects will return their double conversion. Strings will be - * parsed as a double. If no conversion exists then 0.0 is returned and - * errno is set to EINVAL. null is equivalent to 0 (no error values set) - * - * If the value is too big to fit in a double, then the value is set to - * the closest infinity with errno set to ERANGE. If strings cannot be - * converted to their double value, then EINVAL is set & NaN is returned. - * - * Arrays of length 0 are interpreted as 0 (with no error flags set). - * Arrays of length 1 are effectively cast to the equivalent object and - * converted using the above rules. All other arrays set the error to - * EINVAL & return NaN. - * - * NOTE: Set errno to 0 directly before a call to this function to - * determine whether or not conversion was successful (it does not clear - * the value for you). - * - * @param obj the json_object instance - * @returns a double floating point number - */ -extern double json_object_get_double(struct json_object *obj); - - -/* string type methods */ - -/** Create a new empty json_object of type json_type_string - * - * A copy of the string is made and the memory is managed by the json_object - * - * @param s the string - * @returns a json_object of type json_type_string - */ -extern struct json_object* json_object_new_string(const char *s); - -extern struct json_object* json_object_new_string_len(const char *s, int len); - -/** Get the string value of a json_object - * - * If the passed object is not of type json_type_string then the JSON - * representation of the object is returned. - * - * The returned string memory is managed by the json_object and will - * be freed when the reference count of the json_object drops to zero. - * - * @param obj the json_object instance - * @returns a string - */ -extern const char* json_object_get_string(struct json_object *obj); - -/** Get the string length of a json_object - * - * If the passed object is not of type json_type_string then zero - * will be returned. - * - * @param obj the json_object instance - * @returns int - */ -extern int json_object_get_string_len(struct json_object *obj); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/json_object_iterator.c b/json-c/json_object_iterator.c deleted file mode 100644 index 7066649c..00000000 --- a/json-c/json_object_iterator.c +++ /dev/null @@ -1,168 +0,0 @@ -/** -******************************************************************************* -* @file json_object_iterator.c -* -* Copyright (c) 2009-2012 Hewlett-Packard Development Company, L.P. -* -* This library is free software; you can redistribute it and/or modify -* it under the terms of the MIT license. See COPYING for details. -* -* @brief json-c forces clients to use its private data -* structures for JSON Object iteration. This API -* implementation corrects that by abstracting the -* private json-c details. -* -******************************************************************************* -*/ - -#include <stddef.h> - -#include "json.h" -#include "json_object_private.h" - -#include "json_object_iterator.h" - -/** - * How It Works - * - * For each JSON Object, json-c maintains a linked list of zero - * or more lh_entry (link-hash entry) structures inside the - * Object's link-hash table (lh_table). - * - * Each lh_entry structure on the JSON Object's linked list - * represents a single name/value pair. The "next" field of the - * last lh_entry in the list is set to NULL, which terminates - * the list. - * - * We represent a valid iterator that refers to an actual - * name/value pair via a pointer to the pair's lh_entry - * structure set as the iterator's opaque_ field. - * - * We follow json-c's current pair list representation by - * representing a valid "end" iterator (one that refers past the - * last pair) with a NULL value in the iterator's opaque_ field. - * - * A JSON Object without any pairs in it will have the "head" - * field of its lh_table structure set to NULL. For such an - * object, json_object_iter_begin will return an iterator with - * the opaque_ field set to NULL, which is equivalent to the - * "end" iterator. - * - * When iterating, we simply update the iterator's opaque_ field - * to point to the next lh_entry structure in the linked list. - * opaque_ will become NULL once we iterate past the last pair - * in the list, which makes the iterator equivalent to the "end" - * iterator. - */ - -/// Our current representation of the "end" iterator; -/// -/// @note May not always be NULL -static const void* kObjectEndIterValue = NULL; - -/** - * **************************************************************************** - */ -struct json_object_iterator -json_object_iter_begin(struct json_object* obj) -{ - struct json_object_iterator iter; - struct lh_table* pTable; - - /// @note json_object_get_object will return NULL if passed NULL - /// or a non-json_type_object instance - pTable = json_object_get_object(obj); - JASSERT(NULL != pTable); - - /// @note For a pair-less Object, head is NULL, which matches our - /// definition of the "end" iterator - iter.opaque_ = pTable->head; - return iter; -} - -/** - * **************************************************************************** - */ -struct json_object_iterator -json_object_iter_end(const struct json_object* obj) -{ - struct json_object_iterator iter; - - JASSERT(NULL != obj); - JASSERT(json_object_is_type(obj, json_type_object)); - - iter.opaque_ = kObjectEndIterValue; - - return iter; -} - -/** - * **************************************************************************** - */ -void -json_object_iter_next(struct json_object_iterator* iter) -{ - JASSERT(NULL != iter); - JASSERT(kObjectEndIterValue != iter->opaque_); - - iter->opaque_ = ((struct lh_entry *)iter->opaque_)->next; -} - - -/** - * **************************************************************************** - */ -const char* -json_object_iter_peek_name(const struct json_object_iterator* iter) -{ - JASSERT(NULL != iter); - JASSERT(kObjectEndIterValue != iter->opaque_); - - return (const char*)(((struct lh_entry *)iter->opaque_)->k); -} - - -/** - * **************************************************************************** - */ -struct json_object* -json_object_iter_peek_value(const struct json_object_iterator* iter) -{ - JASSERT(NULL != iter); - JASSERT(kObjectEndIterValue != iter->opaque_); - - return (struct json_object*)(((struct lh_entry *)iter->opaque_)->v); -} - - -/** - * **************************************************************************** - */ -json_bool -json_object_iter_equal(const struct json_object_iterator* iter1, - const struct json_object_iterator* iter2) -{ - JASSERT(NULL != iter1); - JASSERT(NULL != iter2); - - return (iter1->opaque_ == iter2->opaque_); -} - - -/** - * **************************************************************************** - */ -struct json_object_iterator -json_object_iter_init_default(void) -{ - struct json_object_iterator iter; - - /** - * @note Make this a negative, invalid value, such that - * accidental access to it would likely be trapped by the - * hardware as an invalid address. - */ - iter.opaque_ = NULL; - - return iter; -} diff --git a/json-c/json_object_iterator.h b/json-c/json_object_iterator.h deleted file mode 100644 index 44c9fb25..00000000 --- a/json-c/json_object_iterator.h +++ /dev/null @@ -1,239 +0,0 @@ -/** -******************************************************************************* -* @file json_object_iterator.h -* -* Copyright (c) 2009-2012 Hewlett-Packard Development Company, L.P. -* -* This library is free software; you can redistribute it and/or modify -* it under the terms of the MIT license. See COPYING for details. -* -* @brief json-c forces clients to use its private data -* structures for JSON Object iteration. This API -* corrects that by abstracting the private json-c -* details. -* -* API attributes: <br> -* * Thread-safe: NO<br> -* * Reentrant: NO -* -******************************************************************************* -*/ - - -#ifndef JSON_OBJECT_ITERATOR_H -#define JSON_OBJECT_ITERATOR_H - -#include <stddef.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Forward declaration for the opaque iterator information. - */ -struct json_object_iter_info_; - -/** - * The opaque iterator that references a name/value pair within - * a JSON Object instance or the "end" iterator value. - */ -struct json_object_iterator { - const void* opaque_; -}; - - -/** - * forward declaration of json-c's JSON value instance structure - */ -struct json_object; - - -/** - * Initializes an iterator structure to a "default" value that - * is convenient for initializing an iterator variable to a - * default state (e.g., initialization list in a class' - * constructor). - * - * @code - * struct json_object_iterator iter = json_object_iter_init_default(); - * MyClass() : iter_(json_object_iter_init_default()) - * @endcode - * - * @note The initialized value doesn't reference any specific - * pair, is considered an invalid iterator, and MUST NOT - * be passed to any json-c API that expects a valid - * iterator. - * - * @note User and internal code MUST NOT make any assumptions - * about and dependencies on the value of the "default" - * iterator value. - * - * @return json_object_iterator - */ -struct json_object_iterator -json_object_iter_init_default(void); - -/** Retrieves an iterator to the first pair of the JSON Object. - * - * @warning Any modification of the underlying pair invalidates all - * iterators to that pair. - * - * @param obj JSON Object instance (MUST be of type json_object) - * - * @return json_object_iterator If the JSON Object has at - * least one pair, on return, the iterator refers - * to the first pair. If the JSON Object doesn't - * have any pairs, the returned iterator is - * equivalent to the "end" iterator for the same - * JSON Object instance. - * - * @code - * struct json_object_iterator it; - * struct json_object_iterator itEnd; - * struct json_object* obj; - * - * obj = json_tokener_parse("{'first':'george', 'age':100}"); - * it = json_object_iter_begin(obj); - * itEnd = json_object_iter_end(obj); - * - * while (!json_object_iter_equal(&it, &itEnd)) { - * printf("%s\n", - * json_object_iter_peek_name(&it)); - * json_object_iter_next(&it); - * } - * - * @endcode - */ -struct json_object_iterator -json_object_iter_begin(struct json_object* obj); - -/** Retrieves the iterator that represents the position beyond the - * last pair of the given JSON Object instance. - * - * @warning Do NOT write code that assumes that the "end" - * iterator value is NULL, even if it is so in a - * particular instance of the implementation. - * - * @note The reason we do not (and MUST NOT) provide - * "json_object_iter_is_end(json_object_iterator* iter)" - * type of API is because it would limit the underlying - * representation of name/value containment (or force us - * to add additional, otherwise unnecessary, fields to - * the iterator structure). The "end" iterator and the - * equality test method, on the other hand, permit us to - * cleanly abstract pretty much any reasonable underlying - * representation without burdening the iterator - * structure with unnecessary data. - * - * @note For performance reasons, memorize the "end" iterator prior - * to any loop. - * - * @param obj JSON Object instance (MUST be of type json_object) - * - * @return json_object_iterator On return, the iterator refers - * to the "end" of the Object instance's pairs - * (i.e., NOT the last pair, but "beyond the last - * pair" value) - */ -struct json_object_iterator -json_object_iter_end(const struct json_object* obj); - -/** Returns an iterator to the next pair, if any - * - * @warning Any modification of the underlying pair - * invalidates all iterators to that pair. - * - * @param iter [IN/OUT] Pointer to iterator that references a - * name/value pair; MUST be a valid, non-end iterator. - * WARNING: bad things will happen if invalid or "end" - * iterator is passed. Upon return will contain the - * reference to the next pair if there is one; if there - * are no more pairs, will contain the "end" iterator - * value, which may be compared against the return value - * of json_object_iter_end() for the same JSON Object - * instance. - */ -void -json_object_iter_next(struct json_object_iterator* iter); - - -/** Returns a const pointer to the name of the pair referenced - * by the given iterator. - * - * @param iter pointer to iterator that references a name/value - * pair; MUST be a valid, non-end iterator. - * - * @warning bad things will happen if an invalid or - * "end" iterator is passed. - * - * @return const char* Pointer to the name of the referenced - * name/value pair. The name memory belongs to the - * name/value pair, will be freed when the pair is - * deleted or modified, and MUST NOT be modified or - * freed by the user. - */ -const char* -json_object_iter_peek_name(const struct json_object_iterator* iter); - - -/** Returns a pointer to the json-c instance representing the - * value of the referenced name/value pair, without altering - * the instance's reference count. - * - * @param iter pointer to iterator that references a name/value - * pair; MUST be a valid, non-end iterator. - * - * @warning bad things will happen if invalid or - * "end" iterator is passed. - * - * @return struct json_object* Pointer to the json-c value - * instance of the referenced name/value pair; the - * value's reference count is not changed by this - * function: if you plan to hold on to this json-c node, - * take a look at json_object_get() and - * json_object_put(). IMPORTANT: json-c API represents - * the JSON Null value as a NULL json_object instance - * pointer. - */ -struct json_object* -json_object_iter_peek_value(const struct json_object_iterator* iter); - - -/** Tests two iterators for equality. Typically used to test - * for end of iteration by comparing an iterator to the - * corresponding "end" iterator (that was derived from the same - * JSON Object instance). - * - * @note The reason we do not (and MUST NOT) provide - * "json_object_iter_is_end(json_object_iterator* iter)" - * type of API is because it would limit the underlying - * representation of name/value containment (or force us - * to add additional, otherwise unnecessary, fields to - * the iterator structure). The equality test method, on - * the other hand, permits us to cleanly abstract pretty - * much any reasonable underlying representation. - * - * @param iter1 Pointer to first valid, non-NULL iterator - * @param iter2 POinter to second valid, non-NULL iterator - * - * @warning if a NULL iterator pointer or an uninitialized - * or invalid iterator, or iterators derived from - * different JSON Object instances are passed, bad things - * will happen! - * - * @return json_bool non-zero if iterators are equal (i.e., both - * reference the same name/value pair or are both at - * "end"); zero if they are not equal. - */ -json_bool -json_object_iter_equal(const struct json_object_iterator* iter1, - const struct json_object_iterator* iter2); - - -#ifdef __cplusplus -} -#endif - - -#endif /* JSON_OBJECT_ITERATOR_H */ diff --git a/json-c/json_object_private.h b/json-c/json_object_private.h deleted file mode 100644 index 5ed791b5..00000000 --- a/json-c/json_object_private.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * $Id: json_object_private.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _json_object_private_h_ -#define _json_object_private_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void (json_object_private_delete_fn)(struct json_object *o); - -struct json_object -{ - enum json_type o_type; - json_object_private_delete_fn *_delete; - json_object_to_json_string_fn *_to_json_string; - int _ref_count; - struct printbuf *_pb; - union data { - json_bool c_boolean; - double c_double; - int64_t c_int64; - struct lh_table *c_object; - struct array_list *c_array; - struct { - char *str; - int len; - } c_string; - } o; - json_object_delete_fn *_user_delete; - void *_userdata; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/json_tokener.c b/json-c/json_tokener.c deleted file mode 100644 index 60e81f27..00000000 --- a/json-c/json_tokener.c +++ /dev/null @@ -1,887 +0,0 @@ -/* - * $Id: json_tokener.c,v 1.20 2006/07/25 03:24:50 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - * - * Copyright (c) 2008-2009 Yahoo! Inc. All rights reserved. - * The copyrights to the contents of this file are licensed under the MIT License - * (http://www.opensource.org/licenses/mit-license.php) - */ - -#include "config.h" - -#include <math.h> -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <ctype.h> -#include <string.h> -#include <limits.h> - -#include "debug.h" -#include "printbuf.h" -#include "arraylist.h" -#include "json_inttypes.h" -#include "json_object.h" -#include "json_tokener.h" -#include "json_util.h" - -#ifdef HAVE_LOCALE_H -#include <locale.h> -#endif /* HAVE_LOCALE_H */ - -#define jt_hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9) - -#if !HAVE_STRDUP && defined(_MSC_VER) - /* MSC has the version as _strdup */ -# define strdup _strdup -#elif !HAVE_STRDUP -# error You do not have strdup on your system. -#endif /* HAVE_STRDUP */ - -#if !HAVE_STRNCASECMP && defined(_MSC_VER) - /* MSC has the version as _strnicmp */ -# define strncasecmp _strnicmp -#elif !HAVE_STRNCASECMP -# error You do not have strncasecmp on your system. -#endif /* HAVE_STRNCASECMP */ - -/* Use C99 NAN by default; if not available, nan("") should work too. */ -#ifndef NAN -#define NAN nan("") -#endif /* !NAN */ - -static const char json_null_str[] = "null"; -static const int json_null_str_len = sizeof(json_null_str) - 1; -static const char json_inf_str[] = "Infinity"; -static const int json_inf_str_len = sizeof(json_inf_str) - 1; -static const char json_nan_str[] = "NaN"; -static const int json_nan_str_len = sizeof(json_nan_str) - 1; -static const char json_true_str[] = "true"; -static const int json_true_str_len = sizeof(json_true_str) - 1; -static const char json_false_str[] = "false"; -static const int json_false_str_len = sizeof(json_false_str) - 1; - -static const char* json_tokener_errors[] = { - "success", - "continue", - "nesting too deep", - "unexpected end of data", - "unexpected character", - "null expected", - "boolean expected", - "number expected", - "array value separator ',' expected", - "quoted object property name expected", - "object property name separator ':' expected", - "object value separator ',' expected", - "invalid string sequence", - "expected comment", - "buffer size overflow" -}; - -const char *json_tokener_error_desc(enum json_tokener_error jerr) -{ - int jerr_int = (int)jerr; - if (jerr_int < 0 || jerr_int >= (int)(sizeof(json_tokener_errors) / sizeof(json_tokener_errors[0]))) - return "Unknown error, invalid json_tokener_error value passed to json_tokener_error_desc()"; - return json_tokener_errors[jerr]; -} - -enum json_tokener_error json_tokener_get_error(json_tokener *tok) -{ - return tok->err; -} - -/* Stuff for decoding unicode sequences */ -#define IS_HIGH_SURROGATE(uc) (((uc) & 0xFC00) == 0xD800) -#define IS_LOW_SURROGATE(uc) (((uc) & 0xFC00) == 0xDC00) -#define DECODE_SURROGATE_PAIR(hi,lo) ((((hi) & 0x3FF) << 10) + ((lo) & 0x3FF) + 0x10000) -static unsigned char utf8_replacement_char[3] = { 0xEF, 0xBF, 0xBD }; - -struct json_tokener* json_tokener_new_ex(int depth) -{ - struct json_tokener *tok; - - tok = (struct json_tokener*)calloc(1, sizeof(struct json_tokener)); - if (!tok) return NULL; - tok->stack = (struct json_tokener_srec *)calloc(depth, sizeof(struct json_tokener_srec)); - if (!tok->stack) { - free(tok); - return NULL; - } - tok->pb = printbuf_new(); - tok->max_depth = depth; - json_tokener_reset(tok); - return tok; -} - -struct json_tokener* json_tokener_new(void) -{ - return json_tokener_new_ex(JSON_TOKENER_DEFAULT_DEPTH); -} - -void json_tokener_free(struct json_tokener *tok) -{ - json_tokener_reset(tok); - if (tok->pb) printbuf_free(tok->pb); - if (tok->stack) free(tok->stack); - free(tok); -} - -static void json_tokener_reset_level(struct json_tokener *tok, int depth) -{ - tok->stack[depth].state = json_tokener_state_eatws; - tok->stack[depth].saved_state = json_tokener_state_start; - json_object_put(tok->stack[depth].current); - tok->stack[depth].current = NULL; - free(tok->stack[depth].obj_field_name); - tok->stack[depth].obj_field_name = NULL; -} - -void json_tokener_reset(struct json_tokener *tok) -{ - int i; - if (!tok) - return; - - for(i = tok->depth; i >= 0; i--) - json_tokener_reset_level(tok, i); - tok->depth = 0; - tok->err = json_tokener_success; -} - -struct json_object* json_tokener_parse(const char *str) -{ - enum json_tokener_error jerr_ignored; - struct json_object* obj; - obj = json_tokener_parse_verbose(str, &jerr_ignored); - return obj; -} - -struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error) -{ - struct json_tokener* tok; - struct json_object* obj; - - tok = json_tokener_new(); - if (!tok) - return NULL; - obj = json_tokener_parse_ex(tok, str, -1); - *error = tok->err; - if(tok->err != json_tokener_success) { - if (obj != NULL) - json_object_put(obj); - obj = NULL; - } - - json_tokener_free(tok); - return obj; -} - -#define state tok->stack[tok->depth].state -#define saved_state tok->stack[tok->depth].saved_state -#define current tok->stack[tok->depth].current -#define obj_field_name tok->stack[tok->depth].obj_field_name - -/* Optimization: - * json_tokener_parse_ex() consumed a lot of CPU in its main loop, - * iterating character-by character. A large performance boost is - * achieved by using tighter loops to locally handle units such as - * comments and strings. Loops that handle an entire token within - * their scope also gather entire strings and pass them to - * printbuf_memappend() in a single call, rather than calling - * printbuf_memappend() one char at a time. - * - * PEEK_CHAR() and ADVANCE_CHAR() macros are used for code that is - * common to both the main loop and the tighter loops. - */ - -/* PEEK_CHAR(dest, tok) macro: - * Peeks at the current char and stores it in dest. - * Returns 1 on success, sets tok->err and returns 0 if no more chars. - * Implicit inputs: str, len vars - */ -#define PEEK_CHAR(dest, tok) \ - (((tok)->char_offset == len) ? \ - (((tok)->depth == 0 && state == json_tokener_state_eatws && saved_state == json_tokener_state_finish) ? \ - (((tok)->err = json_tokener_success), 0) \ - : \ - (((tok)->err = json_tokener_continue), 0) \ - ) : \ - (((dest) = *str), 1) \ - ) - -/* ADVANCE_CHAR() macro: - * Incrementes str & tok->char_offset. - * For convenience of existing conditionals, returns the old value of c (0 on eof) - * Implicit inputs: c var - */ -#define ADVANCE_CHAR(str, tok) \ - ( ++(str), ((tok)->char_offset)++, c) - - -/* End optimization macro defs */ - - -struct json_object* json_tokener_parse_ex(struct json_tokener *tok, - const char *str, int len) -{ - struct json_object *obj = NULL; - char c = '\1'; -#ifdef HAVE_SETLOCALE - char *oldlocale=NULL, *tmplocale; - - tmplocale = setlocale(LC_NUMERIC, NULL); - if (tmplocale) oldlocale = strdup(tmplocale); - setlocale(LC_NUMERIC, "C"); -#endif - - tok->char_offset = 0; - tok->err = json_tokener_success; - - /* this interface is presently not 64-bit clean due to the int len argument - and the internal printbuf interface that takes 32-bit int len arguments - so the function limits the maximum string size to INT32_MAX (2GB). - If the function is called with len == -1 then strlen is called to check - the string length is less than INT32_MAX (2GB) */ - if ((len < -1) || (len == -1 && strlen(str) > INT32_MAX)) { - tok->err = json_tokener_error_size; - return NULL; - } - - while (PEEK_CHAR(c, tok)) { - - redo_char: - switch(state) { - - case json_tokener_state_eatws: - /* Advance until we change state */ - while (isspace((int)c)) { - if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok))) - goto out; - } - if(c == '/' && !(tok->flags & JSON_TOKENER_STRICT)) { - printbuf_reset(tok->pb); - printbuf_memappend_fast(tok->pb, &c, 1); - state = json_tokener_state_comment_start; - } else { - state = saved_state; - goto redo_char; - } - break; - - case json_tokener_state_start: - switch(c) { - case '{': - state = json_tokener_state_eatws; - saved_state = json_tokener_state_object_field_start; - current = json_object_new_object(); - break; - case '[': - state = json_tokener_state_eatws; - saved_state = json_tokener_state_array; - current = json_object_new_array(); - break; - case 'I': - case 'i': - state = json_tokener_state_inf; - printbuf_reset(tok->pb); - tok->st_pos = 0; - goto redo_char; - case 'N': - case 'n': - state = json_tokener_state_null; // or NaN - printbuf_reset(tok->pb); - tok->st_pos = 0; - goto redo_char; - case '\'': - if (tok->flags & JSON_TOKENER_STRICT) { - /* in STRICT mode only double-quote are allowed */ - tok->err = json_tokener_error_parse_unexpected; - goto out; - } - case '"': - state = json_tokener_state_string; - printbuf_reset(tok->pb); - tok->quote_char = c; - break; - case 'T': - case 't': - case 'F': - case 'f': - state = json_tokener_state_boolean; - printbuf_reset(tok->pb); - tok->st_pos = 0; - goto redo_char; -#if defined(__GNUC__) - case '0' ... '9': -#else - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': -#endif - case '-': - state = json_tokener_state_number; - printbuf_reset(tok->pb); - tok->is_double = 0; - goto redo_char; - default: - tok->err = json_tokener_error_parse_unexpected; - goto out; - } - break; - - case json_tokener_state_finish: - if(tok->depth == 0) goto out; - obj = json_object_get(current); - json_tokener_reset_level(tok, tok->depth); - tok->depth--; - goto redo_char; - - case json_tokener_state_inf: /* aka starts with 'i' */ - { - int size_inf; - int is_negative = 0; - - printbuf_memappend_fast(tok->pb, &c, 1); - size_inf = json_min(tok->st_pos+1, json_inf_str_len); - char *infbuf = tok->pb->buf; - if (*infbuf == '-') - { - infbuf++; - is_negative = 1; - } - if ((!(tok->flags & JSON_TOKENER_STRICT) && - strncasecmp(json_inf_str, infbuf, size_inf) == 0) || - (strncmp(json_inf_str, infbuf, size_inf) == 0) - ) - { - if (tok->st_pos == json_inf_str_len) - { - current = json_object_new_double(is_negative ? -INFINITY : INFINITY); - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - } else { - tok->err = json_tokener_error_parse_unexpected; - goto out; - } - tok->st_pos++; - } - break; - case json_tokener_state_null: /* aka starts with 'n' */ - { - int size; - int size_nan; - printbuf_memappend_fast(tok->pb, &c, 1); - size = json_min(tok->st_pos+1, json_null_str_len); - size_nan = json_min(tok->st_pos+1, json_nan_str_len); - if((!(tok->flags & JSON_TOKENER_STRICT) && - strncasecmp(json_null_str, tok->pb->buf, size) == 0) - || (strncmp(json_null_str, tok->pb->buf, size) == 0) - ) { - if (tok->st_pos == json_null_str_len) { - current = NULL; - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - } - else if ((!(tok->flags & JSON_TOKENER_STRICT) && - strncasecmp(json_nan_str, tok->pb->buf, size_nan) == 0) || - (strncmp(json_nan_str, tok->pb->buf, size_nan) == 0) - ) - { - if (tok->st_pos == json_nan_str_len) - { - current = json_object_new_double(NAN); - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - } else { - tok->err = json_tokener_error_parse_null; - goto out; - } - tok->st_pos++; - } - break; - - case json_tokener_state_comment_start: - if(c == '*') { - state = json_tokener_state_comment; - } else if(c == '/') { - state = json_tokener_state_comment_eol; - } else { - tok->err = json_tokener_error_parse_comment; - goto out; - } - printbuf_memappend_fast(tok->pb, &c, 1); - break; - - case json_tokener_state_comment: - { - /* Advance until we change state */ - const char *case_start = str; - while(c != '*') { - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - goto out; - } - } - printbuf_memappend_fast(tok->pb, case_start, 1+str-case_start); - state = json_tokener_state_comment_end; - } - break; - - case json_tokener_state_comment_eol: - { - /* Advance until we change state */ - const char *case_start = str; - while(c != '\n') { - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - goto out; - } - } - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - MC_DEBUG("json_tokener_comment: %s\n", tok->pb->buf); - state = json_tokener_state_eatws; - } - break; - - case json_tokener_state_comment_end: - printbuf_memappend_fast(tok->pb, &c, 1); - if(c == '/') { - MC_DEBUG("json_tokener_comment: %s\n", tok->pb->buf); - state = json_tokener_state_eatws; - } else { - state = json_tokener_state_comment; - } - break; - - case json_tokener_state_string: - { - /* Advance until we change state */ - const char *case_start = str; - while(1) { - if(c == tok->quote_char) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - current = json_object_new_string_len(tok->pb->buf, tok->pb->bpos); - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - break; - } else if(c == '\\') { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - saved_state = json_tokener_state_string; - state = json_tokener_state_string_escape; - break; - } - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - goto out; - } - } - } - break; - - case json_tokener_state_string_escape: - switch(c) { - case '"': - case '\\': - case '/': - printbuf_memappend_fast(tok->pb, &c, 1); - state = saved_state; - break; - case 'b': - case 'n': - case 'r': - case 't': - case 'f': - if(c == 'b') printbuf_memappend_fast(tok->pb, "\b", 1); - else if(c == 'n') printbuf_memappend_fast(tok->pb, "\n", 1); - else if(c == 'r') printbuf_memappend_fast(tok->pb, "\r", 1); - else if(c == 't') printbuf_memappend_fast(tok->pb, "\t", 1); - else if(c == 'f') printbuf_memappend_fast(tok->pb, "\f", 1); - state = saved_state; - break; - case 'u': - tok->ucs_char = 0; - tok->st_pos = 0; - state = json_tokener_state_escape_unicode; - break; - default: - tok->err = json_tokener_error_parse_string; - goto out; - } - break; - - case json_tokener_state_escape_unicode: - { - unsigned int got_hi_surrogate = 0; - - /* Handle a 4-byte sequence, or two sequences if a surrogate pair */ - while(1) { - if(strchr(json_hex_chars, c)) { - tok->ucs_char += ((unsigned int)jt_hexdigit(c) << ((3-tok->st_pos++)*4)); - if(tok->st_pos == 4) { - unsigned char unescaped_utf[4]; - - if (got_hi_surrogate) { - if (IS_LOW_SURROGATE(tok->ucs_char)) { - /* Recalculate the ucs_char, then fall thru to process normally */ - tok->ucs_char = DECODE_SURROGATE_PAIR(got_hi_surrogate, tok->ucs_char); - } else { - /* Hi surrogate was not followed by a low surrogate */ - /* Replace the hi and process the rest normally */ - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - } - got_hi_surrogate = 0; - } - - if (tok->ucs_char < 0x80) { - unescaped_utf[0] = tok->ucs_char; - printbuf_memappend_fast(tok->pb, (char*)unescaped_utf, 1); - } else if (tok->ucs_char < 0x800) { - unescaped_utf[0] = 0xc0 | (tok->ucs_char >> 6); - unescaped_utf[1] = 0x80 | (tok->ucs_char & 0x3f); - printbuf_memappend_fast(tok->pb, (char*)unescaped_utf, 2); - } else if (IS_HIGH_SURROGATE(tok->ucs_char)) { - /* Got a high surrogate. Remember it and look for the - * the beginning of another sequence, which should be the - * low surrogate. - */ - got_hi_surrogate = tok->ucs_char; - /* Not at end, and the next two chars should be "\u" */ - if ((tok->char_offset+1 != len) && - (tok->char_offset+2 != len) && - (str[1] == '\\') && - (str[2] == 'u')) - { - /* Advance through the 16 bit surrogate, and move on to the - * next sequence. The next step is to process the following - * characters. - */ - if( !ADVANCE_CHAR(str, tok) || !ADVANCE_CHAR(str, tok) ) { - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - } - /* Advance to the first char of the next sequence and - * continue processing with the next sequence. - */ - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - goto out; - } - tok->ucs_char = 0; - tok->st_pos = 0; - continue; /* other json_tokener_state_escape_unicode */ - } else { - /* Got a high surrogate without another sequence following - * it. Put a replacement char in for the hi surrogate - * and pretend we finished. - */ - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - } - } else if (IS_LOW_SURROGATE(tok->ucs_char)) { - /* Got a low surrogate not preceded by a high */ - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - } else if (tok->ucs_char < 0x10000) { - unescaped_utf[0] = 0xe0 | (tok->ucs_char >> 12); - unescaped_utf[1] = 0x80 | ((tok->ucs_char >> 6) & 0x3f); - unescaped_utf[2] = 0x80 | (tok->ucs_char & 0x3f); - printbuf_memappend_fast(tok->pb, (char*)unescaped_utf, 3); - } else if (tok->ucs_char < 0x110000) { - unescaped_utf[0] = 0xf0 | ((tok->ucs_char >> 18) & 0x07); - unescaped_utf[1] = 0x80 | ((tok->ucs_char >> 12) & 0x3f); - unescaped_utf[2] = 0x80 | ((tok->ucs_char >> 6) & 0x3f); - unescaped_utf[3] = 0x80 | (tok->ucs_char & 0x3f); - printbuf_memappend_fast(tok->pb, (char*)unescaped_utf, 4); - } else { - /* Don't know what we got--insert the replacement char */ - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - } - state = saved_state; - break; - } - } else { - tok->err = json_tokener_error_parse_string; - goto out; - } - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - if (got_hi_surrogate) /* Clean up any pending chars */ - printbuf_memappend_fast(tok->pb, (char*)utf8_replacement_char, 3); - goto out; - } - } - } - break; - - case json_tokener_state_boolean: - { - int size1, size2; - printbuf_memappend_fast(tok->pb, &c, 1); - size1 = json_min(tok->st_pos+1, json_true_str_len); - size2 = json_min(tok->st_pos+1, json_false_str_len); - if((!(tok->flags & JSON_TOKENER_STRICT) && - strncasecmp(json_true_str, tok->pb->buf, size1) == 0) - || (strncmp(json_true_str, tok->pb->buf, size1) == 0) - ) { - if(tok->st_pos == json_true_str_len) { - current = json_object_new_boolean(1); - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - } else if((!(tok->flags & JSON_TOKENER_STRICT) && - strncasecmp(json_false_str, tok->pb->buf, size2) == 0) - || (strncmp(json_false_str, tok->pb->buf, size2) == 0)) { - if(tok->st_pos == json_false_str_len) { - current = json_object_new_boolean(0); - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - } else { - tok->err = json_tokener_error_parse_boolean; - goto out; - } - tok->st_pos++; - } - break; - - case json_tokener_state_number: - { - /* Advance until we change state */ - const char *case_start = str; - int case_len=0; - while(c && strchr(json_number_chars, c)) { - ++case_len; - if(c == '.' || c == 'e' || c == 'E') - tok->is_double = 1; - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, case_start, case_len); - goto out; - } - } - if (case_len>0) - printbuf_memappend_fast(tok->pb, case_start, case_len); - - // Check for -Infinity - if (tok->pb->buf[0] == '-' && case_len == 1 && - (c == 'i' || c == 'I')) - { - state = json_tokener_state_inf; - goto redo_char; - } - } - { - int64_t num64; - double numd; - if (!tok->is_double && json_parse_int64(tok->pb->buf, &num64) == 0) { - if (num64 && tok->pb->buf[0]=='0' && (tok->flags & JSON_TOKENER_STRICT)) { - /* in strict mode, number must not start with 0 */ - tok->err = json_tokener_error_parse_number; - goto out; - } - current = json_object_new_int64(num64); - } - else if(tok->is_double && json_parse_double(tok->pb->buf, &numd) == 0) - { - current = json_object_new_double_s(numd, tok->pb->buf); - } else { - tok->err = json_tokener_error_parse_number; - goto out; - } - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - goto redo_char; - } - break; - - case json_tokener_state_array_after_sep: - case json_tokener_state_array: - if(c == ']') { - if (state == json_tokener_state_array_after_sep && - (tok->flags & JSON_TOKENER_STRICT)) - { - tok->err = json_tokener_error_parse_unexpected; - goto out; - } - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - } else { - if(tok->depth >= tok->max_depth-1) { - tok->err = json_tokener_error_depth; - goto out; - } - state = json_tokener_state_array_add; - tok->depth++; - json_tokener_reset_level(tok, tok->depth); - goto redo_char; - } - break; - - case json_tokener_state_array_add: - json_object_array_add(current, obj); - saved_state = json_tokener_state_array_sep; - state = json_tokener_state_eatws; - goto redo_char; - - case json_tokener_state_array_sep: - if(c == ']') { - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - } else if(c == ',') { - saved_state = json_tokener_state_array_after_sep; - state = json_tokener_state_eatws; - } else { - tok->err = json_tokener_error_parse_array; - goto out; - } - break; - - case json_tokener_state_object_field_start: - case json_tokener_state_object_field_start_after_sep: - if(c == '}') { - if (state == json_tokener_state_object_field_start_after_sep && - (tok->flags & JSON_TOKENER_STRICT)) - { - tok->err = json_tokener_error_parse_unexpected; - goto out; - } - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - } else if (c == '"' || c == '\'') { - tok->quote_char = c; - printbuf_reset(tok->pb); - state = json_tokener_state_object_field; - } else { - tok->err = json_tokener_error_parse_object_key_name; - goto out; - } - break; - - case json_tokener_state_object_field: - { - /* Advance until we change state */ - const char *case_start = str; - while(1) { - if(c == tok->quote_char) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - obj_field_name = strdup(tok->pb->buf); - saved_state = json_tokener_state_object_field_end; - state = json_tokener_state_eatws; - break; - } else if(c == '\\') { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - saved_state = json_tokener_state_object_field; - state = json_tokener_state_string_escape; - break; - } - if (!ADVANCE_CHAR(str, tok) || !PEEK_CHAR(c, tok)) { - printbuf_memappend_fast(tok->pb, case_start, str-case_start); - goto out; - } - } - } - break; - - case json_tokener_state_object_field_end: - if(c == ':') { - saved_state = json_tokener_state_object_value; - state = json_tokener_state_eatws; - } else { - tok->err = json_tokener_error_parse_object_key_sep; - goto out; - } - break; - - case json_tokener_state_object_value: - if(tok->depth >= tok->max_depth-1) { - tok->err = json_tokener_error_depth; - goto out; - } - state = json_tokener_state_object_value_add; - tok->depth++; - json_tokener_reset_level(tok, tok->depth); - goto redo_char; - - case json_tokener_state_object_value_add: - json_object_object_add(current, obj_field_name, obj); - free(obj_field_name); - obj_field_name = NULL; - saved_state = json_tokener_state_object_sep; - state = json_tokener_state_eatws; - goto redo_char; - - case json_tokener_state_object_sep: - if(c == '}') { - saved_state = json_tokener_state_finish; - state = json_tokener_state_eatws; - } else if(c == ',') { - saved_state = json_tokener_state_object_field_start_after_sep; - state = json_tokener_state_eatws; - } else { - tok->err = json_tokener_error_parse_object_value_sep; - goto out; - } - break; - - } - if (!ADVANCE_CHAR(str, tok)) - goto out; - } /* while(POP_CHAR) */ - - out: - if (c && - (state == json_tokener_state_finish) && - (tok->depth == 0) && - (tok->flags & JSON_TOKENER_STRICT)) { - /* unexpected char after JSON data */ - tok->err = json_tokener_error_parse_unexpected; - } - if (!c) { /* We hit an eof char (0) */ - if(state != json_tokener_state_finish && - saved_state != json_tokener_state_finish) - tok->err = json_tokener_error_parse_eof; - } - -#ifdef HAVE_SETLOCALE - setlocale(LC_NUMERIC, oldlocale); - if (oldlocale) free(oldlocale); -#endif - - if (tok->err == json_tokener_success) - { - json_object *ret = json_object_get(current); - int ii; - - /* Partially reset, so we parse additional objects on subsequent calls. */ - for(ii = tok->depth; ii >= 0; ii--) - json_tokener_reset_level(tok, ii); - return ret; - } - - MC_DEBUG("json_tokener_parse_ex: error %s at offset %d\n", - json_tokener_errors[tok->err], tok->char_offset); - return NULL; -} - -void json_tokener_set_flags(struct json_tokener *tok, int flags) -{ - tok->flags = flags; -} diff --git a/json-c/json_tokener.h b/json-c/json_tokener.h deleted file mode 100644 index a72d2bde..00000000 --- a/json-c/json_tokener.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * $Id: json_tokener.h,v 1.10 2006/07/25 03:24:50 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _json_tokener_h_ -#define _json_tokener_h_ - -#include <stddef.h> -#include "json_object.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum json_tokener_error { - json_tokener_success, - json_tokener_continue, - json_tokener_error_depth, - json_tokener_error_parse_eof, - json_tokener_error_parse_unexpected, - json_tokener_error_parse_null, - json_tokener_error_parse_boolean, - json_tokener_error_parse_number, - json_tokener_error_parse_array, - json_tokener_error_parse_object_key_name, - json_tokener_error_parse_object_key_sep, - json_tokener_error_parse_object_value_sep, - json_tokener_error_parse_string, - json_tokener_error_parse_comment, - json_tokener_error_size -}; - -enum json_tokener_state { - json_tokener_state_eatws, - json_tokener_state_start, - json_tokener_state_finish, - json_tokener_state_null, - json_tokener_state_comment_start, - json_tokener_state_comment, - json_tokener_state_comment_eol, - json_tokener_state_comment_end, - json_tokener_state_string, - json_tokener_state_string_escape, - json_tokener_state_escape_unicode, - json_tokener_state_boolean, - json_tokener_state_number, - json_tokener_state_array, - json_tokener_state_array_add, - json_tokener_state_array_sep, - json_tokener_state_object_field_start, - json_tokener_state_object_field, - json_tokener_state_object_field_end, - json_tokener_state_object_value, - json_tokener_state_object_value_add, - json_tokener_state_object_sep, - json_tokener_state_array_after_sep, - json_tokener_state_object_field_start_after_sep, - json_tokener_state_inf -}; - -struct json_tokener_srec -{ - enum json_tokener_state state, saved_state; - struct json_object *obj; - struct json_object *current; - char *obj_field_name; -}; - -#define JSON_TOKENER_DEFAULT_DEPTH 32 - -struct json_tokener -{ - char *str; - struct printbuf *pb; - int max_depth, depth, is_double, st_pos, char_offset; - enum json_tokener_error err; - unsigned int ucs_char; - char quote_char; - struct json_tokener_srec *stack; - int flags; -}; - -/** - * Be strict when parsing JSON input. Use caution with - * this flag as what is considered valid may become more - * restrictive from one release to the next, causing your - * code to fail on previously working input. - * - * This flag is not set by default. - * - * @see json_tokener_set_flags() - */ -#define JSON_TOKENER_STRICT 0x01 - -/** - * Given an error previously returned by json_tokener_get_error(), - * return a human readable description of the error. - * - * @return a generic error message is returned if an invalid error value is provided. - */ -const char *json_tokener_error_desc(enum json_tokener_error jerr); - -/** - * Retrieve the error caused by the last call to json_tokener_parse_ex(), - * or json_tokener_success if there is no error. - * - * When parsing a JSON string in pieces, if the tokener is in the middle - * of parsing this will return json_tokener_continue. - * - * See also json_tokener_error_desc(). - */ -enum json_tokener_error json_tokener_get_error(struct json_tokener *tok); - -extern struct json_tokener* json_tokener_new(void); -extern struct json_tokener* json_tokener_new_ex(int depth); -extern void json_tokener_free(struct json_tokener *tok); -extern void json_tokener_reset(struct json_tokener *tok); -extern struct json_object* json_tokener_parse(const char *str); -extern struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error); - -/** - * Set flags that control how parsing will be done. - */ -extern void json_tokener_set_flags(struct json_tokener *tok, int flags); - -/** - * Parse a string and return a non-NULL json_object if a valid JSON value - * is found. The string does not need to be a JSON object or array; - * it can also be a string, number or boolean value. - * - * A partial JSON string can be parsed. If the parsing is incomplete, - * NULL will be returned and json_tokener_get_error() will be return - * json_tokener_continue. - * json_tokener_parse_ex() can then be called with additional bytes in str - * to continue the parsing. - * - * If json_tokener_parse_ex() returns NULL and the error anything other than - * json_tokener_continue, a fatal error has occurred and parsing must be - * halted. Then tok object must not be re-used until json_tokener_reset() is - * called. - * - * When a valid JSON value is parsed, a non-NULL json_object will be - * returned. Also, json_tokener_get_error() will return json_tokener_success. - * Be sure to check the type with json_object_is_type() or - * json_object_get_type() before using the object. - * - * @b XXX this shouldn't use internal fields: - * Trailing characters after the parsed value do not automatically cause an - * error. It is up to the caller to decide whether to treat this as an - * error or to handle the additional characters, perhaps by parsing another - * json value starting from that point. - * - * Extra characters can be detected by comparing the tok->char_offset against - * the length of the last len parameter passed in. - * - * The tokener does \b not maintain an internal buffer so the caller is - * responsible for calling json_tokener_parse_ex with an appropriate str - * parameter starting with the extra characters. - * - * This interface is presently not 64-bit clean due to the int len argument - * so the function limits the maximum string size to INT32_MAX (2GB). - * If the function is called with len == -1 then strlen is called to check - * the string length is less than INT32_MAX (2GB) - * - * Example: - * @code -json_object *jobj = NULL; -const char *mystring = NULL; -int stringlen = 0; -enum json_tokener_error jerr; -do { - mystring = ... // get JSON string, e.g. read from file, etc... - stringlen = strlen(mystring); - jobj = json_tokener_parse_ex(tok, mystring, stringlen); -} while ((jerr = json_tokener_get_error(tok)) == json_tokener_continue); -if (jerr != json_tokener_success) -{ - fprintf(stderr, "Error: %s\n", json_tokener_error_desc(jerr)); - // Handle errors, as appropriate for your application. -} -if (tok->char_offset < stringlen) // XXX shouldn't access internal fields -{ - // Handle extra characters after parsed object as desired. - // e.g. issue an error, parse another object from that point, etc... -} -// Success, use jobj here. - -@endcode - * - * @param tok a json_tokener previously allocated with json_tokener_new() - * @param str an string with any valid JSON expression, or portion of. This does not need to be null terminated. - * @param len the length of str - */ -extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok, - const char *str, int len); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/json_util.c b/json-c/json_util.c deleted file mode 100644 index 2a5621b0..00000000 --- a/json-c/json_util.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * $Id: json_util.c,v 1.4 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include "config.h" -#undef realloc - -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -#include <limits.h> -#include <string.h> -#include <errno.h> -#include <ctype.h> - -#ifdef HAVE_SYS_TYPES_H -#include <sys/types.h> -#endif /* HAVE_SYS_TYPES_H */ - -#ifdef HAVE_SYS_STAT_H -#include <sys/stat.h> -#endif /* HAVE_SYS_STAT_H */ - -#ifdef HAVE_FCNTL_H -#include <fcntl.h> -#endif /* HAVE_FCNTL_H */ - -#ifdef HAVE_UNISTD_H -# include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -#ifdef WIN32 -# define WIN32_LEAN_AND_MEAN -# include <windows.h> -# include <io.h> -#endif /* defined(WIN32) */ - -#if !defined(HAVE_OPEN) && defined(WIN32) -# define open _open -#endif - -#if !defined(HAVE_SNPRINTF) && defined(_MSC_VER) - /* MSC has the version as _snprintf */ -# define snprintf _snprintf -#elif !defined(HAVE_SNPRINTF) -# error You do not have snprintf on your system. -#endif /* HAVE_SNPRINTF */ - -#include "debug.h" -#include "printbuf.h" -#include "json_inttypes.h" -#include "json_object.h" -#include "json_tokener.h" -#include "json_util.h" - -static int sscanf_is_broken = 0; -static int sscanf_is_broken_testdone = 0; -static void sscanf_is_broken_test(void); - -struct json_object* json_object_from_file(const char *filename) -{ - struct printbuf *pb; - struct json_object *obj; - char buf[JSON_FILE_BUF_SIZE]; - int fd, ret; - - if((fd = open(filename, O_RDONLY)) < 0) { - MC_ERROR("json_object_from_file: error opening file %s: %s\n", - filename, strerror(errno)); - return NULL; - } - if(!(pb = printbuf_new())) { - close(fd); - MC_ERROR("json_object_from_file: printbuf_new failed\n"); - return NULL; - } - while((ret = read(fd, buf, JSON_FILE_BUF_SIZE)) > 0) { - printbuf_memappend(pb, buf, ret); - } - close(fd); - if(ret < 0) { - MC_ERROR("json_object_from_file: error reading file %s: %s\n", - filename, strerror(errno)); - printbuf_free(pb); - return NULL; - } - obj = json_tokener_parse(pb->buf); - printbuf_free(pb); - return obj; -} - -/* extended "format and write to file" function */ - -int json_object_to_file_ext(const char *filename, struct json_object *obj, int flags) -{ - const char *json_str; - int fd, ret; - unsigned int wpos, wsize; - - if(!obj) { - MC_ERROR("json_object_to_file: object is null\n"); - return -1; - } - - if((fd = open(filename, O_WRONLY | O_TRUNC | O_CREAT, 0644)) < 0) { - MC_ERROR("json_object_to_file: error opening file %s: %s\n", - filename, strerror(errno)); - return -1; - } - - if(!(json_str = json_object_to_json_string_ext(obj,flags))) { - close(fd); - return -1; - } - - wsize = (unsigned int)(strlen(json_str) & UINT_MAX); /* CAW: probably unnecessary, but the most 64bit safe */ - wpos = 0; - while(wpos < wsize) { - if((ret = write(fd, json_str + wpos, wsize-wpos)) < 0) { - close(fd); - MC_ERROR("json_object_to_file: error writing file %s: %s\n", - filename, strerror(errno)); - return -1; - } - - /* because of the above check for ret < 0, we can safely cast and add */ - wpos += (unsigned int)ret; - } - - close(fd); - return 0; -} - -// backwards compatible "format and write to file" function - -int json_object_to_file(const char *filename, struct json_object *obj) -{ - return json_object_to_file_ext(filename, obj, JSON_C_TO_STRING_PLAIN); -} - -int json_parse_double(const char *buf, double *retval) -{ - return (sscanf(buf, "%lf", retval)==1 ? 0 : 1); -} - -/* - * Not all implementations of sscanf actually work properly. - * Check whether the one we're currently using does, and if - * it's broken, enable the workaround code. - */ -static void sscanf_is_broken_test() -{ - int64_t num64; - int ret_errno, is_int64_min, ret_errno2, is_int64_max; - - (void)sscanf(" -01234567890123456789012345", "%" SCNd64, &num64); - ret_errno = errno; - is_int64_min = (num64 == INT64_MIN); - - (void)sscanf(" 01234567890123456789012345", "%" SCNd64, &num64); - ret_errno2 = errno; - is_int64_max = (num64 == INT64_MAX); - - if (ret_errno != ERANGE || !is_int64_min || - ret_errno2 != ERANGE || !is_int64_max) - { - MC_DEBUG("sscanf_is_broken_test failed, enabling workaround code\n"); - sscanf_is_broken = 1; - } -} - -int json_parse_int64(const char *buf, int64_t *retval) -{ - int64_t num64; - const char *buf_sig_digits; - int orig_has_neg; - int saved_errno; - - if (!sscanf_is_broken_testdone) - { - sscanf_is_broken_test(); - sscanf_is_broken_testdone = 1; - } - - // Skip leading spaces - while (isspace((int)*buf) && *buf) - buf++; - - errno = 0; // sscanf won't always set errno, so initialize - if (sscanf(buf, "%" SCNd64, &num64) != 1) - { - MC_DEBUG("Failed to parse, sscanf != 1\n"); - return 1; - } - - saved_errno = errno; - buf_sig_digits = buf; - orig_has_neg = 0; - if (*buf_sig_digits == '-') - { - buf_sig_digits++; - orig_has_neg = 1; - } - - // Not all sscanf implementations actually work - if (sscanf_is_broken && saved_errno != ERANGE) - { - char buf_cmp[100]; - char *buf_cmp_start = buf_cmp; - int recheck_has_neg = 0; - int buf_cmp_len; - - // Skip leading zeros, but keep at least one digit - while (buf_sig_digits[0] == '0' && buf_sig_digits[1] != '\0') - buf_sig_digits++; - if (num64 == 0) // assume all sscanf impl's will parse -0 to 0 - orig_has_neg = 0; // "-0" is the same as just plain "0" - - snprintf(buf_cmp_start, sizeof(buf_cmp), "%" PRId64, num64); - if (*buf_cmp_start == '-') - { - recheck_has_neg = 1; - buf_cmp_start++; - } - // No need to skip leading spaces or zeros here. - - buf_cmp_len = strlen(buf_cmp_start); - /** - * If the sign is different, or - * some of the digits are different, or - * there is another digit present in the original string - * then we have NOT successfully parsed the value. - */ - if (orig_has_neg != recheck_has_neg || - strncmp(buf_sig_digits, buf_cmp_start, strlen(buf_cmp_start)) != 0 || - ((int)strlen(buf_sig_digits) != buf_cmp_len && - isdigit((int)buf_sig_digits[buf_cmp_len]) - ) - ) - { - saved_errno = ERANGE; - } - } - - // Not all sscanf impl's set the value properly when out of range. - // Always do this, even for properly functioning implementations, - // since it shouldn't slow things down much. - if (saved_errno == ERANGE) - { - if (orig_has_neg) - num64 = INT64_MIN; - else - num64 = INT64_MAX; - } - *retval = num64; - return 0; -} - -#ifndef HAVE_REALLOC -void* rpl_realloc(void* p, size_t n) -{ - if (n == 0) - n = 1; - if (p == 0) - return malloc(n); - return realloc(p, n); -} -#endif - -#define NELEM(a) (sizeof(a) / sizeof(a[0])) -static const char* json_type_name[] = { - /* If you change this, be sure to update the enum json_type definition too */ - "null", - "boolean", - "double", - "int", - "object", - "array", - "string", -}; - -const char *json_type_to_name(enum json_type o_type) -{ - int o_type_int = (int)o_type; - if (o_type_int < 0 || o_type_int >= (int)NELEM(json_type_name)) - { - MC_ERROR("json_type_to_name: type %d is out of range [0,%d]\n", o_type, NELEM(json_type_name)); - return NULL; - } - return json_type_name[o_type]; -} - diff --git a/json-c/json_util.h b/json-c/json_util.h deleted file mode 100644 index 387dbc47..00000000 --- a/json-c/json_util.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * $Id: json_util.h,v 1.4 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _json_util_h_ -#define _json_util_h_ - -#include "json_object.h" - -#ifndef json_min -#define json_min(a,b) ((a) < (b) ? (a) : (b)) -#endif - -#ifndef json_max -#define json_max(a,b) ((a) > (b) ? (a) : (b)) -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -#define JSON_FILE_BUF_SIZE 4096 - -/* utility functions */ -extern struct json_object* json_object_from_file(const char *filename); -extern int json_object_to_file(const char *filename, struct json_object *obj); -extern int json_object_to_file_ext(const char *filename, struct json_object *obj, int flags); -extern int json_parse_int64(const char *buf, int64_t *retval); -extern int json_parse_double(const char *buf, double *retval); - - -/** - * Return a string describing the type of the object. - * e.g. "int", or "object", etc... - */ -extern const char *json_type_to_name(enum json_type o_type); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/libjson.c b/json-c/libjson.c deleted file mode 100644 index 5284fd0e..00000000 --- a/json-c/libjson.c +++ /dev/null @@ -1,26 +0,0 @@ - -/* dummy source file for compatibility purposes */ - -#if defined(HAVE_CDEFS_H) -#include <sys/cdefs.h> -#endif - -#ifndef __warn_references - -#if defined(__GNUC__) && defined (HAS_GNU_WARNING_LONG) - -#define __warn_references(sym,msg) \ - __asm__(".section .gnu" #sym ",\n\t.ascii \"" msg "\"\n\t.text"); - -#else -#define __warn_references(sym,msg) /* nothing */ -#endif - -#endif - -#include "json_object.h" - -__warn_references(json_object_get, "Warning: please link against libjson-c instead of libjson"); - -/* __asm__(".section .gnu.warning." __STRING(sym) \ - " ; .ascii \"" msg "\" ; .text") */ diff --git a/json-c/linkhash.c b/json-c/linkhash.c deleted file mode 100644 index 712c3879..00000000 --- a/json-c/linkhash.c +++ /dev/null @@ -1,602 +0,0 @@ -/* - * $Id: linkhash.c,v 1.4 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <stdarg.h> -#include <stddef.h> -#include <limits.h> - -#ifdef HAVE_ENDIAN_H -# include <endian.h> /* attempt to define endianness */ -#endif - -#include "random_seed.h" -#include "linkhash.h" - -void lh_abort(const char *msg, ...) -{ - va_list ap; - va_start(ap, msg); - vprintf(msg, ap); - va_end(ap); - exit(1); -} - -unsigned long lh_ptr_hash(const void *k) -{ - /* CAW: refactored to be 64bit nice */ - return (unsigned long)((((ptrdiff_t)k * LH_PRIME) >> 4) & ULONG_MAX); -} - -int lh_ptr_equal(const void *k1, const void *k2) -{ - return (k1 == k2); -} - -/* - * hashlittle from lookup3.c, by Bob Jenkins, May 2006, Public Domain. - * http://burtleburtle.net/bob/c/lookup3.c - * minor modifications to make functions static so no symbols are exported - * minor mofifications to compile with -Werror - */ - -/* -------------------------------------------------------------------------------- -lookup3.c, by Bob Jenkins, May 2006, Public Domain. - -These are functions for producing 32-bit hashes for hash table lookup. -hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() -are externally useful functions. Routines to test the hash are included -if SELF_TEST is defined. You can use this free for any purpose. It's in -the public domain. It has no warranty. - -You probably want to use hashlittle(). hashlittle() and hashbig() -hash byte arrays. hashlittle() is is faster than hashbig() on -little-endian machines. Intel and AMD are little-endian machines. -On second thought, you probably want hashlittle2(), which is identical to -hashlittle() except it returns two 32-bit hashes for the price of one. -You could implement hashbig2() if you wanted but I haven't bothered here. - -If you want to find a hash of, say, exactly 7 integers, do - a = i1; b = i2; c = i3; - mix(a,b,c); - a += i4; b += i5; c += i6; - mix(a,b,c); - a += i7; - final(a,b,c); -then use c as the hash value. If you have a variable length array of -4-byte integers to hash, use hashword(). If you have a byte array (like -a character string), use hashlittle(). If you have several byte arrays, or -a mix of things, see the comments above hashlittle(). - -Why is this so big? I read 12 bytes at a time into 3 4-byte integers, -then mix those integers. This is fast (you can do a lot more thorough -mixing with 12*3 instructions on 3 integers than you can with 3 instructions -on 1 byte), but shoehorning those bytes into integers efficiently is messy. -------------------------------------------------------------------------------- -*/ - -/* - * My best guess at if you are big-endian or little-endian. This may - * need adjustment. - */ -#if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \ - __BYTE_ORDER == __LITTLE_ENDIAN) || \ - (defined(i386) || defined(__i386__) || defined(__i486__) || \ - defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL)) -# define HASH_LITTLE_ENDIAN 1 -# define HASH_BIG_ENDIAN 0 -#elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \ - __BYTE_ORDER == __BIG_ENDIAN) || \ - (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel)) -# define HASH_LITTLE_ENDIAN 0 -# define HASH_BIG_ENDIAN 1 -#else -# define HASH_LITTLE_ENDIAN 0 -# define HASH_BIG_ENDIAN 0 -#endif - -#define hashsize(n) ((uint32_t)1<<(n)) -#define hashmask(n) (hashsize(n)-1) -#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) - -/* -------------------------------------------------------------------------------- -mix -- mix 3 32-bit values reversibly. - -This is reversible, so any information in (a,b,c) before mix() is -still in (a,b,c) after mix(). - -If four pairs of (a,b,c) inputs are run through mix(), or through -mix() in reverse, there are at least 32 bits of the output that -are sometimes the same for one pair and different for another pair. -This was tested for: -* pairs that differed by one bit, by two bits, in any combination - of top bits of (a,b,c), or in any combination of bottom bits of - (a,b,c). -* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed - the output delta to a Gray code (a^(a>>1)) so a string of 1's (as - is commonly produced by subtraction) look like a single 1-bit - difference. -* the base values were pseudorandom, all zero but one bit set, or - all zero plus a counter that starts at zero. - -Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that -satisfy this are - 4 6 8 16 19 4 - 9 15 3 18 27 15 - 14 9 3 7 17 3 -Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing -for "differ" defined as + with a one-bit base and a two-bit delta. I -used http://burtleburtle.net/bob/hash/avalanche.html to choose -the operations, constants, and arrangements of the variables. - -This does not achieve avalanche. There are input bits of (a,b,c) -that fail to affect some output bits of (a,b,c), especially of a. The -most thoroughly mixed value is c, but it doesn't really even achieve -avalanche in c. - -This allows some parallelism. Read-after-writes are good at doubling -the number of bits affected, so the goal of mixing pulls in the opposite -direction as the goal of parallelism. I did what I could. Rotates -seem to cost as much as shifts on every machine I could lay my hands -on, and rotates are much kinder to the top and bottom bits, so I used -rotates. -------------------------------------------------------------------------------- -*/ -#define mix(a,b,c) \ -{ \ - a -= c; a ^= rot(c, 4); c += b; \ - b -= a; b ^= rot(a, 6); a += c; \ - c -= b; c ^= rot(b, 8); b += a; \ - a -= c; a ^= rot(c,16); c += b; \ - b -= a; b ^= rot(a,19); a += c; \ - c -= b; c ^= rot(b, 4); b += a; \ -} - -/* -------------------------------------------------------------------------------- -final -- final mixing of 3 32-bit values (a,b,c) into c - -Pairs of (a,b,c) values differing in only a few bits will usually -produce values of c that look totally different. This was tested for -* pairs that differed by one bit, by two bits, in any combination - of top bits of (a,b,c), or in any combination of bottom bits of - (a,b,c). -* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed - the output delta to a Gray code (a^(a>>1)) so a string of 1's (as - is commonly produced by subtraction) look like a single 1-bit - difference. -* the base values were pseudorandom, all zero but one bit set, or - all zero plus a counter that starts at zero. - -These constants passed: - 14 11 25 16 4 14 24 - 12 14 25 16 4 14 24 -and these came close: - 4 8 15 26 3 22 24 - 10 8 15 26 3 22 24 - 11 8 15 26 3 22 24 -------------------------------------------------------------------------------- -*/ -#define final(a,b,c) \ -{ \ - c ^= b; c -= rot(b,14); \ - a ^= c; a -= rot(c,11); \ - b ^= a; b -= rot(a,25); \ - c ^= b; c -= rot(b,16); \ - a ^= c; a -= rot(c,4); \ - b ^= a; b -= rot(a,14); \ - c ^= b; c -= rot(b,24); \ -} - - -/* -------------------------------------------------------------------------------- -hashlittle() -- hash a variable-length key into a 32-bit value - k : the key (the unaligned variable-length array of bytes) - length : the length of the key, counting by bytes - initval : can be any 4-byte value -Returns a 32-bit value. Every bit of the key affects every bit of -the return value. Two keys differing by one or two bits will have -totally different hash values. - -The best hash table sizes are powers of 2. There is no need to do -mod a prime (mod is sooo slow!). If you need less than 32 bits, -use a bitmask. For example, if you need only 10 bits, do - h = (h & hashmask(10)); -In which case, the hash table should have hashsize(10) elements. - -If you are hashing n strings (uint8_t **)k, do it like this: - for (i=0, h=0; i<n; ++i) h = hashlittle( k[i], len[i], h); - -By Bob Jenkins, 2006. bob_jenkins@burtleburtle.net. You may use this -code any way you wish, private, educational, or commercial. It's free. - -Use for hash table lookup, or anything where one collision in 2^^32 is -acceptable. Do NOT use for cryptographic purposes. -------------------------------------------------------------------------------- -*/ - -static uint32_t hashlittle( const void *key, size_t length, uint32_t initval) -{ - uint32_t a,b,c; /* internal state */ - union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */ - - /* Set up the internal state */ - a = b = c = 0xdeadbeef + ((uint32_t)length) + initval; - - u.ptr = key; - if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) { - const uint32_t *k = (const uint32_t *)key; /* read 32-bit chunks */ - - /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */ - while (length > 12) - { - a += k[0]; - b += k[1]; - c += k[2]; - mix(a,b,c); - length -= 12; - k += 3; - } - - /*----------------------------- handle the last (probably partial) block */ - /* - * "k[2]&0xffffff" actually reads beyond the end of the string, but - * then masks off the part it's not allowed to read. Because the - * string is aligned, the masked-off tail is in the same word as the - * rest of the string. Every machine with memory protection I've seen - * does it on word boundaries, so is OK with this. But VALGRIND will - * still catch it and complain. The masking trick does make the hash - * noticably faster for short strings (like English words). - */ -#ifndef VALGRIND - - switch(length) - { - case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; - case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break; - case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break; - case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break; - case 8 : b+=k[1]; a+=k[0]; break; - case 7 : b+=k[1]&0xffffff; a+=k[0]; break; - case 6 : b+=k[1]&0xffff; a+=k[0]; break; - case 5 : b+=k[1]&0xff; a+=k[0]; break; - case 4 : a+=k[0]; break; - case 3 : a+=k[0]&0xffffff; break; - case 2 : a+=k[0]&0xffff; break; - case 1 : a+=k[0]&0xff; break; - case 0 : return c; /* zero length strings require no mixing */ - } - -#else /* make valgrind happy */ - - const uint8_t *k8 = (const uint8_t *)k; - switch(length) - { - case 12: c+=k[2]; b+=k[1]; a+=k[0]; break; - case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ - case 10: c+=((uint32_t)k8[9])<<8; /* fall through */ - case 9 : c+=k8[8]; /* fall through */ - case 8 : b+=k[1]; a+=k[0]; break; - case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ - case 6 : b+=((uint32_t)k8[5])<<8; /* fall through */ - case 5 : b+=k8[4]; /* fall through */ - case 4 : a+=k[0]; break; - case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ - case 2 : a+=((uint32_t)k8[1])<<8; /* fall through */ - case 1 : a+=k8[0]; break; - case 0 : return c; - } - -#endif /* !valgrind */ - - } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) { - const uint16_t *k = (const uint16_t *)key; /* read 16-bit chunks */ - const uint8_t *k8; - - /*--------------- all but last block: aligned reads and different mixing */ - while (length > 12) - { - a += k[0] + (((uint32_t)k[1])<<16); - b += k[2] + (((uint32_t)k[3])<<16); - c += k[4] + (((uint32_t)k[5])<<16); - mix(a,b,c); - length -= 12; - k += 6; - } - - /*----------------------------- handle the last (probably partial) block */ - k8 = (const uint8_t *)k; - switch(length) - { - case 12: c+=k[4]+(((uint32_t)k[5])<<16); - b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 11: c+=((uint32_t)k8[10])<<16; /* fall through */ - case 10: c+=k[4]; - b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 9 : c+=k8[8]; /* fall through */ - case 8 : b+=k[2]+(((uint32_t)k[3])<<16); - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 7 : b+=((uint32_t)k8[6])<<16; /* fall through */ - case 6 : b+=k[2]; - a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 5 : b+=k8[4]; /* fall through */ - case 4 : a+=k[0]+(((uint32_t)k[1])<<16); - break; - case 3 : a+=((uint32_t)k8[2])<<16; /* fall through */ - case 2 : a+=k[0]; - break; - case 1 : a+=k8[0]; - break; - case 0 : return c; /* zero length requires no mixing */ - } - - } else { /* need to read the key one byte at a time */ - const uint8_t *k = (const uint8_t *)key; - - /*--------------- all but the last block: affect some 32 bits of (a,b,c) */ - while (length > 12) - { - a += k[0]; - a += ((uint32_t)k[1])<<8; - a += ((uint32_t)k[2])<<16; - a += ((uint32_t)k[3])<<24; - b += k[4]; - b += ((uint32_t)k[5])<<8; - b += ((uint32_t)k[6])<<16; - b += ((uint32_t)k[7])<<24; - c += k[8]; - c += ((uint32_t)k[9])<<8; - c += ((uint32_t)k[10])<<16; - c += ((uint32_t)k[11])<<24; - mix(a,b,c); - length -= 12; - k += 12; - } - - /*-------------------------------- last block: affect all 32 bits of (c) */ - switch(length) /* all the case statements fall through */ - { - case 12: c+=((uint32_t)k[11])<<24; - case 11: c+=((uint32_t)k[10])<<16; - case 10: c+=((uint32_t)k[9])<<8; - case 9 : c+=k[8]; - case 8 : b+=((uint32_t)k[7])<<24; - case 7 : b+=((uint32_t)k[6])<<16; - case 6 : b+=((uint32_t)k[5])<<8; - case 5 : b+=k[4]; - case 4 : a+=((uint32_t)k[3])<<24; - case 3 : a+=((uint32_t)k[2])<<16; - case 2 : a+=((uint32_t)k[1])<<8; - case 1 : a+=k[0]; - break; - case 0 : return c; - } - } - - final(a,b,c); - return c; -} - -unsigned long lh_char_hash(const void *k) -{ - static volatile int random_seed = -1; - - if (random_seed == -1) { - int seed; - /* we can't use -1 as it is the unitialized sentinel */ - while ((seed = json_c_get_random_seed()) == -1); -#if defined __GNUC__ - __sync_val_compare_and_swap(&random_seed, -1, seed); -#elif defined _MSC_VER - InterlockedCompareExchange(&random_seed, seed, -1); -#else -#warning "racy random seed initializtion if used by multiple threads" - random_seed = seed; /* potentially racy */ -#endif - } - - return hashlittle((const char*)k, strlen((const char*)k), random_seed); -} - -int lh_char_equal(const void *k1, const void *k2) -{ - return (strcmp((const char*)k1, (const char*)k2) == 0); -} - -struct lh_table* lh_table_new(int size, const char *name, - lh_entry_free_fn *free_fn, - lh_hash_fn *hash_fn, - lh_equal_fn *equal_fn) -{ - int i; - struct lh_table *t; - - t = (struct lh_table*)calloc(1, sizeof(struct lh_table)); - if(!t) lh_abort("lh_table_new: calloc failed\n"); - t->count = 0; - t->size = size; - t->name = name; - t->table = (struct lh_entry*)calloc(size, sizeof(struct lh_entry)); - if(!t->table) lh_abort("lh_table_new: calloc failed\n"); - t->free_fn = free_fn; - t->hash_fn = hash_fn; - t->equal_fn = equal_fn; - for(i = 0; i < size; i++) t->table[i].k = LH_EMPTY; - return t; -} - -struct lh_table* lh_kchar_table_new(int size, const char *name, - lh_entry_free_fn *free_fn) -{ - return lh_table_new(size, name, free_fn, lh_char_hash, lh_char_equal); -} - -struct lh_table* lh_kptr_table_new(int size, const char *name, - lh_entry_free_fn *free_fn) -{ - return lh_table_new(size, name, free_fn, lh_ptr_hash, lh_ptr_equal); -} - -void lh_table_resize(struct lh_table *t, int new_size) -{ - struct lh_table *new_t; - struct lh_entry *ent; - - new_t = lh_table_new(new_size, t->name, NULL, t->hash_fn, t->equal_fn); - ent = t->head; - while(ent) { - lh_table_insert(new_t, ent->k, ent->v); - ent = ent->next; - } - free(t->table); - t->table = new_t->table; - t->size = new_size; - t->head = new_t->head; - t->tail = new_t->tail; - t->resizes++; - free(new_t); -} - -void lh_table_free(struct lh_table *t) -{ - struct lh_entry *c; - for(c = t->head; c != NULL; c = c->next) { - if(t->free_fn) { - t->free_fn(c); - } - } - free(t->table); - free(t); -} - - -int lh_table_insert(struct lh_table *t, void *k, const void *v) -{ - unsigned long h, n; - - t->inserts++; - if(t->count >= t->size * LH_LOAD_FACTOR) lh_table_resize(t, t->size * 2); - - h = t->hash_fn(k); - n = h % t->size; - - while( 1 ) { - if(t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED) break; - t->collisions++; - if ((int)++n == t->size) n = 0; - } - - t->table[n].k = k; - t->table[n].v = v; - t->count++; - - if(t->head == NULL) { - t->head = t->tail = &t->table[n]; - t->table[n].next = t->table[n].prev = NULL; - } else { - t->tail->next = &t->table[n]; - t->table[n].prev = t->tail; - t->table[n].next = NULL; - t->tail = &t->table[n]; - } - - return 0; -} - - -struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k) -{ - unsigned long h = t->hash_fn(k); - unsigned long n = h % t->size; - int count = 0; - - t->lookups++; - while( count < t->size ) { - if(t->table[n].k == LH_EMPTY) return NULL; - if(t->table[n].k != LH_FREED && - t->equal_fn(t->table[n].k, k)) return &t->table[n]; - if ((int)++n == t->size) n = 0; - count++; - } - return NULL; -} - - -const void* lh_table_lookup(struct lh_table *t, const void *k) -{ - void *result; - lh_table_lookup_ex(t, k, &result); - return result; -} - -json_bool lh_table_lookup_ex(struct lh_table* t, const void* k, void **v) -{ - struct lh_entry *e = lh_table_lookup_entry(t, k); - if (e != NULL) { - if (v != NULL) *v = (void *)e->v; - return TRUE; /* key found */ - } - if (v != NULL) *v = NULL; - return FALSE; /* key not found */ -} - -int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e) -{ - ptrdiff_t n = (ptrdiff_t)(e - t->table); /* CAW: fixed to be 64bit nice, still need the crazy negative case... */ - - /* CAW: this is bad, really bad, maybe stack goes other direction on this machine... */ - if(n < 0) { return -2; } - - if(t->table[n].k == LH_EMPTY || t->table[n].k == LH_FREED) return -1; - t->count--; - if(t->free_fn) t->free_fn(e); - t->table[n].v = NULL; - t->table[n].k = LH_FREED; - if(t->tail == &t->table[n] && t->head == &t->table[n]) { - t->head = t->tail = NULL; - } else if (t->head == &t->table[n]) { - t->head->next->prev = NULL; - t->head = t->head->next; - } else if (t->tail == &t->table[n]) { - t->tail->prev->next = NULL; - t->tail = t->tail->prev; - } else { - t->table[n].prev->next = t->table[n].next; - t->table[n].next->prev = t->table[n].prev; - } - t->table[n].next = t->table[n].prev = NULL; - return 0; -} - - -int lh_table_delete(struct lh_table *t, const void *k) -{ - struct lh_entry *e = lh_table_lookup_entry(t, k); - if(!e) return -1; - return lh_table_delete_entry(t, e); -} - -int lh_table_length(struct lh_table *t) -{ - return t->count; -} diff --git a/json-c/linkhash.h b/json-c/linkhash.h deleted file mode 100644 index 950d09f3..00000000 --- a/json-c/linkhash.h +++ /dev/null @@ -1,292 +0,0 @@ -/* - * $Id: linkhash.h,v 1.6 2006/01/30 23:07:57 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * Copyright (c) 2009 Hewlett-Packard Development Company, L.P. - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef _linkhash_h_ -#define _linkhash_h_ - -#include "json_object.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * golden prime used in hash functions - */ -#define LH_PRIME 0x9e370001UL - -/** - * The fraction of filled hash buckets until an insert will cause the table - * to be resized. - * This can range from just above 0 up to 1.0. - */ -#define LH_LOAD_FACTOR 0.66 - -/** - * sentinel pointer value for empty slots - */ -#define LH_EMPTY (void*)-1 - -/** - * sentinel pointer value for freed slots - */ -#define LH_FREED (void*)-2 - -struct lh_entry; - -/** - * callback function prototypes - */ -typedef void (lh_entry_free_fn) (struct lh_entry *e); -/** - * callback function prototypes - */ -typedef unsigned long (lh_hash_fn) (const void *k); -/** - * callback function prototypes - */ -typedef int (lh_equal_fn) (const void *k1, const void *k2); - -/** - * An entry in the hash table - */ -struct lh_entry { - /** - * The key. - */ - void *k; - /** - * The value. - */ - const void *v; - /** - * The next entry - */ - struct lh_entry *next; - /** - * The previous entry. - */ - struct lh_entry *prev; -}; - - -/** - * The hash table structure. - */ -struct lh_table { - /** - * Size of our hash. - */ - int size; - /** - * Numbers of entries. - */ - int count; - - /** - * Number of collisions. - */ - int collisions; - - /** - * Number of resizes. - */ - int resizes; - - /** - * Number of lookups. - */ - int lookups; - - /** - * Number of inserts. - */ - int inserts; - - /** - * Number of deletes. - */ - int deletes; - - /** - * Name of the hash table. - */ - const char *name; - - /** - * The first entry. - */ - struct lh_entry *head; - - /** - * The last entry. - */ - struct lh_entry *tail; - - struct lh_entry *table; - - /** - * A pointer onto the function responsible for freeing an entry. - */ - lh_entry_free_fn *free_fn; - lh_hash_fn *hash_fn; - lh_equal_fn *equal_fn; -}; - - -/** - * Pre-defined hash and equality functions - */ -extern unsigned long lh_ptr_hash(const void *k); -extern int lh_ptr_equal(const void *k1, const void *k2); - -extern unsigned long lh_char_hash(const void *k); -extern int lh_char_equal(const void *k1, const void *k2); - - -/** - * Convenience list iterator. - */ -#define lh_foreach(table, entry) \ -for(entry = table->head; entry; entry = entry->next) - -/** - * lh_foreach_safe allows calling of deletion routine while iterating. - */ -#define lh_foreach_safe(table, entry, tmp) \ -for(entry = table->head; entry && ((tmp = entry->next) || 1); entry = tmp) - - - -/** - * Create a new linkhash table. - * @param size initial table size. The table is automatically resized - * although this incurs a performance penalty. - * @param name the table name. - * @param free_fn callback function used to free memory for entries - * when lh_table_free or lh_table_delete is called. - * If NULL is provided, then memory for keys and values - * must be freed by the caller. - * @param hash_fn function used to hash keys. 2 standard ones are defined: - * lh_ptr_hash and lh_char_hash for hashing pointer values - * and C strings respectively. - * @param equal_fn comparison function to compare keys. 2 standard ones defined: - * lh_ptr_hash and lh_char_hash for comparing pointer values - * and C strings respectively. - * @return a pointer onto the linkhash table. - */ -extern struct lh_table* lh_table_new(int size, const char *name, - lh_entry_free_fn *free_fn, - lh_hash_fn *hash_fn, - lh_equal_fn *equal_fn); - -/** - * Convenience function to create a new linkhash - * table with char keys. - * @param size initial table size. - * @param name table name. - * @param free_fn callback function used to free memory for entries. - * @return a pointer onto the linkhash table. - */ -extern struct lh_table* lh_kchar_table_new(int size, const char *name, - lh_entry_free_fn *free_fn); - - -/** - * Convenience function to create a new linkhash - * table with ptr keys. - * @param size initial table size. - * @param name table name. - * @param free_fn callback function used to free memory for entries. - * @return a pointer onto the linkhash table. - */ -extern struct lh_table* lh_kptr_table_new(int size, const char *name, - lh_entry_free_fn *free_fn); - - -/** - * Free a linkhash table. - * If a callback free function is provided then it is called for all - * entries in the table. - * @param t table to free. - */ -extern void lh_table_free(struct lh_table *t); - - -/** - * Insert a record into the table. - * @param t the table to insert into. - * @param k a pointer to the key to insert. - * @param v a pointer to the value to insert. - */ -extern int lh_table_insert(struct lh_table *t, void *k, const void *v); - - -/** - * Lookup a record into the table. - * @param t the table to lookup - * @param k a pointer to the key to lookup - * @return a pointer to the record structure of the value or NULL if it does not exist. - */ -extern struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k); - -/** - * Lookup a record into the table - * @param t the table to lookup - * @param k a pointer to the key to lookup - * @return a pointer to the found value or NULL if it does not exist. - * @deprecated Use lh_table_lookup_ex instead. - */ -THIS_FUNCTION_IS_DEPRECATED(extern const void* lh_table_lookup(struct lh_table *t, const void *k)); - -/** - * Lookup a record in the table - * @param t the table to lookup - * @param k a pointer to the key to lookup - * @param v a pointer to a where to store the found value (set to NULL if it doesn't exist). - * @return whether or not the key was found - */ -extern json_bool lh_table_lookup_ex(struct lh_table *t, const void *k, void **v); - -/** - * Delete a record from the table. - * If a callback free function is provided then it is called for the - * for the item being deleted. - * @param t the table to delete from. - * @param e a pointer to the entry to delete. - * @return 0 if the item was deleted. - * @return -1 if it was not found. - */ -extern int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e); - - -/** - * Delete a record from the table. - * If a callback free function is provided then it is called for the - * for the item being deleted. - * @param t the table to delete from. - * @param k a pointer to the key to delete. - * @return 0 if the item was deleted. - * @return -1 if it was not found. - */ -extern int lh_table_delete(struct lh_table *t, const void *k); - -extern int lh_table_length(struct lh_table *t); - -void lh_abort(const char *msg, ...); -void lh_table_resize(struct lh_table *t, int new_size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/math_compat.h b/json-c/math_compat.h deleted file mode 100644 index f40b8faf..00000000 --- a/json-c/math_compat.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __math_compat_h -#define __math_compat_h - -/* Define isnan and isinf on Windows/MSVC */ - -#ifndef HAVE_DECL_ISNAN -# ifdef HAVE_DECL__ISNAN -#include <float.h> -#define isnan(x) _isnan(x) -# endif -#endif - -#ifndef HAVE_DECL_ISINF -# ifdef HAVE_DECL__FINITE -#include <float.h> -#define isinf(x) (!_finite(x)) -# endif -#endif - -#ifndef HAVE_DECL_NAN -#error This platform does not have nan() -#endif - -#ifndef HAVE_DECL_INFINITY -#error This platform does not have INFINITY -#endif - -#endif diff --git a/json-c/printbuf.c b/json-c/printbuf.c deleted file mode 100644 index fe952b45..00000000 --- a/json-c/printbuf.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * $Id: printbuf.c,v 1.5 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - * - * Copyright (c) 2008-2009 Yahoo! Inc. All rights reserved. - * The copyrights to the contents of this file are licensed under the MIT License - * (http://www.opensource.org/licenses/mit-license.php) - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#ifdef HAVE_STDARG_H -# include <stdarg.h> -#else /* !HAVE_STDARG_H */ -# error Not enough var arg support! -#endif /* HAVE_STDARG_H */ - -#include "debug.h" -#include "printbuf.h" - -static int printbuf_extend(struct printbuf *p, int min_size); - -struct printbuf* printbuf_new(void) -{ - struct printbuf *p; - - p = (struct printbuf*)calloc(1, sizeof(struct printbuf)); - if(!p) return NULL; - p->size = 32; - p->bpos = 0; - if(!(p->buf = (char*)malloc(p->size))) { - free(p); - return NULL; - } - return p; -} - - -/** - * Extend the buffer p so it has a size of at least min_size. - * - * If the current size is large enough, nothing is changed. - * - * Note: this does not check the available space! The caller - * is responsible for performing those calculations. - */ -static int printbuf_extend(struct printbuf *p, int min_size) -{ - char *t; - int new_size; - - if (p->size >= min_size) - return 0; - - new_size = p->size * 2; - if (new_size < min_size + 8) - new_size = min_size + 8; -#ifdef PRINTBUF_DEBUG - MC_DEBUG("printbuf_memappend: realloc " - "bpos=%d min_size=%d old_size=%d new_size=%d\n", - p->bpos, min_size, p->size, new_size); -#endif /* PRINTBUF_DEBUG */ - if(!(t = (char*)realloc(p->buf, new_size))) - return -1; - p->size = new_size; - p->buf = t; - return 0; -} - -int printbuf_memappend(struct printbuf *p, const char *buf, int size) -{ - if (p->size <= p->bpos + size + 1) { - if (printbuf_extend(p, p->bpos + size + 1) < 0) - return -1; - } - memcpy(p->buf + p->bpos, buf, size); - p->bpos += size; - p->buf[p->bpos]= '\0'; - return size; -} - -int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len) -{ - int size_needed; - - if (offset == -1) - offset = pb->bpos; - size_needed = offset + len; - if (pb->size < size_needed) - { - if (printbuf_extend(pb, size_needed) < 0) - return -1; - } - - memset(pb->buf + offset, charvalue, len); - if (pb->bpos < size_needed) - pb->bpos = size_needed; - - return 0; -} - -#if !defined(HAVE_VSNPRINTF) && defined(_MSC_VER) -# define vsnprintf _vsnprintf -#elif !defined(HAVE_VSNPRINTF) /* !HAVE_VSNPRINTF */ -# error Need vsnprintf! -#endif /* !HAVE_VSNPRINTF && defined(WIN32) */ - -#if !defined(HAVE_VASPRINTF) -/* CAW: compliant version of vasprintf */ -static int vasprintf(char **buf, const char *fmt, va_list ap) -{ -#ifndef WIN32 - static char _T_emptybuffer = '\0'; -#endif /* !defined(WIN32) */ - int chars; - char *b; - - if(!buf) { return -1; } - -#ifdef WIN32 - chars = _vscprintf(fmt, ap)+1; -#else /* !defined(WIN32) */ - /* CAW: RAWR! We have to hope to god here that vsnprintf doesn't overwrite - our buffer like on some 64bit sun systems.... but hey, its time to move on */ - chars = vsnprintf(&_T_emptybuffer, 0, fmt, ap)+1; - if(chars < 0) { chars *= -1; } /* CAW: old glibc versions have this problem */ -#endif /* defined(WIN32) */ - - b = (char*)malloc(sizeof(char)*chars); - if(!b) { return -1; } - - if((chars = vsprintf(b, fmt, ap)) < 0) - { - free(b); - } else { - *buf = b; - } - - return chars; -} -#endif /* !HAVE_VASPRINTF */ - -int sprintbuf(struct printbuf *p, const char *msg, ...) -{ - va_list ap; - char *t; - int size; - char buf[128]; - - /* user stack buffer first */ - va_start(ap, msg); - size = vsnprintf(buf, 128, msg, ap); - va_end(ap); - /* if string is greater than stack buffer, then use dynamic string - with vasprintf. Note: some implementation of vsnprintf return -1 - if output is truncated whereas some return the number of bytes that - would have been written - this code handles both cases. */ - if(size == -1 || size > 127) { - va_start(ap, msg); - if((size = vasprintf(&t, msg, ap)) < 0) { va_end(ap); return -1; } - va_end(ap); - printbuf_memappend(p, t, size); - free(t); - return size; - } else { - printbuf_memappend(p, buf, size); - return size; - } -} - -void printbuf_reset(struct printbuf *p) -{ - p->buf[0] = '\0'; - p->bpos = 0; -} - -void printbuf_free(struct printbuf *p) -{ - if(p) { - free(p->buf); - free(p); - } -} diff --git a/json-c/printbuf.h b/json-c/printbuf.h deleted file mode 100644 index b1bde7f9..00000000 --- a/json-c/printbuf.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * $Id: printbuf.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ - * - * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - * - * Copyright (c) 2008-2009 Yahoo! Inc. All rights reserved. - * The copyrights to the contents of this file are licensed under the MIT License - * (http://www.opensource.org/licenses/mit-license.php) - */ - -#ifndef _printbuf_h_ -#define _printbuf_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -struct printbuf { - char *buf; - int bpos; - int size; -}; - -extern struct printbuf* -printbuf_new(void); - -/* As an optimization, printbuf_memappend_fast is defined as a macro - * that handles copying data if the buffer is large enough; otherwise - * it invokes printbuf_memappend_real() which performs the heavy - * lifting of realloc()ing the buffer and copying data. - * Your code should not use printbuf_memappend directly--use - * printbuf_memappend_fast instead. - */ -extern int -printbuf_memappend(struct printbuf *p, const char *buf, int size); - -#define printbuf_memappend_fast(p, bufptr, bufsize) \ -do { \ - if ((p->size - p->bpos) > bufsize) { \ - memcpy(p->buf + p->bpos, (bufptr), bufsize); \ - p->bpos += bufsize; \ - p->buf[p->bpos]= '\0'; \ - } else { printbuf_memappend(p, (bufptr), bufsize); } \ -} while (0) - -#define printbuf_length(p) ((p)->bpos) - -/** - * Set len bytes of the buffer to charvalue, starting at offset offset. - * Similar to calling memset(x, charvalue, len); - * - * The memory allocated for the buffer is extended as necessary. - * - * If offset is -1, this starts at the end of the current data in the buffer. - */ -extern int -printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len); - -extern int -sprintbuf(struct printbuf *p, const char *msg, ...); - -extern void -printbuf_reset(struct printbuf *p); - -extern void -printbuf_free(struct printbuf *p); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/json-c/random_seed.c b/json-c/random_seed.c deleted file mode 100644 index f6719298..00000000 --- a/json-c/random_seed.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * random_seed.c - * - * Copyright (c) 2013 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#include <stdio.h> -#include "config.h" - -#define DEBUG_SEED(s) - - -#if defined ENABLE_RDRAND - -/* cpuid */ - -#if defined __GNUC__ && (defined __i386__ || defined __x86_64__) -#define HAS_X86_CPUID 1 - -static void do_cpuid(int regs[], int h) -{ - __asm__ __volatile__( -#if defined __x86_64__ - "pushq %%rbx;\n" -#else - "pushl %%ebx;\n" -#endif - "cpuid;\n" -#if defined __x86_64__ - "popq %%rbx;\n" -#else - "popl %%ebx;\n" -#endif - : "=a"(regs[0]), [ebx] "=r"(regs[1]), "=c"(regs[2]), "=d"(regs[3]) - : "a"(h)); -} - -#elif defined _MSC_VER - -#define HAS_X86_CPUID 1 -#define do_cpuid __cpuid - -#endif - -/* has_rdrand */ - -#if HAS_X86_CPUID - -static int has_rdrand() -{ - // CPUID.01H:ECX.RDRAND[bit 30] == 1 - int regs[4]; - do_cpuid(regs, 1); - return (regs[2] & (1 << 30)) != 0; -} - -#endif - -/* get_rdrand_seed - GCC x86 and X64 */ - -#if defined __GNUC__ && (defined __i386__ || defined __x86_64__) - -#define HAVE_RDRAND 1 - -static int get_rdrand_seed() -{ - DEBUG_SEED("get_rdrand_seed"); - int _eax; - // rdrand eax - __asm__ __volatile__("1: .byte 0x0F\n" - " .byte 0xC7\n" - " .byte 0xF0\n" - " jnc 1b;\n" - : "=a" (_eax)); - return _eax; -} - -#endif - -#if defined _MSC_VER - -#if _MSC_VER >= 1700 -#define HAVE_RDRAND 1 - -/* get_rdrand_seed - Visual Studio 2012 and above */ - -static int get_rdrand_seed() -{ - DEBUG_SEED("get_rdrand_seed"); - int r; - while (_rdrand32_step(&r) == 0); - return r; -} - -#elif defined _M_IX86 -#define HAVE_RDRAND 1 - -/* get_rdrand_seed - Visual Studio 2010 and below - x86 only */ - -static int get_rdrand_seed() -{ - DEBUG_SEED("get_rdrand_seed"); - int _eax; -retry: - // rdrand eax - __asm _emit 0x0F __asm _emit 0xC7 __asm _emit 0xF0 - __asm jnc retry - __asm mov _eax, eax - return _eax; -} - -#endif -#endif - -#endif /* defined ENABLE_RDRAND */ - - -/* has_dev_urandom */ - -#if defined (__APPLE__) || defined(__unix__) || defined(__linux__) - -#include <string.h> -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> -#include <stdlib.h> -#include <sys/stat.h> - -#define HAVE_DEV_RANDOM 1 - -static const char *dev_random_file = "/dev/urandom"; - -static int has_dev_urandom() -{ - struct stat buf; - if (stat(dev_random_file, &buf)) { - return 0; - } - return ((buf.st_mode & S_IFCHR) != 0); -} - - -/* get_dev_random_seed */ - -static int get_dev_random_seed() -{ - DEBUG_SEED("get_dev_random_seed"); - - int fd = open(dev_random_file, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "error opening %s: %s", dev_random_file, strerror(errno)); - exit(1); - } - - int r; - ssize_t nread = read(fd, &r, sizeof(r)); - if (nread != sizeof(r)) { - fprintf(stderr, "error short read %s: %s", dev_random_file, strerror(errno)); - exit(1); - } - - close(fd); - return r; -} - -#endif - - -/* get_cryptgenrandom_seed */ - -#ifdef WIN32 - -#define HAVE_CRYPTGENRANDOM 1 - -#include <windows.h> -#include <wincrypt.h> -#ifndef __GNUC__ -#pragma comment(lib, "advapi32.lib") -#endif - -static int get_cryptgenrandom_seed() -{ - DEBUG_SEED("get_cryptgenrandom_seed"); - - HCRYPTPROV hProvider = 0; - int r; - - if (!CryptAcquireContextW(&hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - fprintf(stderr, "error CryptAcquireContextW"); - exit(1); - } - - if (!CryptGenRandom(hProvider, sizeof(r), (BYTE*)&r)) { - fprintf(stderr, "error CryptGenRandom"); - exit(1); - } - - CryptReleaseContext(hProvider, 0); - - return r; -} - -#endif - - -/* get_time_seed */ - -#include <time.h> - -static int get_time_seed() -{ - DEBUG_SEED("get_time_seed"); - - return (int)time(NULL) * 433494437; -} - - -/* json_c_get_random_seed */ - -int json_c_get_random_seed() -{ -#if HAVE_RDRAND - if (has_rdrand()) return get_rdrand_seed(); -#endif -#if HAVE_DEV_RANDOM - if (has_dev_urandom()) return get_dev_random_seed(); -#endif -#if HAVE_CRYPTGENRANDOM - return get_cryptgenrandom_seed(); -#endif - return get_time_seed(); -} diff --git a/json-c/random_seed.h b/json-c/random_seed.h deleted file mode 100644 index 7362d67d..00000000 --- a/json-c/random_seed.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * random_seed.h - * - * Copyright (c) 2013 Metaparadigm Pte. Ltd. - * Michael Clark <michael@metaparadigm.com> - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See COPYING for details. - * - */ - -#ifndef seed_h -#define seed_h - -#ifdef __cplusplus -extern "C" { -#endif - -extern int json_c_get_random_seed(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/manifest.xml b/manifest.xml index 9adae5bb..c90904cf 100644 --- a/manifest.xml +++ b/manifest.xml @@ -140,28 +140,6 @@ </interface> </hal> <hal format="hidl"> - <name>android.hardware.media.omx</name> - <transport>hwbinder</transport> - <version>1.0</version> - <interface> - <name>IOmx</name> - <instance>default</instance> - </interface> - <interface> - <name>IOmxStore</name> - <instance>default</instance> - </interface> - </hal> - <hal format="hidl"> - <name>android.hardware.memtrack</name> - <transport>hwbinder</transport> - <version>1.0</version> - <interface> - <name>IMemtrack</name> - <instance>default</instance> - </interface> - </hal> - <hal format="hidl"> <name>android.hardware.neuralnetworks</name> <transport>hwbinder</transport> <fqname>@1.0::IDevice/paintbox</fqname> @@ -221,15 +199,6 @@ </interface> </hal> <hal format="hidl"> - <name>android.hardware.renderscript</name> - <transport arch="32+64">passthrough</transport> - <version>1.0</version> - <interface> - <name>IDevice</name> - <instance>default</instance> - </interface> - </hal> - <hal format="hidl"> <name>android.hardware.sensors</name> <transport>hwbinder</transport> <version>2.0</version> @@ -259,7 +228,7 @@ <hal format="hidl"> <name>android.hardware.tetheroffload.control</name> <transport>hwbinder</transport> - <version>1.0</version> + <version>1.1</version> <interface> <name>IOffloadControl</name> <instance>default</instance> diff --git a/media_codecs.xml b/media_codecs.xml index 97a80b6c..d9f32dfc 100644 --- a/media_codecs.xml +++ b/media_codecs.xml @@ -17,7 +17,6 @@ <MediaCodecs> <Include href="media_codecs_c2.xml" /> - <Include href="media_codecs_omx.xml" /> <Settings> <Setting name="max-video-encoder-input-buffers" value="11" /> <Domain name="telephony" enabled="true" /> diff --git a/media_codecs_omx.xml b/media_codecs_omx.xml deleted file mode 100644 index da791c04..00000000 --- a/media_codecs_omx.xml +++ /dev/null @@ -1,275 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!-- Copyright 2016 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. ---> - -<!-- -<!DOCTYPE MediaCodecs [ -<!ELEMENT Include EMPTY> -<!ATTLIST Include href CDATA #REQUIRED> -<!ELEMENT MediaCodecs (Decoders|Encoders|Include)*> -<!ELEMENT Decoders (MediaCodec|Include)*> -<!ELEMENT Encoders (MediaCodec|Include)*> -<!ELEMENT MediaCodec (Type|Quirk|Include)*> -<!ATTLIST MediaCodec name CDATA #REQUIRED> -<!ATTLIST MediaCodec type CDATA> -<!ELEMENT Type EMPTY> -<!ATTLIST Type name CDATA #REQUIRED> -<!ELEMENT Quirk EMPTY> -<!ATTLIST Quirk name CDATA #REQUIRED> -]> - -There's a simple and a complex syntax to declare the availability of a -media codec: - -A codec that properly follows the OpenMax spec and therefore doesn't have any -quirks and that only supports a single content type can be declared like so: - - <MediaCodec name="OMX.foo.bar" type="something/interesting" /> - -If a codec has quirks OR supports multiple content types, the following syntax -can be used: - - <MediaCodec name="OMX.foo.bar" > - <Type name="something/interesting" /> - <Type name="something/else" /> - ... - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Quirk name="output-buffers-are-unreadable" /> - </MediaCodec> - -Only the three quirks included above are recognized at this point: - -"requires-allocate-on-input-ports" - must be advertised if the component does not properly support specification - of input buffers using the OMX_UseBuffer(...) API but instead requires - OMX_AllocateBuffer to be used. - -"requires-allocate-on-output-ports" - must be advertised if the component does not properly support specification - of output buffers using the OMX_UseBuffer(...) API but instead requires - OMX_AllocateBuffer to be used. - -"output-buffers-are-unreadable" - must be advertised if the emitted output buffers of a decoder component - are not readable, i.e. use a custom format even though abusing one of - the official OMX colorspace constants. - Clients of such decoders will not be able to access the decoded data, - naturally making the component much less useful. The only use for - a component with this quirk is to render the output to the screen. - Audio decoders MUST NOT advertise this quirk. - Video decoders that advertise this quirk must be accompanied by a - corresponding color space converter for thumbnail extraction, - matching surfaceflinger support that can render the custom format to - a texture and possibly other code, so just DON'T USE THIS QUIRK. - - ---> - -<!-- - SDM670 Decoder capabilities - __________________________________________________________________ - | Codec | W H fps Mbps MB/s | Secure-dec | - |__________|_________________________________________|____________| - | h264 | 4096 2160 24 100 829440 | Y | - | hevc | 4096 2160 60 100 829440 | Y | - | vp8 | 3840 2160 30 100 979200 | N | - | vp9 | 4096 2160 24 100 829440 | Y | - |__________|_________________________________________|____________| - - - SDM670 Encoder capabilities - ______________________________________________________ - | Codec | W H fps Mbps MB/s | - |__________|_________________________________________| - | h264 | 4096 2160 24 100 829440 | - | hevc | 4096 2160 24 100 829440 | - | vp8 | 3840 2160 30 100 979200 | - |__________|_________________________________________| ---> - -<Included> - <Include href="media_codecs_google_audio.xml" /> - <Include href="media_codecs_google_telephony.xml" /> - <Settings> - <Setting name="max-video-encoder-input-buffers" value="11" /> - </Settings> - <Decoders> - <!-- Video Hardware --> - <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.avc.secure" type="video/avc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="972000" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="frame-rate" range="1-30" /> - <Limit name="concurrent-instances" max="6" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - <Feature name="secure-playback" required="true" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="1" max="979200" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.hevc.secure" type="video/hevc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="1" max="972000" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="frame-rate" range="1-30" /> - <Limit name="concurrent-instances" max="6" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - <Feature name="secure-playback" required="true" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="3840x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-20000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="performance-point-4096x2304" value="28" /> - <Limit name="performance-point-3840x2160" value="30" /> - <Limit name="performance-point-1920x1080" value="120" /> - <Limit name="performance-point-1280x720" value="240" /> - <Feature name="adaptive-playback" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.vp9" type="video/x-vnd.on2.vp9" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="3840x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-20000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="6" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.vp9.secure" type="video/x-vnd.on2.vp9" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Limit name="size" min="96x96" max="3840x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-20000000" /> - <Limit name="frame-rate" range="1-30" /> - <Limit name="concurrent-instances" max="6" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="adaptive-playback" /> - <Feature name="secure-playback" required="true" /> - </MediaCodec> - <!-- Audio Software --> - </Decoders> - <Encoders> - <!-- Audio Hardware --> - <!-- Audio Software --> - <!-- Video Hardware --> - <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Quirk name="requires-loaded-to-idle-after-allocation" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.encoder.hevc" type="video/hevc" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Quirk name="requires-loaded-to-idle-after-allocation" /> - <Limit name="size" min="96x96" max="4096x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-100000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="quality" range="0-100" default="80" /> - <Limit name="performance-point-4096x2304" value="56" /> - <Limit name="performance-point-3840x2160" value="60" /> - <Limit name="performance-point-1920x1080" value="240" /> - <Feature name="bitrate-modes" value="VBR,CQ" /> - </MediaCodec> - <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" > - <Quirk name="requires-allocate-on-input-ports" /> - <Quirk name="requires-allocate-on-output-ports" /> - <Quirk name="requires-loaded-to-idle-after-allocation" /> - <Limit name="size" min="96x96" max="3840x2160" /> - <Limit name="alignment" value="2x2" /> - <Limit name="block-size" value="16x16" /> - <Limit name="blocks-per-second" min="24" max="979200" /> - <Limit name="bitrate" range="1-20000000" /> - <Limit name="frame-rate" range="1-240" /> - <Limit name="concurrent-instances" max="16" /> - <Limit name="performance-point-4096x2304" value="28" /> - <Limit name="performance-point-3840x2160" value="30" /> - <Limit name="performance-point-1920x1080" value="120" /> - <Limit name="performance-point-1280x720" value="240" /> - </MediaCodec> - </Encoders> - <Include href="media_codecs_google_video.xml" /> -</Included> diff --git a/media_codecs_performance.xml b/media_codecs_performance.xml index a50da1a1..38c1f5b9 100644 --- a/media_codecs_performance.xml +++ b/media_codecs_performance.xml @@ -19,12 +19,6 @@ <MediaCodec name="c2.android.h263.encoder" type="video/3gpp" update="true"> <Limit name="measured-frame-rate-176x144" range="412-412" /> <!-- N=128 v98%=1.5 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" update="true"> - <Limit name="measured-frame-rate-320x240" range="360-360" /> <!-- N=126 v98%=1.5 --> - <Limit name="measured-frame-rate-720x480" range="159-160" /> <!-- N=128 v98%=1.0 --> - <Limit name="measured-frame-rate-1280x720" range="62-62" /> <!-- N=124 v98%=1.0 --> - <Limit name="measured-frame-rate-1920x1080" range="51-51" /> <!-- N=126 v98%=1.1 --> - </MediaCodec> <MediaCodec name="c2.android.avc.encoder" type="video/avc" update="true"> <Limit name="measured-frame-rate-320x240" range="256-256" /> <!-- N=128 v98%=1.4 --> <!-- measured 98%:82-115 med:87 SLOW --> @@ -38,13 +32,6 @@ <Limit name="measured-frame-rate-1280x720" range="62-62" /> <!-- N=128 v98%=1.0 --> <Limit name="measured-frame-rate-1920x1080" range="51-51" /> <!-- N=128 v98%=1.1 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.encoder.hevc" type="video/hevc" update="true"> - <Limit name="measured-frame-rate-320x240" range="371-371" /> <!-- N=128 v98%=1.2 --> - <Limit name="measured-frame-rate-720x480" range="117-118" /> <!-- N=126 v98%=1.0 --> - <Limit name="measured-frame-rate-1280x720" range="45-45" /> <!-- N=126 v98%=1.0 --> - <Limit name="measured-frame-rate-1920x1080" range="41-41" /> <!-- N=128 v98%=1.0 --> - <Limit name="measured-frame-rate-3840x2160" range="20-22" /> <!-- N=110 v98%=1.1 --> - </MediaCodec> <MediaCodec name="c2.android.hevc.encoder" type="video/hevc" update="true"> <Limit name="measured-frame-rate-320x240" range="49-49" /> <!-- N=128 v98%=1.0 --> </MediaCodec> @@ -58,12 +45,6 @@ <MediaCodec name="c2.android.mpeg4.encoder" type="video/mp4v-es" update="true"> <Limit name="measured-frame-rate-176x144" range="370-396" /> <!-- N=128 v98%=1.5 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.encoder.vp8" type="video/x-vnd.on2.vp8" update="true"> - <Limit name="measured-frame-rate-320x180" range="340-340" /> <!-- N=126 v98%=1.2 --> - <Limit name="measured-frame-rate-640x360" range="189-189" /> <!-- N=126 v98%=1.0 --> - <Limit name="measured-frame-rate-1280x720" range="51-51" /> <!-- N=122 v98%=1.0 --> - <Limit name="measured-frame-rate-1920x1080" range="45-45" /> <!-- N=126 v98%=1.0 --> - </MediaCodec> <MediaCodec name="c2.android.vp8.encoder" type="video/x-vnd.on2.vp8" update="true"> <Limit name="measured-frame-rate-320x180" range="275-275" /> <!-- N=128 v98%=1.2 --> <Limit name="measured-frame-rate-640x360" range="120-120" /> <!-- N=128 v98%=1.1 --> @@ -82,12 +63,6 @@ <Limit name="measured-frame-rate-176x144" range="736-736" /> <!-- N=104 v98%=1.2 --> <Limit name="measured-frame-rate-352x288" range="573-573" /> <!-- N=104 v98%=1.1 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.avc" type="video/avc" update="true"> - <Limit name="measured-frame-rate-320x240" range="488-493" /> <!-- N=132 v98%=1.5 --> - <Limit name="measured-frame-rate-720x480" range="375-392" /> <!-- N=132 v98%=1.2 --> - <Limit name="measured-frame-rate-1280x720" range="342-342" /> <!-- N=132 v98%=1.0 --> - <Limit name="measured-frame-rate-1920x1088" range="175-175" /> <!-- N=132 v98%=1.0 --> - </MediaCodec> <MediaCodec name="c2.android.avc.decoder" type="video/avc" update="true"> <Limit name="measured-frame-rate-320x240" range="367-380" /> <!-- N=132 v98%=1.1 --> <Limit name="measured-frame-rate-768x480" range="97-97" /> <!-- N=132 v98%=1.1 --> @@ -100,14 +75,6 @@ <Limit name="measured-frame-rate-1280x720" range="338-338" /> <!-- N=132 v98%=1.1 --> <Limit name="measured-frame-rate-1920x1088" range="175-175" /> <!-- N=132 v98%=1.0 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.hevc" type="video/hevc" update="true"> - <Limit name="measured-frame-rate-352x288" range="527-527" /> <!-- N=132 v98%=1.6 --> - <Limit name="measured-frame-rate-640x360" range="453-453" /> <!-- N=132 v98%=1.3 --> - <Limit name="measured-frame-rate-720x480" range="411-411" /> <!-- N=132 v98%=1.2 --> - <Limit name="measured-frame-rate-1280x720" range="362-367" /> <!-- N=132 v98%=1.1 --> - <Limit name="measured-frame-rate-1920x1080" range="209-210" /> <!-- N=132 v98%=1.0 --> - <Limit name="measured-frame-rate-3840x2160" range="23-23" /> <!-- N=132 v98%=1.1 --> - </MediaCodec> <MediaCodec name="c2.android.hevc.decoder" type="video/hevc" update="true"> <Limit name="measured-frame-rate-384x288" range="336-352" /> <!-- N=132 v98%=1.1 --> <Limit name="measured-frame-rate-640x360" range="201-210" /> <!-- N=132 v98%=1.1 --> @@ -126,12 +93,6 @@ <MediaCodec name="c2.android.mpeg4.decoder" type="video/mp4v-es" update="true"> <Limit name="measured-frame-rate-176x144" range="388-425" /> <!-- N=132 v93%=1.1 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.vp8" type="video/x-vnd.on2.vp8" update="true"> - <Limit name="measured-frame-rate-320x192" range="340-368" /> <!-- N=132 v98%=1.1 --> - <Limit name="measured-frame-rate-640x368" range="340-358" /> <!-- N=132 v95%=1.1 --> - <Limit name="measured-frame-rate-1280x720" range="340-342" /> <!-- N=132 v98%=1.1 --> - <Limit name="measured-frame-rate-1920x1088" range="199-199" /> <!-- N=132 v98%=1.0 --> - </MediaCodec> <MediaCodec name="c2.android.vp8.decoder" type="video/x-vnd.on2.vp8" update="true"> <Limit name="measured-frame-rate-320x180" range="562-562" /> <!-- N=132 v98%=1.1 --> <Limit name="measured-frame-rate-640x360" range="256-256" /> <!-- N=132 v98%=1.1 --> @@ -143,13 +104,6 @@ <Limit name="measured-frame-rate-1280x720" range="337-337" /> <!-- N=132 v98%=1.0 --> <Limit name="measured-frame-rate-1920x1088" range="199-199" /> <!-- N=132 v98%=1.0 --> </MediaCodec> - <MediaCodec name="OMX.qcom.video.decoder.vp9" type="video/x-vnd.on2.vp9" update="true"> - <Limit name="measured-frame-rate-320x184" range="346-377" /> <!-- N=132 v97%=1.1 --> - <Limit name="measured-frame-rate-640x360" range="350-375" /> <!-- N=132 v95%=1.1 --> - <Limit name="measured-frame-rate-1280x720" range="336-336" /> <!-- N=132 v98%=1.0 --> - <Limit name="measured-frame-rate-1920x1080" range="199-200" /> <!-- N=132 v98%=1.0 --> - <Limit name="measured-frame-rate-3840x2160" range="18-18" /> <!-- N=132 v98%=1.1 --> - </MediaCodec> <MediaCodec name="c2.android.vp9.decoder" type="video/x-vnd.on2.vp9" update="true"> <Limit name="measured-frame-rate-320x180" range="483-483" /> <!-- N=132 v98%=1.1 --> <Limit name="measured-frame-rate-640x360" range="143-144" /> <!-- N=132 v98%=1.1 --> diff --git a/overlay/packages/apps/Settings/res/values/bools.xml b/overlay/packages/apps/Settings/res/values/bools.xml index bb937893..bb937893 100755..100644 --- a/overlay/packages/apps/Settings/res/values/bools.xml +++ b/overlay/packages/apps/Settings/res/values/bools.xml diff --git a/overlay/packages/apps/Settings/res/values/config.xml b/overlay/packages/apps/Settings/res/values/config.xml index d8c7f6dc..d8c7f6dc 100755..100644 --- a/overlay/packages/apps/Settings/res/values/config.xml +++ b/overlay/packages/apps/Settings/res/values/config.xml diff --git a/sargo/extract-files.py b/sargo/extract-files.py new file mode 100755 index 00000000..6eaeaaa8 --- /dev/null +++ b/sargo/extract-files.py @@ -0,0 +1,96 @@ +#!/usr/bin/env -S PYTHONPATH=../../../../tools/extract-utils python3 +# +# SPDX-FileCopyrightText: 2024 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +from extract_utils.extract import extract_fns_user_type +from extract_utils.extract_pixel import ( + extract_pixel_factory_image, + extract_pixel_firmware, + pixel_factory_image_regex, + pixel_firmware_regex, +) +from extract_utils.fixups_blob import ( + blob_fixup, + blob_fixups_user_type, +) +from extract_utils.fixups_lib import ( + lib_fixups, + lib_fixups_user_type, +) +from extract_utils.main import ( + ExtractUtils, + ExtractUtilsModule, +) + +namespace_imports = [ + 'hardware/google/interfaces', + 'hardware/google/pixel', + 'hardware/qcom/sdm845', + 'hardware/qcom/wlan/legacy', +] + + +def lib_fixup_vendor_suffix(lib: str, partition: str, *args, **kwargs): + return f'{lib}_{partition}' if partition == 'vendor' else None + + +lib_fixups: lib_fixups_user_type = { + **lib_fixups, + ( + 'vendor.qti.hardware.tui_comm@1.0', + 'vendor.qti.imsrtpservice@3.0', + ): lib_fixup_vendor_suffix, +} + +blob_fixups: blob_fixups_user_type = { + 'product/etc/sysconfig/nexus.xml': blob_fixup() + .regex_replace('qulacomm', 'qualcomm'), + ( + 'vendor/bin/hw/android.hardware.identity@1.0-service.citadel', + 'vendor/lib64/android.hardware.identity@1.0-impl.nos.so', + ): blob_fixup() + .replace_needed('android.hardware.identity-V3-ndk_platform.so', 'android.hardware.identity-V3-ndk.so') + .replace_needed('android.hardware.keymaster-V3-ndk_platform.so', 'android.hardware.keymaster-V3-ndk.so'), + 'vendor/bin/hw/android.hardware.rebootescrow-service.citadel': blob_fixup() + .replace_needed('android.hardware.rebootescrow-V1-ndk_platform.so', 'android.hardware.rebootescrow-V1-ndk.so') + .replace_needed('libcrypto.so', 'libcrypto-v33.so') + .add_needed('libcrypto_shim.so'), + ( + 'vendor/bin/hw/citadeld', + 'vendor/lib64/libnos_citadeld_proxy.so', + ): blob_fixup() + .replace_needed('android.frameworks.stats-V1-ndk_platform.so', 'android.frameworks.stats-V1-ndk.so') + .replace_needed('pixelatoms-cpp.so', 'pixelatoms-cpp-legacy.so'), + 'vendor/bin/hw/vendor.qti.media.c2@1.0-service': blob_fixup() + .replace_needed('libavservices_minijail_vendor.so', 'libavservices_minijail.so'), + 'vendor/lib64/android.hardware.keymaster@4.1-impl.nos.so': blob_fixup() + .add_needed('libcrypto_shim.so'), + 'vendor/lib64/hw/com.qti.chi.override.so': blob_fixup() + .replace_needed('android.hardware.power-V1-ndk_platform.so', 'android.hardware.power-V1-ndk.so'), +} # fmt: skip + +extract_fns: extract_fns_user_type = { + pixel_factory_image_regex: extract_pixel_factory_image, + pixel_firmware_regex: extract_pixel_firmware, +} + +module = ExtractUtilsModule( + 'sargo', + 'google', + device_rel_path='device/google/bonito/sargo', + blob_fixups=blob_fixups, + lib_fixups=lib_fixups, + namespace_imports=namespace_imports, + add_firmware_proprietary_file=True, + extract_fns=extract_fns, +) + +module.add_proprietary_file('proprietary-files-carriersettings.txt') +module.add_proprietary_file('proprietary-files-radio.txt') +module.add_proprietary_file('proprietary-files-vendor.txt') + +if __name__ == '__main__': + utils = ExtractUtils.device(module) + utils.run() diff --git a/sargo/extract-files.sh b/sargo/extract-files.sh deleted file mode 100755 index 26826908..00000000 --- a/sargo/extract-files.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -DEVICE=sargo -VENDOR=google - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -# Default to sanitizing the vendor folder before extraction -CLEAN_VENDOR=true - -KANG= -SECTION= - -while [ "${#}" -gt 0 ]; do - case "${1}" in - -n | --no-cleanup ) - CLEAN_VENDOR=false - ;; - -k | --kang ) - KANG="--kang" - ;; - -s | --section ) - SECTION="${2}"; shift - CLEAN_VENDOR=false - ;; - * ) - SRC="${1}" - ;; - esac - shift -done - -if [ -z "${SRC}" ]; then - SRC="adb" -fi - -function blob_fixup() { - case "${1}" in - # Fix typo in qcrilmsgtunnel whitelist - product/etc/sysconfig/nexus.xml) - sed -i 's/qulacomm/qualcomm/' "${2}" - ;; - vendor/bin/hw/android.hardware.rebootescrow-service.citadel) - "${PATCHELF}" --replace-needed "libcrypto.so" "libcrypto-v33.so" "${2}" - ;; - esac -} - -function prepare_firmware() { - if [ "${SRC}" != "adb" ]; then - bash "${ANDROID_ROOT}"/lineage/scripts/pixel/prepare-firmware.sh "${DEVICE}" "${SRC}" - fi -} - -# Initialize the helper -setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}" - -extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-carriersettings.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-radio.txt" "${SRC}" "${KANG}" --section "${SECTION}" -extract "${MY_DIR}/proprietary-files-vendor.txt" "${SRC}" "${KANG}" --section "${SECTION}" - -if [ -z "${SECTION}" ]; then - extract_firmware "${MY_DIR}/proprietary-firmware.txt" "${SRC}" -fi - -"${MY_DIR}/setup-makefiles.sh" diff --git a/sargo/overlay/frameworks/base/core/res/res/values/config.xml b/sargo/overlay/frameworks/base/core/res/res/values/config.xml index 3f9a0f3f..3f9a0f3f 100755..100644 --- a/sargo/overlay/frameworks/base/core/res/res/values/config.xml +++ b/sargo/overlay/frameworks/base/core/res/res/values/config.xml diff --git a/sargo/proprietary-files-radio.txt b/sargo/proprietary-files-radio.txt index 4060d72b..6f1ed1ea 100644 --- a/sargo/proprietary-files-radio.txt +++ b/sargo/proprietary-files-radio.txt @@ -1,9 +1,9 @@ # CNE - from coral - TP1A.221005.002.B2 vendor/app/CneApp/CneApp.apk;REQUIRED=CneApp.libvndfwk_detect_jni.qti_symlink|8c05c492f3673a0e52d86dbd01c144d502fe51f5 vendor/bin/cnd|00c98e93cb936320d90af32a26078e6e97a8c5eb -vendor/etc/cne/Nexus/ATT/ATT_profiles.xml|a0039cb3a4c5a4ca1adf897904b61c91e32d06f7|33e568627fd3f94dc45bca1c01ad10e6d8fb5b52 -vendor/etc/cne/Nexus/ROW/ROW_profiles.xml|e3907ff71cbbe0f1073ec1bf0223d26c8282aa35|238e785e9674b27c4b2365958d127533d7293132 -vendor/etc/cne/Nexus/VZW/VZW_profiles.xml|0d35b3266ea656d8868ae8f5d7e938f4859e9b0a|0f63b632e3a3f114def7aeadaabd13851c8ceec5 +vendor/etc/cne/Nexus/ATT/ATT_profiles.xml|a0039cb3a4c5a4ca1adf897904b61c91e32d06f7 +vendor/etc/cne/Nexus/ROW/ROW_profiles.xml|e3907ff71cbbe0f1073ec1bf0223d26c8282aa35 +vendor/etc/cne/Nexus/VZW/VZW_profiles.xml|0d35b3266ea656d8868ae8f5d7e938f4859e9b0a vendor/etc/cne/mwqem.conf|c42ad47b34b511075e5dfb9047d32f881fe0c159 vendor/etc/cne/profileMwqem.xml|947917691684584b7e2ddf3588cd6f8e99f3804f vendor/etc/cne/wqeclient/ATT/ATT_profile1.xml|578f3f8f56059bfdbef926bcc68d01c15e06951f @@ -34,29 +34,7 @@ vendor/etc/cne/wqeclient/VZW/VZW_profile4.xml|ff91feb5060a6df07e3e4d9bc99ae58bcc vendor/etc/cne/wqeclient/VZW/VZW_profile5.xml|f76c894f3c6d5b6ed35113a088dc3174c900501b vendor/etc/cne/wqeclient/VZW/VZW_profile6.xml|14d136e7fcc682311757d3edc0b9d3eaeba11815 vendor/etc/init/cnd-generic.rc|5ec06d42d32b58bf5c73b77d485606c477d57324 -vendor/lib/libcne.so|d5455fe1491870c2469eb0d5479130aeacd361a7 -vendor/lib/libcneapiclient.so|9366beb21450011bc6c7fb95d985a26da41b7dbb -vendor/lib/libcneoplookup.so|46789f90f01a6a669a53647e189900712aebad0d -vendor/lib/libcneqmiutils.so|8b97ff1bb8ab0f2ded483d243d87289de33db72b -vendor/lib/libwms.so|d7a8df1240b4846a752195bad6b0c493fa42d13f -vendor/lib/libwqe.so|deec314722d1ebb4d847f2e7983eb92a201bada6 vendor/lib/libxml.so|b453fbd6fcaae2d13f51a8838cf975de8d562e20 -vendor/lib/vendor.qti.data.factory@2.0.so|cc920d710a51ec5638acec13bfcf3faff8cb8fdf -vendor/lib/vendor.qti.data.factory@2.1.so|32ecdbebbce71746a244c7a3e70decbab819ee87 -vendor/lib/vendor.qti.data.factory@2.2.so|bf46ecfff10609dc22aed0da0414fc8d3fe230bf -vendor/lib/vendor.qti.data.factory@2.3.so|66659e5ff8ffa4f0ccdc64a588e1fee036d5a663 -vendor/lib/vendor.qti.data.mwqem@1.0.so|a4953eaf4fd719e8eb7b44e9042976cbedc70ee6 -vendor/lib/vendor.qti.data.slm@1.0.so|b3f16e4d8a1ba347f1ff6033228be2c49de55953 -vendor/lib/vendor.qti.hardware.data.cne.internal.api@1.0.so|18647099b9e71aabbbb21636540cabfa1fc9426d -vendor/lib/vendor.qti.hardware.data.cne.internal.constants@1.0.so|fedc651cf3ad3c4bc084d359404d7113e6866336 -vendor/lib/vendor.qti.hardware.data.cne.internal.server@1.0.so|4c310a92f8ae1dbec77ad5d000c31671a6dd6c37 -vendor/lib/vendor.qti.hardware.data.connection@1.0.so|f908c9a9b0de8696fb9c6f9dea1a49bbe444114c -vendor/lib/vendor.qti.hardware.data.dynamicdds@1.0.so|a30ac71448d8712d8c69b884a8a9a0dea17d44ff -vendor/lib/vendor.qti.hardware.data.latency@1.0.so|b6b66d2201a807ca15d90efc3404e7cd4d4a76a1 -vendor/lib/vendor.qti.hardware.data.lce@1.0.so|1227a2b1ac3c8adca5ca79eeb46f78af34043614 -vendor/lib/vendor.qti.hardware.data.qmi@1.0.so|4d6f1bea9ae5e97f7e456fc7946f913917dbd66c -vendor/lib/vendor.qti.hardware.mwqemadapter@1.0.so|99048bc4f2aef592096d23d6098def735c3a5ca4 -vendor/lib/vendor.qti.hardware.slmadapter@1.0.so|e75b017e2e1f75821496bfec235eb400d6ecc3cc vendor/lib64/libcne.so|1eb5ae1fdd51f05e25d38afd8a793d8adb0ed1cf vendor/lib64/libcneapiclient.so|a3bd1e0e85f0684fe6c999f5dc17ffdbc14e8f24 vendor/lib64/libcneoplookup.so|573229322afd00b1bfb553f0eef72ce4e2c99ff4 @@ -108,38 +86,6 @@ vendor/etc/init/imsdatadaemon.rc|68e9a06b92817be8c59c3e2b00d95f5a7fa97a1b vendor/etc/init/imsqmidaemon.rc|b0b9f70b5c56c89769255ea03d8e3f5050c08657 vendor/etc/init/imsrcsd.rc|a12f5a8efbfccf9a8ec47a39367382346eb8dc35 vendor/etc/seccomp_policy/imsrtp.policy|fb5f1f63dbc3a002ac0f203cce3b8d3434752fa2 -vendor/lib/com.qualcomm.qti.imscmservice@1.0.so|0395ecc6a78444be3cc585845f91cbcda55875f8 -vendor/lib/com.qualcomm.qti.imscmservice@2.0.so|b9dc935adf82410134d63406c4574567902b022e -vendor/lib/com.qualcomm.qti.imscmservice@2.1.so|9dbeb7a9a115a1b91bb0f954070b2e2353076d72 -vendor/lib/com.qualcomm.qti.imscmservice@2.2.so|dce9d40f3bb4ced209019348cdde92a7d6f76519 -vendor/lib/com.qualcomm.qti.uceservice@2.0.so|7b7914430aece9acd88d3b8fb83d7838cf5d914b -vendor/lib/com.qualcomm.qti.uceservice@2.1.so|b29e2c7292e020863b09991e88368b1aa375b1dc -vendor/lib/com.qualcomm.qti.uceservice@2.2.so|870f9b16df935aab7c4a9b9c6194258f75c331c1 -vendor/lib/com.qualcomm.qti.uceservice@2.3.so|19e48d852e08785d6468fdae021d53da53977d3c -vendor/lib/lib-imscmservice.so|38f5e8d9128c5a0eb425c19f867c324704563e30 -vendor/lib/lib-imsdpl.so|03a7b299db808ab81347cd7566b7ea9cd63f8d6a -vendor/lib/lib-imsqimf.so|d4e1d33a87cc7b745642ac4b4fe36328fbdbe7aa -vendor/lib/lib-imsrcs-v2.so|571999f88559ec6e75c1f6d0e18fcc0b28090143 -vendor/lib/lib-imsrcsbaseimpl.so|c98f6838658ca8bcfecf9a77dbf36ebed0d6f2a4 -vendor/lib/lib-imsvtcore.so|108575c6ad012c1e38a4100051041f920e883525 -vendor/lib/lib-imsxml.so|82219d37c0c7c77dbbad743ec15b992663c02b2b -vendor/lib/lib-rcsconfig.so|13783a699f7e192e89b1b40fa5b1bdc19958ad0c -vendor/lib/lib-rtpcommon.so|83d1c3a2d0a9a096742f0ae55ef77c18359e90f0 -vendor/lib/lib-rtpcore.so|59c05d07ab9fea55fb535a05ed5ca0f1bf429c7d -vendor/lib/lib-rtpsl.so|de204d26ebfe21f640769dee9da74ea300130464 -vendor/lib/lib-siputility.so|0cd56a4a2c62c36b540ca644fe5bf006864a9b1a -vendor/lib/lib-uceservice.so|93573179e5e62d0091eeb241c5891368145b35a1 -vendor/lib/librcc.so|2a98fdb6200b6d322e6aab0db07bb2c3874e2b7f -vendor/lib/vendor.qti.ims.callcapability@1.0.so|6a2b8dcbb6c565c226853d322fe9b81f0dc5e8e4 -vendor/lib/vendor.qti.ims.callinfo@1.0.so|b77c30854532562d1368c02d23538edbe4a13a55 -vendor/lib/vendor.qti.ims.factory@1.0.so|6d196d5861b2a8b2abdba3df6dd7d2d3591dc5e6 -vendor/lib/vendor.qti.ims.factory@1.1.so|bc5ff74b8cb1ff76706b12072d29bb1a10cbcae5 -vendor/lib/vendor.qti.ims.rcsconfig@1.0.so|b2072e058696c248f59184ef4e2290d7d4b0d7e2 -vendor/lib/vendor.qti.ims.rcsconfig@1.1.so|c98e14a382990a88f0f946ca0c1340b83f7a2431 -vendor/lib/vendor.qti.ims.rcsconfig@2.0.so|1f5916daa9201c9ca6ae51452ebe9e28ae7e4576 -vendor/lib/vendor.qti.ims.rcsconfig@2.1.so|2fd70cf484b42c607b74175c3d9b9f4d93d81f10 -vendor/lib/vendor.qti.imsrtpservice@3.0-service-Impl.so|8d91a21a4fb1ed8323159af610fda78a752a3ed4 -vendor/lib/vendor.qti.imsrtpservice@3.0.so|ac0a1374a03cd01875ae7fac9eb26461349110f6 vendor/lib64/com.qualcomm.qti.imscmservice@1.0.so|c81670607cd83e49ef7799c33ee8d6671ddc1d2d vendor/lib64/com.qualcomm.qti.imscmservice@2.0.so|5cc27542fa649723d0ade59a09f645c7d24b8218 vendor/lib64/com.qualcomm.qti.imscmservice@2.1.so|6e0037052bd4c8f607106c7b6ce7397fd2ef3430 @@ -184,7 +130,7 @@ vendor/lib64/vendor.qti.ims.rcsconfig@1.1.so|6b0a93fea15929f446c0819fc5411268b09 vendor/lib64/vendor.qti.ims.rcsconfig@2.0.so|edde36e3eaf91a7c26e378dc17c312b99e2cc65b vendor/lib64/vendor.qti.ims.rcsconfig@2.1.so|dfe17b80d07b431615c35cbd3403f0c0c9455c6f vendor/lib64/vendor.qti.imsrtpservice@3.0-service-Impl.so|29c39c454cd7c11368db5c480d151e0487f4e0ea -vendor/lib64/vendor.qti.imsrtpservice@3.0.so|91cc47edc34172234d56156e7e69fa5b4871dd21 +vendor/lib64/vendor.qti.imsrtpservice@3.0.so;MODULE_SUFFIX=_vendor|91cc47edc34172234d56156e7e69fa5b4871dd21 # QMI - from coral - TP1A.221005.002.B2 vendor/bin/irsc_util|f194faebe803843eb855a72e172367e02dc49ecd diff --git a/sargo/proprietary-files-vendor.txt b/sargo/proprietary-files-vendor.txt index 6aaf1a4c..8e25830b 100644 --- a/sargo/proprietary-files-vendor.txt +++ b/sargo/proprietary-files-vendor.txt @@ -1,4 +1,5 @@ # All blobs are extracted from Google factory images for each new ASB + vendor/app/TimeService/TimeService.apk vendor/bin/adsprpcd vendor/bin/cdsprpcd @@ -351,14 +352,6 @@ vendor/firmware/wlanmdsp.mbn vendor/framework/com.google.android.camera.experimental2018.jar vendor/lib/android.hardware.sensors@2.0-impl.so vendor/lib/btaudio_offload_if.so -vendor/lib/camera/com.qti.sensormodule.metric_imx363.bin -vendor/lib/camera/com.qti.sensormodule.primax_imx355.bin -vendor/lib/camera/com.qti.sensormodule.primax_imx355_s.bin -vendor/lib/camera/com.qti.tuned.default.bin -vendor/lib/camera/fdconfigpreview.bin -vendor/lib/camera/fdconfigpreviewlite.bin -vendor/lib/camera/fdconfigvideo.bin -vendor/lib/camera/fdconfigvideolite.bin vendor/lib/egl/eglSubDriverAndroid.so vendor/lib/egl/libEGL_adreno.so;SYMLINK=vendor/lib/libEGL_adreno.so vendor/lib/egl/libGLESv1_CM_adreno.so @@ -371,28 +364,16 @@ vendor/lib/hw/android.hardware.gatekeeper@1.0-impl-qti.so vendor/lib/hw/sound_trigger.primary.sdm710.so vendor/lib/hw/vendor.qti.hardware.qteeconnector@1.0-impl.so vendor/lib/hw/vulkan.adreno.so -vendor/lib/lib-dplmedia.so -vendor/lib/libAlacSwDec.so -vendor/lib/libApeSwDec.so vendor/lib/libC2D2.so vendor/lib/libCB.so -vendor/lib/libFlacSwDec.so vendor/lib/libGPQTEEC_vendor.so vendor/lib/libGPTEE_vendor.so vendor/lib/libGPreqcancel.so vendor/lib/libGPreqcancel_svc.so --vendor/lib/libMpeg4SwEncoder.so -vendor/lib/libOmxAlacDecSw.so -vendor/lib/libOmxAmrwbplusDec.so -vendor/lib/libOmxApeDecSw.so -vendor/lib/libOmxDsdDec.so -vendor/lib/libOmxEvrcDec.so -vendor/lib/libOmxQcelp13Dec.so vendor/lib/libOpenCL-pixel.so vendor/lib/libOpenCL.so vendor/lib/libQSEEComAPI.so vendor/lib/libQTEEConnector_vendor.so -vendor/lib/libRSDriver_adreno.so vendor/lib/libSecureUILib.so vendor/lib/libStDrvInt.so vendor/lib/libSubSystemShutdown.so @@ -406,14 +387,14 @@ vendor/lib/libadm.so vendor/lib/libadpcmdec.so vendor/lib/libadreno_utils.so vendor/lib/libadsp_default_listener.so --vendor/lib/libadsprpc.so +vendor/lib/libadsprpc.so vendor/lib/libash.so vendor/lib/libaudcal.so vendor/lib/libaudioalsa.so vendor/lib/libbase64.so vendor/lib/libbccQTI.so vendor/lib/libbluetooth_audio_session_qti.so --vendor/lib/libbtnv.so +vendor/lib/libbtnv.so vendor/lib/libc2d30_bltlib.so vendor/lib/libcamxfdalgov7.so vendor/lib/libcamxfdengine.so @@ -429,7 +410,6 @@ vendor/lib/libdisp-aba.so vendor/lib/libdisplayqos.so vendor/lib/libdrmfs.so vendor/lib/libdrmtime.so -vendor/lib/libdsd2pcm.so vendor/lib/libeaselmanager_client.so vendor/lib/libelmyra-protos.so vendor/lib/libfastcrc.so @@ -470,10 +450,7 @@ vendor/lib/libqisl.so vendor/lib/libqseed3.so vendor/lib/libqti-utils.so vendor/lib/libqtikeymaster4.so -vendor/lib/libquipc_os_api.so vendor/lib/librpmb.so -vendor/lib/librs_adreno.so -vendor/lib/librs_adreno_sha1.so vendor/lib/libsdedrm.so vendor/lib/libsdm-color.so vendor/lib/libsdm-diag.so @@ -535,7 +512,7 @@ vendor/lib/vendor.qti.hardware.qteeconnector@1.0.so vendor/lib/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib/vendor.qti.hardware.soter@1.0.so -vendor/lib/vendor.qti.hardware.tui_comm@1.0.so +vendor/lib/vendor.qti.hardware.tui_comm@1.0.so;MODULE_SUFFIX=_vendor vendor/lib/vendor.qti.hardware.wigig.netperftuner@1.0.so vendor/lib/vendor.qti.power.pasrmanager@1.0.so vendor/lib/vendor.qti.voiceprint@1.0.so @@ -603,11 +580,11 @@ vendor/lib64/camera/fdconfigvideo.bin vendor/lib64/camera/fdconfigvideolite.bin vendor/lib64/com.fingerprints.extension@1.0.so vendor/lib64/egl/eglSubDriverAndroid.so -vendor/lib64/egl/libEGL_adreno.so;SYMLINK=vendor/lib/libEGL_adreno.so +vendor/lib64/egl/libEGL_adreno.so;SYMLINK=vendor/lib64/libEGL_adreno.so vendor/lib64/egl/libGLESv1_CM_adreno.so -vendor/lib64/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib/libGLESv2_adreno.so +vendor/lib64/egl/libGLESv2_adreno.so;SYMLINK=vendor/lib64/libGLESv2_adreno.so vendor/lib64/egl/libQTapGLES.so -vendor/lib64/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib/libq3dtools_adreno.so +vendor/lib64/egl/libq3dtools_adreno.so;SYMLINK=vendor/lib64/libq3dtools_adreno.so vendor/lib64/egl/libq3dtools_esx.so vendor/lib64/hw/android.hardware.bluetooth@1.0-impl-qti.so vendor/lib64/hw/android.hardware.gatekeeper@1.0-impl-qti.so @@ -616,27 +593,16 @@ vendor/lib64/hw/com.qti.chi.override.so vendor/lib64/hw/sound_trigger.primary.sdm710.so vendor/lib64/hw/vendor.qti.hardware.qteeconnector@1.0-impl.so vendor/lib64/hw/vulkan.adreno.so -vendor/lib64/lib-dplmedia.so -vendor/lib64/libAlacSwDec.so -vendor/lib64/libApeSwDec.so vendor/lib64/libC2D2.so vendor/lib64/libCB.so -vendor/lib64/libFlacSwDec.so vendor/lib64/libGPQTEEC_vendor.so vendor/lib64/libGPTEE_vendor.so vendor/lib64/libGPreqcancel.so vendor/lib64/libGPreqcancel_svc.so --vendor/lib64/libMpeg4SwEncoder.so -vendor/lib64/libOmxAlacDecSw.so -vendor/lib64/libOmxAmrwbplusDec.so -vendor/lib64/libOmxApeDecSw.so -vendor/lib64/libOmxEvrcDec.so -vendor/lib64/libOmxQcelp13Dec.so vendor/lib64/libOpenCL-pixel.so vendor/lib64/libOpenCL.so vendor/lib64/libQSEEComAPI.so vendor/lib64/libQTEEConnector_vendor.so -vendor/lib64/libRSDriver_adreno.so vendor/lib64/libSecureUILib.so vendor/lib64/libStDrvInt.so vendor/lib64/libSubSystemShutdown.so @@ -648,14 +614,14 @@ vendor/lib64/libacdbrtac.so vendor/lib64/libadiertac.so vendor/lib64/libadreno_utils.so vendor/lib64/libadsp_default_listener.so --vendor/lib64/libadsprpc.so +vendor/lib64/libadsprpc.so vendor/lib64/libash.so vendor/lib64/libaudcal.so vendor/lib64/libaudioalsa.so vendor/lib64/libbase64.so vendor/lib64/libbccQTI.so vendor/lib64/libbluetooth_audio_session_qti.so --vendor/lib64/libbtnv.so +vendor/lib64/libbtnv.so vendor/lib64/libc2d30_bltlib.so vendor/lib64/libcamxfdalgov7.so vendor/lib64/libcamxfdengine.so @@ -715,7 +681,6 @@ vendor/lib64/libnos_transport.so vendor/lib64/libnosprotos.so vendor/lib64/liboemcrypto.so vendor/lib64/libperipheral_client.so -vendor/lib64/libpixelstats.so vendor/lib64/libpower_anomaly_data.so vendor/lib64/libqcbor.so vendor/lib64/libqcodec2.so @@ -723,10 +688,7 @@ vendor/lib64/libqisl.so vendor/lib64/libqseed3.so vendor/lib64/libqti-utils.so vendor/lib64/libqtikeymaster4.so -vendor/lib64/libquipc_os_api.so vendor/lib64/librpmb.so -vendor/lib64/librs_adreno.so -vendor/lib64/librs_adreno_sha1.so vendor/lib64/libsdedrm.so vendor/lib64/libsdm-color.so vendor/lib64/libsdm-diag.so @@ -761,7 +723,7 @@ vendor/lib64/nos_app_avb.so vendor/lib64/nos_app_identity.so vendor/lib64/nos_app_keymaster.so vendor/lib64/nos_app_weaver.so -vendor/lib64/pixelatoms-cpp.so +vendor/lib64/pixelatoms-cpp.so:vendor/lib64/pixelatoms-cpp-legacy.so;FIX_SONAME vendor/lib64/sensors.ssc.so vendor/lib64/unnhal-acc-adreno.so vendor/lib64/unnhal-acc-common.so @@ -780,7 +742,7 @@ vendor/lib64/vendor.qti.hardware.qteeconnector@1.0.so vendor/lib64/vendor.qti.hardware.scve.objecttracker@1.0.so vendor/lib64/vendor.qti.hardware.scve.panorama@1.0.so vendor/lib64/vendor.qti.hardware.soter@1.0.so -vendor/lib64/vendor.qti.hardware.tui_comm@1.0.so +vendor/lib64/vendor.qti.hardware.tui_comm@1.0.so;MODULE_SUFFIX=_vendor vendor/lib64/vendor.qti.hardware.wigig.netperftuner@1.0.so vendor/lib64/vendor.qti.power.pasrmanager@1.0.so vendor/lib64/vendor.qti.voiceprint@1.0.so diff --git a/sargo/proprietary-files.txt b/sargo/proprietary-files.txt index 144366e3..55b04b0e 100644 --- a/sargo/proprietary-files.txt +++ b/sargo/proprietary-files.txt @@ -114,12 +114,3 @@ system_ext/etc/permissions/vzw_mvs_permissions.xml system_ext/priv-app/MyVerizonServices/MyVerizonServices.apk;PRESIGNED system_ext/priv-app/OBDM_Permissions/OBDM_Permissions.apk;PRESIGNED system_ext/priv-app/obdm_stub/obdm_stub.apk;PRESIGNED - -# vendor partition - -# Wi-Fi service -vendor/bin/hw/vendor.google.wifi_ext-service-vendor|2f00a17b75612cbf8fb3685fe0d183148a70dd03 -vendor/etc/init/vendor.google.wifi_ext-service.rc|8565ca57da131819441d6fb87abfcae134ed2ef9 -vendor/etc/vintf/manifest/manifest_wifi_ext_aidl.xml|f273a6ab68268f73935c36bdecea0aad97cbe70f -vendor/lib64/google_wifi_firmware_config_info_cc_proto.so|b290b5ba92c6b505d2314e75d8c7269a1cc03942 -vendor/lib64/vendor.google.wifi_ext-V3-ndk.so|9fcddf2e1eab7978f6c57270170b3f4a9aea04b8 diff --git a/sargo/regen-carriersettings.sh b/sargo/regen-carriersettings.sh deleted file mode 100755 index df7335bc..00000000 --- a/sargo/regen-carriersettings.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2019-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -_input_image="${1}" -_output_file="${2}" - -if [ -z "${_input_image}" ]; then - echo "No input image supplied" - exit 1 -fi - -if [ -z "${_output_file}" ]; then - echo "No output filename supplied" - exit 1 -fi - -CARRIER_SKIP_FILES=() - -# Initialize the helper -setup_vendor_deps "${ANDROID_ROOT}" - -generate_prop_list_from_image "${_input_image}" "${_output_file}" CARRIER_SKIP_FILES carriersettings - -function header() { - sed -i "1s/^/${1}\n/" "${_output_file}" -} - -header "# All blobs are extracted from Google factory images for each new ASB" diff --git a/sargo/regen-vendor.sh b/sargo/regen-vendor.sh deleted file mode 100755 index d88b67ab..00000000 --- a/sargo/regen-vendor.sh +++ /dev/null @@ -1,1395 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2019-2021 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -_input_image="${1}" -_output_file="${2}" - -if [ -z "${_input_image}" ]; then - echo "No input image supplied" - exit 1 -fi - -if [ -z "${_output_file}" ]; then - echo "No output filename supplied" - exit 1 -fi - -VENDOR_SKIP_FILES=( - # Standard build output with vendor image build enabled - "apex/com.android.vibrator.drv2624.apex" - "bin/[" - "bin/acpi" - "bin/applypatch" - "bin/awk" - "bin/base64" - "bin/basename" - "bin/blockdev" - "bin/boringssl_self_test32" - "bin/boringssl_self_test64" - "bin/cal" - "bin/cat" - "bin/chattr" - "bin/chcon" - "bin/checkpoint_gc" - "bin/chgrp" - "bin/chmod" - "bin/chown" - "bin/chroot" - "bin/chrt" - "bin/cksum" - "bin/clear" - "bin/cmp" - "bin/comm" - "bin/cp" - "bin/cpio" - "bin/cut" - "bin/date" - "bin/dd" - "bin/devmem" - "bin/df" - "bin/diff" - "bin/dirname" - "bin/dmesg" - "bin/dos2unix" - "bin/du" - "bin/dumpsys" - "bin/echo" - "bin/egrep" - "bin/env" - "bin/expand" - "bin/expr" - "bin/fallocate" - "bin/false" - "bin/fgrep" - "bin/file" - "bin/find" - "bin/flock" - "bin/fmt" - "bin/free" - "bin/fsync" - "bin/getconf" - "bin/getenforce" - "bin/getevent" - "bin/getprop" - "bin/grep" - "bin/groups" - "bin/gunzip" - "bin/gzip" - "bin/head" - "bin/hostname" - "bin/hw/android.hardware.atrace@1.0-service.pixel" - "bin/hw/android.hardware.audio.service" - "bin/hw/android.hardware.boot@1.0-service" - "bin/hw/android.hardware.camera.provider@2.4-service_64" - "bin/hw/android.hardware.cas@1.2-service" - "bin/hw/android.hardware.configstore@1.1-service" - "bin/hw/android.hardware.contexthub@1.2-service.generic" - "bin/hw/android.hardware.drm@1.0-service" - "bin/hw/android.hardware.drm@1.4-service.clearkey" - "bin/hw/android.hardware.dumpstate@1.1-service.bonito" - "bin/hw/android.hardware.gnss@1.1-service-qti" - "bin/hw/android.hardware.graphics.composer@2.2-service" - "bin/hw/android.hardware.health.storage@1.0-service" - "bin/hw/android.hardware.health@2.0-service.bonito" - "bin/hw/android.hardware.light@2.0-service" - "bin/hw/android.hardware.media.omx@1.0-service" - "bin/hw/android.hardware.memtrack@1.0-service" - "bin/hw/android.hardware.nfc@1.2-service" - "bin/hw/android.hardware.power-service.pixel-libperfmgr" - "bin/hw/android.hardware.power.stats@1.0-service.pixel" - "bin/hw/android.hardware.secure_element@1.1-service-disabled" - "bin/hw/android.hardware.thermal@2.0-service.pixel" - "bin/hw/android.hardware.usb@1.3-service.bonito" - "bin/hw/android.hardware.wifi@1.0-service" - "bin/hw/hostapd" - "bin/hw/wait_for_strongbox" - "bin/hw/wpa_supplicant" - "bin/hwclock" - "bin/i2cdetect" - "bin/i2cdump" - "bin/i2cget" - "bin/i2cset" - "bin/iconv" - "bin/id" - "bin/ifconfig" - "bin/init.edge_sense.sh" - "bin/init.fingerprint.sh" - "bin/init.firstboot.sh" - "bin/init.insmod.sh" - "bin/init.qcom.devstart.sh" - "bin/init.qcom.ipastart.sh" - "bin/init.qcom.wlan.sh" - "bin/init.radio.sh" - "bin/init.ramoops.sh" - "bin/inotifyd" - "bin/insmod" - "bin/install" - "bin/ionice" - "bin/iorenice" - "bin/ipacm" - "bin/kill" - "bin/killall" - "bin/ln" - "bin/load_policy" - "bin/log" - "bin/logname" - "bin/logwrapper" - "bin/losetup" - "bin/ls" - "bin/lsattr" - "bin/lsmod" - "bin/lsof" - "bin/lspci" - "bin/lsusb" - "bin/md5sum" - "bin/microcom" - "bin/misc_writer" - "bin/mkdir" - "bin/mkfifo" - "bin/mknod" - "bin/mkswap" - "bin/mktemp" - "bin/modinfo" - "bin/modprobe" - "bin/more" - "bin/mount" - "bin/mountpoint" - "bin/mv" - "bin/nc" - "bin/netcat" - "bin/netstat" - "bin/nice" - "bin/nl" - "bin/nohup" - "bin/nproc" - "bin/nsenter" - "bin/od" - "bin/paste" - "bin/patch" - "bin/pgrep" - "bin/pidof" - "bin/pixelstats-vendor" - "bin/pkill" - "bin/pmap" - "bin/printenv" - "bin/printf" - "bin/ps" - "bin/pwd" - "bin/readelf" - "bin/readlink" - "bin/realpath" - "bin/renice" - "bin/restorecon" - "bin/rm" - "bin/rmdir" - "bin/rmmod" - "bin/rtcwake" - "bin/runcon" - "bin/sed" - "bin/sendevent" - "bin/seq" - "bin/setenforce" - "bin/setprop" - "bin/setsid" - "bin/sh" - "bin/sha1sum" - "bin/sha224sum" - "bin/sha256sum" - "bin/sha384sum" - "bin/sha512sum" - "bin/sleep" - "bin/sort" - "bin/split" - "bin/start" - "bin/stat" - "bin/stop" - "bin/strings" - "bin/stty" - "bin/swapoff" - "bin/swapon" - "bin/sync" - "bin/sysctl" - "bin/tac" - "bin/tail" - "bin/tar" - "bin/taskset" - "bin/tee" - "bin/test" - "bin/thermal_symlinks" - "bin/time" - "bin/timeout" - "bin/toolbox" - "bin/top" - "bin/touch" - "bin/toybox_vendor" - "bin/tr" - "bin/true" - "bin/truncate" - "bin/tty" - "bin/ulimit" - "bin/umount" - "bin/uname" - "bin/uniq" - "bin/unix2dos" - "bin/unlink" - "bin/unshare" - "bin/uptime" - "bin/usleep" - "bin/uudecode" - "bin/uuencode" - "bin/uuidgen" - "bin/vmstat" - "bin/vndservice" - "bin/vndservicemanager" - "bin/watch" - "bin/wc" - "bin/which" - "bin/whoami" - "bin/xargs" - "bin/xxd" - "bin/yes" - "bin/zcat" - "build.prop" - "etc/IPACM_cfg.xml" - "etc/NOTICE.xml.gz" - "etc/a2dp_audio_policy_configuration_7_0.xml" - "etc/a2dp_in_audio_policy_configuration_7_0.xml" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-b4dev-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4-snd-card/Speaker_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Bluetooth_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/General_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Global_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Handset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Hdmi_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Headset_cal.acdb" - "etc/acdbdata/OEM/sdm670-intcodec-s4dev-snd-card/Speaker_cal.acdb" - "etc/acdbdata/adsp_avs_config.acdb" - "etc/audio_effects.xml" - "etc/audio_platform_info_intcodec_b4.xml" - "etc/audio_platform_info_intcodec_b4dev.xml" - "etc/audio_platform_info_intcodec_s4.xml" - "etc/audio_platform_info_intcodec_s4dev.xml" - "etc/audio_policy_configuration.xml" - "etc/audio_policy_configuration_a2dp_offload_disabled.xml" - "etc/audio_policy_configuration_bluetooth_legacy_hal.xml" - "etc/audio_policy_volumes.xml" - "etc/bluetooth_audio_policy_configuration_7_0.xml" - "etc/bluetooth_hearing_aid_audio_policy_configuration.xml" - "etc/default-permissions/default-permissions.xml" - "etc/default_volume_tables.xml" - "etc/fs_config_dirs" - "etc/fs_config_files" - "etc/fstab.sdm670" - "etc/gps.conf" - "etc/graphite_ipc_platform_info.xml" - "etc/group" - "etc/hearing_aid_audio_policy_configuration_7_0.xml" - "etc/init.insmod.cfg" - "etc/init/android.hardware.atrace@1.0-service.pixel.rc" - "etc/init/android.hardware.audio.service.rc" - "etc/init/android.hardware.boot@1.0-service.rc" - "etc/init/android.hardware.camera.provider@2.4-service_64.rc" - "etc/init/android.hardware.cas@1.2-service.rc" - "etc/init/android.hardware.configstore@1.1-service.rc" - "etc/init/android.hardware.contexthub@1.2-service-generic.rc" - "etc/init/android.hardware.drm@1.0-service.rc" - "etc/init/android.hardware.drm@1.4-service.clearkey.rc" - "etc/init/android.hardware.dumpstate@1.1-service.bonito.rc" - "etc/init/android.hardware.gnss@1.1-service-qti.rc" - "etc/init/android.hardware.graphics.composer@2.2-service.rc" - "etc/init/android.hardware.health.storage@1.0-service.rc" - "etc/init/android.hardware.health@2.0-service.bonito.rc" - "etc/init/android.hardware.light@2.0-service.rc" - "etc/init/android.hardware.media.omx@1.0-service.rc" - "etc/init/android.hardware.memtrack@1.0-service.rc" - "etc/init/android.hardware.nfc@1.2-service.rc" - "etc/init/android.hardware.power-service.pixel-libperfmgr.rc" - "etc/init/android.hardware.power.stats@1.0-service.pixel.rc" - "etc/init/android.hardware.secure_element@1.1-service-disabled.rc" - "etc/init/android.hardware.thermal@2.0-service.pixel.rc" - "etc/init/android.hardware.usb@1.3-service.bonito.rc" - "etc/init/android.hardware.wifi.supplicant-service.rc" - "etc/init/android.hardware.wifi@1.0-service.rc" - "etc/init/boringssl_self_test.rc" - "etc/init/com.android.vibrator.drv2624.enable.rc" - "etc/init/hostapd.android.rc" - "etc/init/hw/init.bonito.rc" - "etc/init/hw/init.sargo.rc" - "etc/init/hw/init.sdm670.diag.rc" - "etc/init/hw/init.sdm670.logging.rc" - "etc/init/hw/init.sdm670.mpssrfs.rc" - "etc/init/hw/init.sdm670.power.rc" - "etc/init/hw/init.sdm670.rc" - "etc/init/hw/init.sdm670.usb.rc" - "etc/init/pixel-mm-legacy.rc" - "etc/init/pixel-thermal-symlinks.rc" - "etc/init/pixelstats-vendor.bonito.rc" - "etc/init/vendor_flash_recovery.rc" - "etc/init/vndservicemanager.rc" - "etc/libese-nxp.conf" - "etc/libnfc-nxp-G020E.conf" - "etc/libnfc-nxp-G020F.conf" - "etc/libnfc-nxp-G020G.conf" - "etc/libnfc-nxp-G020H.conf" - "etc/libnfc-nxp.conf" - "etc/lowi.conf" - "etc/media_codecs.xml" - "etc/media_codecs_google_telephony.xml" - "etc/media_codecs_google_video.xml" - "etc/media_codecs_omx.xml" - "etc/media_codecs_performance.xml" - "etc/media_profiles_V1_0.xml" - "etc/mixer_paths_intcodec_b4.xml" - "etc/mixer_paths_intcodec_b4dev.xml" - "etc/mixer_paths_intcodec_s4.xml" - "etc/mixer_paths_intcodec_s4dev.xml" - "etc/mkshrc" - "etc/passwd" - "etc/permissions/android.hardware.audio.low_latency.xml" - "etc/permissions/android.hardware.audio.pro.xml" - "etc/permissions/android.hardware.bluetooth.xml" - "etc/permissions/android.hardware.bluetooth_le.xml" - "etc/permissions/android.hardware.camera.flash-autofocus.xml" - "etc/permissions/android.hardware.camera.front.xml" - "etc/permissions/android.hardware.camera.full.xml" - "etc/permissions/android.hardware.camera.raw.xml" - "etc/permissions/android.hardware.context_hub.xml" - "etc/permissions/android.hardware.device_unique_attestation.xml" - "etc/permissions/android.hardware.fingerprint.xml" - "etc/permissions/android.hardware.location.gps.xml" - "etc/permissions/android.hardware.nfc.hce.xml" - "etc/permissions/android.hardware.nfc.hcef.xml" - "etc/permissions/android.hardware.nfc.xml" - "etc/permissions/android.hardware.opengles.aep.xml" - "etc/permissions/android.hardware.reboot_escrow.xml" - "etc/permissions/android.hardware.se.omapi.uicc.xml" - "etc/permissions/android.hardware.sensor.accelerometer.xml" - "etc/permissions/android.hardware.sensor.assist.xml" - "etc/permissions/android.hardware.sensor.barometer.xml" - "etc/permissions/android.hardware.sensor.compass.xml" - "etc/permissions/android.hardware.sensor.gyroscope.xml" - "etc/permissions/android.hardware.sensor.hifi_sensors.xml" - "etc/permissions/android.hardware.sensor.light.xml" - "etc/permissions/android.hardware.sensor.proximity.xml" - "etc/permissions/android.hardware.sensor.stepcounter.xml" - "etc/permissions/android.hardware.sensor.stepdetector.xml" - "etc/permissions/android.hardware.strongbox_keystore.xml" - "etc/permissions/android.hardware.telephony.carrierlock.xml" - "etc/permissions/android.hardware.telephony.cdma.xml" - "etc/permissions/android.hardware.telephony.gsm.xml" - "etc/permissions/android.hardware.telephony.ims.xml" - "etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml" - "etc/permissions/android.hardware.usb.accessory.xml" - "etc/permissions/android.hardware.usb.host.xml" - "etc/permissions/android.hardware.vulkan.compute.xml" - "etc/permissions/android.hardware.vulkan.level.xml" - "etc/permissions/android.hardware.vulkan.version.xml" - "etc/permissions/android.hardware.wifi.aware.xml" - "etc/permissions/android.hardware.wifi.direct.xml" - "etc/permissions/android.hardware.wifi.passpoint.xml" - "etc/permissions/android.hardware.wifi.rtt.xml" - "etc/permissions/android.hardware.wifi.xml" - "etc/permissions/android.software.device_id_attestation.xml" - "etc/permissions/android.software.ipsec_tunnels.xml" - "etc/permissions/android.software.midi.xml" - "etc/permissions/android.software.opengles.deqp.level.xml" - "etc/permissions/android.software.sip.voip.xml" - "etc/permissions/android.software.verified_boot.xml" - "etc/permissions/android.software.vulkan.deqp.level.xml" - "etc/permissions/com.google.hardware.camera.easel_2018.xml" - "etc/permissions/com.nxp.mifare.xml" - "etc/permissions/handheld_core_hardware.xml" - "etc/powerhint.json" - "etc/r_submix_audio_policy_configuration.xml" - "etc/sec_config" - "etc/seccomp_policy/configstore@1.1.policy" - "etc/seccomp_policy/mediacodec.policy" - "etc/selinux/plat_pub_versioned.cil" - "etc/selinux/plat_sepolicy_vers.txt" - "etc/selinux/precompiled_sepolicy" - "etc/selinux/precompiled_sepolicy.plat_sepolicy_and_mapping.sha256" - "etc/selinux/precompiled_sepolicy.product_sepolicy_and_mapping.sha256" - "etc/selinux/selinux_denial_metadata" - "etc/selinux/vendor_file_contexts" - "etc/selinux/vendor_hwservice_contexts" - "etc/selinux/vendor_mac_permissions.xml" - "etc/selinux/vendor_property_contexts" - "etc/selinux/vendor_seapp_contexts" - "etc/selinux/vendor_sepolicy.cil" - "etc/selinux/vendor_service_contexts" - "etc/selinux/vndservice_contexts" - "etc/sensors/hals.conf" - "etc/sound_trigger_mixer_paths.xml" - "etc/sound_trigger_platform_info.xml" - "etc/sysconfig/component-overrides.xml" - "etc/thermal-engine-sargo.conf" - "etc/thermal_info_config.json" - "etc/usb_audio_policy_configuration.xml" - "etc/vintf/compatibility_matrix.xml" - "etc/vintf/manifest.xml" - "etc/vintf/manifest/android.hardware.atrace@1.0-service.pixel.xml" - "etc/vintf/manifest/android.hardware.cas@1.2-service.xml" - "etc/vintf/manifest/android.hardware.contexthub@1.2-generic.xml" - "etc/vintf/manifest/android.hardware.power-service.pixel.xml" - "etc/vintf/manifest/android.hardware.thermal@2.0-service.pixel.xml" - "etc/vintf/manifest/android.hardware.usb.gadget@1.1-service.bonito.xml" - "etc/vintf/manifest/android.hardware.usb@1.3-service.bonito.xml" - "etc/vintf/manifest/android.hardware.wifi.hostapd.xml" - "etc/vintf/manifest/android.hardware.wifi.supplicant.xml" - "etc/vintf/manifest/android.hardware.wifi@1.0-service.xml" - "etc/vintf/manifest/com.android.vibrator.drv2624.xml" - "etc/vintf/manifest/manifest_android.hardware.drm@1.4-service.clearkey.xml" - "etc/vintf/manifest/manifest_android.hardware.health.storage@1.0.xml" - "etc/wifi/p2p_supplicant_overlay.conf" - "etc/wifi/wifi_concurrency_cfg.txt" - "etc/wifi/wpa_supplicant.conf" - "etc/wifi/wpa_supplicant_overlay.conf" - "firmware/crus_sp_config_b4_rx.bin" - "firmware/crus_sp_config_b4_tx.bin" - "firmware/crus_sp_config_s4_rx.bin" - "firmware/crus_sp_config_s4_tx.bin" - "firmware/cs40l20.bin" - "firmware/cs40l20.wmfw" - "firmware/drv2624.bin" - "firmware/rt5514_dsp_fw1.bin" - "firmware/rt5514_dsp_fw2.bin" - "firmware/rt5514_dsp_fw3.bin" - "firmware/rt5514_dsp_fw4.bin" - "firmware/wlan/qca_cld/WCNSS_qcom_cfg.ini" - "lib/android.hardware.audio.common-util.so" - "lib/android.hardware.audio.common@5.0.so" - "lib/android.hardware.audio.common@7.0-enums.so" - "lib/android.hardware.audio.common@7.0-util.so" - "lib/android.hardware.audio.common@7.0.so" - "lib/android.hardware.audio.effect@7.0-util.so" - "lib/android.hardware.audio.effect@7.0.so" - "lib/android.hardware.audio@7.0-util.so" - "lib/android.hardware.audio@7.0.so" - "lib/android.hardware.bluetooth.audio@2.0.so" - "lib/android.hardware.bluetooth.audio@2.1.so" - "lib/android.hardware.boot@1.0.so" - "lib/android.hardware.camera.common@1.0.so" - "lib/android.hardware.camera.device@1.0.so" - "lib/android.hardware.camera.device@3.2.so" - "lib/android.hardware.camera.device@3.3.so" - "lib/android.hardware.camera.device@3.4.so" - "lib/android.hardware.camera.device@3.5.so" - "lib/android.hardware.camera.device@3.6.so" - "lib/android.hardware.camera.provider@2.4-external.so" - "lib/android.hardware.camera.provider@2.4-legacy.so" - "lib/android.hardware.camera.provider@2.4.so" - "lib/android.hardware.cas.native@1.0.so" - "lib/android.hardware.cas@1.0.so" - "lib/android.hardware.cas@1.1.so" - "lib/android.hardware.cas@1.2.so" - "lib/android.hardware.drm@1.0.so" - "lib/android.hardware.gnss@1.0.so" - "lib/android.hardware.gnss@1.1.so" - "lib/android.hardware.light@2.0.so" - "lib/android.hardware.power-V1-ndk_platform.so" - "lib/android.hardware.power@1.0.so" - "lib/android.hardware.power@1.1.so" - "lib/android.hardware.power@1.2.so" - "lib/android.hardware.radio@1.0.so" - "lib/android.hardware.radio@1.1.so" - "lib/android.hardware.soundtrigger@2.1.so" - "lib/android.hardware.soundtrigger@2.2.so" - "lib/android.hidl.allocator@1.0.so" - "lib/camera.device@1.0-impl.so" - "lib/camera.device@3.2-impl.so" - "lib/camera.device@3.3-impl.so" - "lib/camera.device@3.4-external-impl.so" - "lib/camera.device@3.4-impl.so" - "lib/camera.device@3.5-external-impl.so" - "lib/camera.device@3.5-impl.so" - "lib/camera.device@3.6-external-impl.so" - "lib/hw/android.hardware.audio.effect@7.0-impl.so" - "lib/hw/android.hardware.audio@7.0-impl.so" - "lib/hw/android.hardware.bluetooth.audio@2.0-impl.so" - "lib/hw/android.hardware.boot@1.0-impl.so" - "lib/hw/android.hardware.camera.provider@2.4-impl.so" - "lib/hw/android.hardware.drm@1.0-impl.so" - "lib/hw/android.hardware.gnss@1.1-impl-qti.so" - "lib/hw/android.hardware.light@2.0-impl.so" - "lib/hw/android.hardware.memtrack@1.0-impl.so" - "lib/hw/android.hardware.renderscript@1.0-impl.so" - "lib/hw/android.hardware.soundtrigger@2.2-impl.so" - "lib/hw/audio.bluetooth.default.so" - "lib/hw/audio.primary.default.so" - "lib/hw/audio.primary.sdm710.so" - "lib/hw/audio.r_submix.default.so" - "lib/hw/audio.usb.default.so" - "lib/hw/bootctrl.sdm710.so" - "lib/hw/gralloc.default.so" - "lib/hw/local_time.default.so" - "lib/hw/power.default.so" - "lib/hw/sensors.sargo.so" - "lib/hw/vibrator.default.so" - "lib/libalsautils.so" - "lib/libavservices_minijail.so" - "lib/libbluetooth_audio_session.so" - "lib/libeffects.so" - "lib/libeffectsconfig.so" - "lib/libgnss.so" - "lib/libgps.utils.so" - "lib/libloc_core.so" - "lib/liblocation_api.so" - "lib/libmediautils_vendor.so" - "lib/libmemunreachable.so" - "lib/libnbaio_mono.so" - "lib/libopus.so" - "lib/libprotobuf-cpp-full-3.9.1.so" - "lib/libprotobuf-cpp-lite-3.9.1.so" - "lib/libreference-ril.so" - "lib/libril.so" - "lib/librilutils.so" - "lib/libstagefright_amrnb_common.so" - "lib/libstagefright_enc_common.so" - "lib/libstagefright_flacdec.so" - "lib/libstagefright_soft_aacdec.so" - "lib/libstagefright_soft_aacenc.so" - "lib/libstagefright_soft_amrdec.so" - "lib/libstagefright_soft_amrnbenc.so" - "lib/libstagefright_soft_amrwbenc.so" - "lib/libstagefright_soft_avcdec.so" - "lib/libstagefright_soft_avcenc.so" - "lib/libstagefright_soft_flacdec.so" - "lib/libstagefright_soft_flacenc.so" - "lib/libstagefright_soft_g711dec.so" - "lib/libstagefright_soft_gsmdec.so" - "lib/libstagefright_soft_hevcdec.so" - "lib/libstagefright_soft_mp3dec.so" - "lib/libstagefright_soft_mpeg2dec.so" - "lib/libstagefright_soft_mpeg4dec.so" - "lib/libstagefright_soft_mpeg4enc.so" - "lib/libstagefright_soft_opusdec.so" - "lib/libstagefright_soft_rawdec.so" - "lib/libstagefright_soft_vorbisdec.so" - "lib/libstagefright_soft_vpxdec.so" - "lib/libstagefright_soft_vpxenc.so" - "lib/libstagefright_softomx.so" - "lib/libstagefright_softomx_plugin.so" - "lib/libtinycompress.so" - "lib/libvibrator.so" - "lib/libvorbisidec.so" - "lib/libvpx.so" - "lib/libwpa_client.so" - "lib/mediacas/libclearkeycasplugin.so" - "lib/mediadrm/libdrmclearkeyplugin.so" - "lib/modules/lcd.ko" - "lib/modules/modules.alias" - "lib/modules/modules.dep" - "lib/modules/modules.load" - "lib/modules/modules.softdep" - "lib/modules/synaptics_dsx_core.ko" - "lib/modules/synaptics_dsx_fw_update.ko" - "lib/modules/synaptics_dsx_rmi_dev.ko" - "lib/modules/synaptics_dsx_test_reporting.ko" - "lib/modules/wlan.ko" - "lib/soundfx/libaudiopreprocessing.so" - "lib/soundfx/libbundlewrapper.so" - "lib/soundfx/libdownmix.so" - "lib/soundfx/libdynproc.so" - "lib/soundfx/libeffectproxy.so" - "lib/soundfx/libhapticgenerator.so" - "lib/soundfx/libldnhncr.so" - "lib/soundfx/libmalistener.so" - "lib/soundfx/libqcompostprocbundle.so" - "lib/soundfx/libqcomvisualizer.so" - "lib/soundfx/libqcomvoiceprocessing.so" - "lib/soundfx/libqcomvoiceprocessingdescriptors.so" - "lib/soundfx/libreverbwrapper.so" - "lib/soundfx/libvisualizer.so" - "lib/soundfx/libvolumelistener.so" - "lib64/android.frameworks.sensorservice@1.0.so" - "lib64/android.frameworks.stats-V1-ndk_platform.so" - "lib64/android.hardware.atrace@1.0.so" - "lib64/android.hardware.audio.common@5.0.so" - "lib64/android.hardware.bluetooth.audio@2.0.so" - "lib64/android.hardware.bluetooth.audio@2.1.so" - "lib64/android.hardware.boot@1.0.so" - "lib64/android.hardware.camera.common@1.0.so" - "lib64/android.hardware.camera.device@1.0.so" - "lib64/android.hardware.camera.device@3.2.so" - "lib64/android.hardware.camera.device@3.3.so" - "lib64/android.hardware.camera.device@3.4.so" - "lib64/android.hardware.camera.device@3.5.so" - "lib64/android.hardware.camera.device@3.6.so" - "lib64/android.hardware.camera.provider@2.4-external.so" - "lib64/android.hardware.camera.provider@2.4-legacy.so" - "lib64/android.hardware.camera.provider@2.4.so" - "lib64/android.hardware.contexthub@1.0.so" - "lib64/android.hardware.contexthub@1.1.so" - "lib64/android.hardware.contexthub@1.2.so" - "lib64/android.hardware.drm@1.0.so" - "lib64/android.hardware.drm@1.1.so" - "lib64/android.hardware.drm@1.2.so" - "lib64/android.hardware.drm@1.3.so" - "lib64/android.hardware.drm@1.4.so" - "lib64/android.hardware.dumpstate@1.0.so" - "lib64/android.hardware.dumpstate@1.1.so" - "lib64/android.hardware.gnss@1.0.so" - "lib64/android.hardware.gnss@1.1.so" - "lib64/android.hardware.graphics.composer@2.1-resources.so" - "lib64/android.hardware.graphics.composer@2.1.so" - "lib64/android.hardware.graphics.composer@2.2-resources.so" - "lib64/android.hardware.graphics.composer@2.2.so" - "lib64/android.hardware.health.storage@1.0.so" - "lib64/android.hardware.health@1.0.so" - "lib64/android.hardware.health@2.0.so" - "lib64/android.hardware.keymaster@3.0.so" - "lib64/android.hardware.keymaster@4.0.so" - "lib64/android.hardware.keymaster@4.1.so" - "lib64/android.hardware.light@2.0.so" - "lib64/android.hardware.nfc@1.0.so" - "lib64/android.hardware.nfc@1.1.so" - "lib64/android.hardware.nfc@1.2.so" - "lib64/android.hardware.power-V1-ndk_platform.so" - "lib64/android.hardware.power.stats@1.0.so" - "lib64/android.hardware.power@1.0.so" - "lib64/android.hardware.power@1.1.so" - "lib64/android.hardware.power@1.2.so" - "lib64/android.hardware.radio@1.0.so" - "lib64/android.hardware.radio@1.1.so" - "lib64/android.hardware.secure_element@1.0.so" - "lib64/android.hardware.secure_element@1.1.so" - "lib64/android.hardware.sensors@1.0.so" - "lib64/android.hardware.soundtrigger@2.1.so" - "lib64/android.hardware.soundtrigger@2.2.so" - "lib64/android.hardware.tetheroffload.config@1.0.so" - "lib64/android.hardware.tetheroffload.control@1.0.so" - "lib64/android.hardware.thermal@1.0.so" - "lib64/android.hardware.thermal@2.0.so" - "lib64/android.hardware.usb.gadget@1.0.so" - "lib64/android.hardware.usb.gadget@1.1.so" - "lib64/android.hardware.usb@1.0.so" - "lib64/android.hardware.usb@1.1.so" - "lib64/android.hardware.usb@1.2.so" - "lib64/android.hardware.usb@1.3.so" - "lib64/android.hardware.wifi.hostapd@1.0.so" - "lib64/android.hardware.wifi.hostapd@1.1.so" - "lib64/android.hardware.wifi.hostapd@1.2.so" - "lib64/android.hardware.wifi.hostapd@1.3.so" - "lib64/android.hardware.wifi.supplicant@1.0.so" - "lib64/android.hardware.wifi.supplicant@1.1.so" - "lib64/android.hardware.wifi.supplicant@1.2.so" - "lib64/android.hardware.wifi.supplicant@1.3.so" - "lib64/android.hardware.wifi.supplicant@1.4.so" - "lib64/android.hardware.wifi@1.0.so" - "lib64/android.hardware.wifi@1.1.so" - "lib64/android.hardware.wifi@1.2.so" - "lib64/android.hardware.wifi@1.3.so" - "lib64/android.hardware.wifi@1.4.so" - "lib64/android.hardware.wifi@1.5.so" - "lib64/android.hidl.allocator@1.0.so" - "lib64/android.system.wifi.keystore@1.0.so" - "lib64/camera.device@1.0-impl.so" - "lib64/camera.device@3.2-impl.so" - "lib64/camera.device@3.3-impl.so" - "lib64/camera.device@3.4-external-impl.so" - "lib64/camera.device@3.4-impl.so" - "lib64/camera.device@3.5-external-impl.so" - "lib64/camera.device@3.5-impl.so" - "lib64/camera.device@3.6-external-impl.so" - "lib64/ese_spi_nxp.so" - "lib64/hw/android.hardware.bluetooth.audio@2.0-impl.so" - "lib64/hw/android.hardware.boot@1.0-impl.so" - "lib64/hw/android.hardware.camera.provider@2.4-impl.so" - "lib64/hw/android.hardware.drm@1.0-impl.so" - "lib64/hw/android.hardware.gnss@1.1-impl-qti.so" - "lib64/hw/android.hardware.light@2.0-impl.so" - "lib64/hw/android.hardware.memtrack@1.0-impl.so" - "lib64/hw/android.hardware.renderscript@1.0-impl.so" - "lib64/hw/android.hardware.soundtrigger@2.2-impl.so" - "lib64/hw/audio.bluetooth.default.so" - "lib64/hw/audio.primary.default.so" - "lib64/hw/audio.primary.sdm710.so" - "lib64/hw/audio.r_submix.default.so" - "lib64/hw/audio.usb.default.so" - "lib64/hw/bootctrl.sdm710.so" - "lib64/hw/gralloc.default.so" - "lib64/hw/local_time.default.so" - "lib64/hw/power.default.so" - "lib64/hw/sensors.sargo.so" - "lib64/hw/vibrator.default.so" - "lib64/libalsautils.so" - "lib64/libbinderdebug.so" - "lib64/libbluetooth_audio_session.so" - "lib64/libcld80211.so" - "lib64/libdisppower-pixel.so" - "lib64/libeffects.so" - "lib64/libeffectsconfig.so" - "lib64/libgnss.so" - "lib64/libgps.utils.so" - "lib64/libhwc2on1adapter.so" - "lib64/libhwc2onfbadapter.so" - "lib64/libhwminijail.so" - "lib64/libipanat.so" - "lib64/libkeymaster4_1support.so" - "lib64/libkeymaster4support.so" - "lib64/libkeystore-engine-wifi-hidl.so" - "lib64/libkeystore-wifi-hidl.so" - "lib64/libloc_core.so" - "lib64/liblocation_api.so" - "lib64/libnbaio_mono.so" - "lib64/libnetfilter_conntrack.so" - "lib64/libnfnetlink.so" - "lib64/liboffloadhal.so" - "lib64/libperfmgr.so" - "lib64/libpixelhealth.so" - "lib64/libprotobuf-cpp-full-3.9.1.so" - "lib64/libprotobuf-cpp-lite-3.9.1.so" - "lib64/libreference-ril.so" - "lib64/libril.so" - "lib64/librilutils.so" - "lib64/libsensorndkbridge.so" - "lib64/libtinycompress.so" - "lib64/libvibrator.so" - "lib64/libwifi-hal.so" - "lib64/libwpa_client.so" - "lib64/libz_stable.so" - "lib64/ls_client.so" - "lib64/mediacas/libclearkeycasplugin.so" - "lib64/mediadrm/libdrmclearkeyplugin.so" - "lib64/nfc_nci_nxp.so" - "lib64/pixel-power-ext-V1-ndk_platform.so" - "lib64/pixelpowerstats_provider_aidl_interface-cpp.so" - "lib64/soundfx/libaudiopreprocessing.so" - "lib64/soundfx/libbundlewrapper.so" - "lib64/soundfx/libdownmix.so" - "lib64/soundfx/libdynproc.so" - "lib64/soundfx/libeffectproxy.so" - "lib64/soundfx/libhapticgenerator.so" - "lib64/soundfx/libldnhncr.so" - "lib64/soundfx/libmalistener.so" - "lib64/soundfx/libqcompostprocbundle.so" - "lib64/soundfx/libqcomvisualizer.so" - "lib64/soundfx/libqcomvoiceprocessing.so" - "lib64/soundfx/libqcomvoiceprocessingdescriptors.so" - "lib64/soundfx/libreverbwrapper.so" - "lib64/soundfx/libvisualizer.so" - "lib64/soundfx/libvolumelistener.so" - "lib64/vendor.nxp.nxpese@1.0.so" - "lib64/vendor.nxp.nxpnfc@1.0.so" - "odm/etc/NOTICE.xml.gz" - "odm/etc/build.prop" - "odm/etc/group" - "odm/etc/passwd" - "odm/etc/permissions/sku_G020A/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020B/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020C/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020D/android.hardware.nfc.ese.xml" - "odm/etc/permissions/sku_G020D/android.hardware.se.omapi.ese.xml" - "odm/etc/permissions/sku_G020D/com.google.hardware.pixel.japan.xml" - "odm/etc/permissions/sku_G020E/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020F/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020G/android.hardware.nfc.uicc.xml" - "odm/etc/permissions/sku_G020H/android.hardware.nfc.ese.xml" - "odm/etc/permissions/sku_G020H/com.google.hardware.pixel.japan.xml" - "odm/etc/vintf/manifest_G020A.xml" - "odm/etc/vintf/manifest_G020B.xml" - "odm/etc/vintf/manifest_G020C.xml" - "odm/etc/vintf/manifest_G020D.xml" - "odm/etc/vintf/manifest_G020E.xml" - "odm/etc/vintf/manifest_G020F.xml" - "odm/etc/vintf/manifest_G020G.xml" - "odm/etc/vintf/manifest_G020H.xml" - "odm_dlkm/etc/NOTICE.xml.gz" - "odm_dlkm/etc/build.prop" - "overlay/EmergencyInfo__auto_generated_rro_vendor.apk" - "overlay/NfcNci__auto_generated_rro_vendor.apk" - "overlay/Settings__auto_generated_rro_vendor.apk" - "overlay/StorageManager__auto_generated_rro_vendor.apk" - "overlay/SystemUI__auto_generated_rro_vendor.apk" - "overlay/TeleService__auto_generated_rro_vendor.apk" - "overlay/Telecom__auto_generated_rro_vendor.apk" - "overlay/Traceur__auto_generated_rro_vendor.apk" - "overlay/framework-res__auto_generated_rro_vendor.apk" - "ueventd.rc" - "usr/idc/uinput-fpc.idc" - "usr/keylayout/uinput-fpc.kl" - "vendor_dlkm/etc/NOTICE.xml.gz" - "vendor_dlkm/etc/build.prop" - - # Exclude overlays, symlinks and extra files that we override - - # Overlays - "overlay/SettingsGoogle__auto_generated_rro_vendor.apk" - "overlay/SystemUIGoogle__auto_generated_rro_vendor.apk" - - # SELinux - "etc/selinux/precompiled_sepolicy.system_ext_sepolicy_and_mapping.sha256" - - # Symlinks - "lib/libEGL_adreno.so" - "lib/libq3dtools_adreno.so" - "lib64/libEGL_adreno.so" - "lib64/libq3dtools_adreno.so" - "rfs/apq/gnss/hlos" - "rfs/apq/gnss/ramdumps" - "rfs/apq/gnss/readonly/firmware" - "rfs/apq/gnss/readonly/vendor/firmware" - "rfs/apq/gnss/readwrite" - "rfs/apq/gnss/shared" - "rfs/mdm/adsp/hlos" - "rfs/mdm/adsp/ramdumps" - "rfs/mdm/adsp/readonly/firmware" - "rfs/mdm/adsp/readonly/vendor/firmware" - "rfs/mdm/adsp/readwrite" - "rfs/mdm/adsp/shared" - "rfs/mdm/cdsp/hlos" - "rfs/mdm/cdsp/ramdumps" - "rfs/mdm/cdsp/readonly/firmware" - "rfs/mdm/cdsp/readwrite" - "rfs/mdm/cdsp/shared" - "rfs/mdm/mpss/hlos" - "rfs/mdm/mpss/ramdumps" - "rfs/mdm/mpss/readonly/firmware" - "rfs/mdm/mpss/readonly/vendor/firmware" - "rfs/mdm/mpss/readwrite" - "rfs/mdm/mpss/shared" - "rfs/mdm/slpi/hlos" - "rfs/mdm/slpi/ramdumps" - "rfs/mdm/slpi/readonly/firmware" - "rfs/mdm/slpi/readwrite" - "rfs/mdm/slpi/shared" - "rfs/mdm/tn/hlos" - "rfs/mdm/tn/ramdumps" - "rfs/mdm/tn/readonly/firmware" - "rfs/mdm/tn/readwrite" - "rfs/mdm/tn/shared" - "rfs/msm/adsp/hlos" - "rfs/msm/adsp/ramdumps" - "rfs/msm/adsp/readonly/firmware" - "rfs/msm/adsp/readonly/vendor/firmware" - "rfs/msm/adsp/readwrite" - "rfs/msm/adsp/shared" - "rfs/msm/cdsp/hlos" - "rfs/msm/cdsp/ramdumps" - "rfs/msm/cdsp/readonly/firmware" - "rfs/msm/cdsp/readonly/vendor/firmware" - "rfs/msm/cdsp/readwrite" - "rfs/msm/cdsp/shared" - "rfs/msm/mpss/hlos" - "rfs/msm/mpss/ramdumps" - "rfs/msm/mpss/readonly/firmware" - "rfs/msm/mpss/readonly/vendor/firmware" - "rfs/msm/mpss/readwrite" - "rfs/msm/mpss/shared" - "rfs/msm/slpi/hlos" - "rfs/msm/slpi/ramdumps" - "rfs/msm/slpi/readonly/firmware" - "rfs/msm/slpi/readonly/vendor/firmware" - "rfs/msm/slpi/readwrite" - "rfs/msm/slpi/shared" - - # Exclude files that compile with BUILD_WITHOUT_VENDOR := false - # or manually added as build targets in device-lineage.mk - - # Bluetooth - "lib/android.hardware.bluetooth@1.0.so" - "lib/hardware.google.bluetooth.bt_channel_avoidance@1.0.so" - "lib/hardware.google.bluetooth.sar@1.0.so" - "lib/vendor.qti.hardware.bluetooth_audio@2.0.so" - "lib64/android.hardware.bluetooth@1.0.so" - "lib64/hardware.google.bluetooth.bt_channel_avoidance@1.0.so" - "lib64/hardware.google.bluetooth.sar@1.0.so" - "lib64/vendor.qti.hardware.bluetooth_audio@2.0.so" - - # CHRE - "bin/chre" - "etc/init/chre_daemon.rc" - - # Codec2 - "lib/android.hardware.media.c2@1.0.so" - "lib/libavservices_minijail_vendor.so" - "lib/libcodec2_hidl@1.0.so" - "lib/libcodec2_hidl_plugin.so" - "lib/libcodec2_vndk.so" - "lib/libstagefright_bufferpool@2.0.1.so" - "lib64/android.hardware.media.c2@1.0.so" - "lib64/libcodec2_vndk.so" - "lib64/libstagefright_bufferpool@2.0.1.so" - - # Confirmation UI - "lib64/android.hardware.confirmationui@1.0.so" - "lib64/libteeui_hal_support.so" - - # Display - "bin/hw/vendor.qti.hardware.display.allocator@1.0-service" - "etc/init/vendor.qti.hardware.display.allocator@1.0-service.rc" - "lib/android.hardware.graphics.composer@2.1.so" - "lib/android.hardware.graphics.composer@2.2.so" - "lib/android.hardware.graphics.composer@2.3.so" - "lib/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so" - "lib/hw/gralloc.sdm710.so" - "lib/hw/hwcomposer.sdm710.so" - "lib/hw/memtrack.sdm710.so" - "lib/libdisplaydebug.so" - "lib/libdrm.so" - "lib/libdrmutils.so" - "lib/libgpu_tonemapper.so" - "lib/libgralloccore.so" - "lib/libgrallocutils.so" - "lib/libqdMetaData.so" - "lib/libqdutils.so" - "lib/libqservice.so" - "lib/libsdmcore.so" - "lib/libsdmutils.so" - "lib/vendor.display.config@1.0.so" - "lib/vendor.display.config@1.1.so" - "lib/vendor.display.config@1.2.so" - "lib/vendor.display.config@1.3.so" - "lib64/android.hardware.graphics.composer@2.3.so" - "lib64/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so" - "lib64/hw/gralloc.sdm710.so" - "lib64/hw/hwcomposer.sdm710.so" - "lib64/hw/memtrack.sdm710.so" - "lib64/libdisplaydebug.so" - "lib64/libdrm.so" - "lib64/libdrmutils.so" - "lib64/libgpu_tonemapper.so" - "lib64/libgralloccore.so" - "lib64/libgrallocutils.so" - "lib64/libqdMetaData.so" - "lib64/libqdutils.so" - "lib64/libqservice.so" - "lib64/libsdmcore.so" - "lib64/libsdmutils.so" - "lib64/vendor.display.config@1.0.so" - "lib64/vendor.display.config@1.1.so" - "lib64/vendor.display.config@1.2.so" - "lib64/vendor.display.config@1.3.so" - - # HIDL - "lib/libhidltransport.so" - "lib/libhwbinder.so" - "lib64/libhidltransport.so" - "lib64/libhwbinder.so" - - # Identity credential - "etc/permissions/android.hardware.identity_credential.xml" - "lib64/android.hardware.identity-support-lib.so" - "lib64/libcppbor_external.so" - "lib64/libcppcose_rkp.so" - "lib64/libkeymaster_messages.so" - "lib64/libkeymaster_portable.so" - "lib64/libpuresoftkeymasterdevice.so" - "lib64/libsoft_attestation_cert.so" - - # Json - "lib/libjson.so" - "lib64/libjson.so" - - # Light - "lib/hardware.google.light@1.0.so" - "lib/hw/lights.qcom.so" - "lib64/hardware.google.light@1.0.so" - "lib64/hw/lights.qcom.so" - - # Media - "lib/libOmxCore.so" - "lib/libOmxVdec.so" - "lib/libOmxVenc.so" - "lib/libc2dcolorconvert.so" - "lib/libmm-omxcore.so" - "lib/libplatformconfig.so" - "lib/libstagefrighthw.so" - "lib64/libOmxCore.so" - "lib64/libOmxVdec.so" - "lib64/libOmxVenc.so" - "lib64/libc2dcolorconvert.so" - "lib64/libmm-omxcore.so" - "lib64/libplatformconfig.so" - "lib64/libstagefrighthw.so" - - # Protobuf - "lib/libprotobuf-cpp-full.so" - "lib64/libprotobuf-cpp-full.so" - - # RIL - "bin/cnd" - "bin/diag_mdlog" - "bin/hw/qcrild" - "bin/hw/vendor.google.radioext@1.0-service" - "bin/ims_rtp_daemon" - "bin/imsdatadaemon" - "bin/imsqmidaemon" - "bin/imsrcsd" - "bin/irsc_util" - "bin/modem_svc" - "bin/netmgrd" - "bin/pd-mapper" - "bin/port-bridge" - "bin/qti" - "bin/rmt_storage" - "bin/tftp_server" - "etc/cne/SwimConfig.xml" - "etc/cne/wqeclient/ATT/ATT_profile1.xml" - "etc/cne/wqeclient/ATT/ATT_profile2.xml" - "etc/cne/wqeclient/ATT/ATT_profile3.xml" - "etc/cne/wqeclient/ATT/ATT_profile4.xml" - "etc/cne/wqeclient/ATT/ATT_profile5.xml" - "etc/cne/wqeclient/ATT/ATT_profile6.xml" - "etc/cne/wqeclient/ROW/ROW_profile1.xml" - "etc/cne/wqeclient/ROW/ROW_profile2.xml" - "etc/cne/wqeclient/ROW/ROW_profile3.xml" - "etc/cne/wqeclient/ROW/ROW_profile4.xml" - "etc/cne/wqeclient/ROW/ROW_profile5.xml" - "etc/cne/wqeclient/ROW/ROW_profile6.xml" - "etc/cne/wqeclient/ROW/ROW_profile7.xml" - "etc/cne/wqeclient/VZW/VZW_profile1.xml" - "etc/cne/wqeclient/VZW/VZW_profile2.xml" - "etc/cne/wqeclient/VZW/VZW_profile3.xml" - "etc/cne/wqeclient/VZW/VZW_profile4.xml" - "etc/cne/wqeclient/VZW/VZW_profile5.xml" - "etc/cne/wqeclient/VZW/VZW_profile6.xml" - "etc/data/dsi_config.xml" - "etc/data/netmgr_config.xml" - "etc/init/qcrild.rc" - "etc/init/vendor.google.radioext@1.0-service.rc" - "lib/com.qualcomm.qti.imscmservice@1.0.so" - "lib/com.qualcomm.qti.uceservice@2.0.so" - "lib/com.qualcomm.qti.uceservice@2.1.so" - "lib/com.quicinc.cne.api@1.0.so" - "lib/com.quicinc.cne.api@1.1.so" - "lib/com.quicinc.cne.constants@1.0.so" - "lib/com.quicinc.cne.constants@2.0.so" - "lib/com.quicinc.cne.constants@2.1.so" - "lib/com.quicinc.cne.server@1.0.so" - "lib/com.quicinc.cne.server@2.0.so" - "lib/com.quicinc.cne.server@2.1.so" - "lib/lib-imsdpl.so" - "lib/lib-imsqimf.so" - "lib/lib-imsrcs-v2.so" - "lib/lib-imsxml.so" - "lib/lib-rtpcommon.so" - "lib/lib-rtpcore.so" - "lib/lib-rtpdaemoninterface.so" - "lib/lib-rtpsl.so" - "lib/lib-uceservice.so" - "lib/libcne.so" - "lib/libcneapiclient.so" - "lib/libcneoplookup.so" - "lib/libcneqmiutils.so" - "lib/libconfigdb.so" - "lib/libdiag.so" - "lib/libdsi_netctrl.so" - "lib/libdsutils.so" - "lib/libidl.so" - "lib/liblqe.so" - "lib/libmdmdetect.so" - "lib/libnetmgr.so" - "lib/libpdmapper.so" - "lib/libpdnotifier.so" - "lib/libqcci_legacy.so" - "lib/libqcmaputils.so" - "lib/libqcrilFramework.so" - "lib/libqdi.so" - "lib/libqdp.so" - "lib/libqmi.so" - "lib/libqmi_cci.so" - "lib/libqmi_client_helper.so" - "lib/libqmi_client_qmux.so" - "lib/libqmi_common_so.so" - "lib/libqmi_csi.so" - "lib/libqmi_encdec.so" - "lib/libqmi_vs-google-1.so" - "lib/libqmiservices.so" - "lib/libqrtr.so" - "lib/libqsocket.so" - "lib/libril-qc-ltedirectdisc.so" - "lib/libril-qc-radioconfig.so" - "lib/libril-qcril-hook-oem.so" - "lib/librilqmiservices.so" - "lib/libsettings.so" - "lib/libsystem_health_mon.so" - "lib/libwms.so" - "lib/libwqe.so" - "lib/libxml.so" - "lib/qcrild_librilutils.so" - "lib/vendor.google.radioext@1.0.so" - "lib/vendor.google.radioext@1.1.so" - "lib/vendor.google.radioext@1.2.so" - "lib/vendor.google.radioext@1.3.so" - "lib/vendor.qti.hardware.data.latency@1.0.so" - "lib/vendor.qti.hardware.radio.am@1.0.so" - "lib/vendor.qti.hardware.radio.atcmdfwd@1.0.so" - "lib/vendor.qti.hardware.radio.ims@1.0.so" - "lib/vendor.qti.hardware.radio.ims@1.1.so" - "lib/vendor.qti.hardware.radio.ims@1.2.so" - "lib/vendor.qti.hardware.radio.ims@1.3.so" - "lib/vendor.qti.hardware.radio.ims@1.4.so" - "lib/vendor.qti.hardware.radio.internal.deviceinfo@1.0.so" - "lib/vendor.qti.hardware.radio.qcrilhook@1.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@1.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.0.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.1.so" - "lib/vendor.qti.hardware.radio.qtiradio@2.2.so" - "lib/vendor.qti.hardware.radio.uim@1.0.so" - "lib/vendor.qti.hardware.radio.uim@1.1.so" - "lib/vendor.qti.hardware.radio.uim_remote_client@1.0.so" - "lib/vendor.qti.hardware.radio.uim_remote_client@1.1.so" - "lib/vendor.qti.hardware.radio.uim_remote_server@1.0.so" - "lib/vendor.qti.ims.callinfo@1.0.so" - "lib/vendor.qti.imsrtpservice@1.0-service-Impl.so" - "lib/vendor.qti.imsrtpservice@1.0.so" - "lib64/com.qualcomm.qti.imscmservice@1.0.so" - "lib64/com.qualcomm.qti.uceservice@2.0.so" - "lib64/com.qualcomm.qti.uceservice@2.1.so" - "lib64/com.quicinc.cne.api@1.0.so" - "lib64/com.quicinc.cne.api@1.1.so" - "lib64/com.quicinc.cne.constants@1.0.so" - "lib64/com.quicinc.cne.constants@2.0.so" - "lib64/com.quicinc.cne.constants@2.1.so" - "lib64/com.quicinc.cne.server@1.0.so" - "lib64/com.quicinc.cne.server@2.0.so" - "lib64/com.quicinc.cne.server@2.1.so" - "lib64/lib-imsdpl.so" - "lib64/lib-imsqimf.so" - "lib64/lib-imsrcs-v2.so" - "lib64/lib-imsxml.so" - "lib64/lib-rtpcommon.so" - "lib64/lib-rtpcore.so" - "lib64/lib-rtpdaemoninterface.so" - "lib64/lib-rtpsl.so" - "lib64/lib-uceservice.so" - "lib64/libcne.so" - "lib64/libcneapiclient.so" - "lib64/libcneoplookup.so" - "lib64/libcneqmiutils.so" - "lib64/libconfigdb.so" - "lib64/libdiag.so" - "lib64/libdsi_netctrl.so" - "lib64/libdsutils.so" - "lib64/libidl.so" - "lib64/liblqe.so" - "lib64/libmdmdetect.so" - "lib64/libnetmgr.so" - "lib64/libpdmapper.so" - "lib64/libpdnotifier.so" - "lib64/libqcci_legacy.so" - "lib64/libqcmaputils.so" - "lib64/libqcrilFramework.so" - "lib64/libqdi.so" - "lib64/libqdp.so" - "lib64/libqmi.so" - "lib64/libqmi_cci.so" - "lib64/libqmi_client_helper.so" - "lib64/libqmi_client_qmux.so" - "lib64/libqmi_common_so.so" - "lib64/libqmi_csi.so" - "lib64/libqmi_encdec.so" - "lib64/libqmi_modem_svc.so" - "lib64/libqmi_thermal-google-1.so" - "lib64/libqmi_vs-google-1.so" - "lib64/libqmiservices.so" - "lib64/libqrtr.so" - "lib64/libqsocket.so" - "lib64/libril-qc-hal-qmi.so" - "lib64/libril-qc-ltedirectdisc.so" - "lib64/libril-qc-radioconfig.so" - "lib64/libril-qcril-hook-oem.so" - "lib64/librilqmiservices.so" - "lib64/librmnetctl.so" - "lib64/libsettings.so" - "lib64/libsystem_health_mon.so" - "lib64/libwms.so" - "lib64/libwqe.so" - "lib64/libxml.so" - "lib64/qcrild_librilutils.so" - "lib64/vendor.google.radioext@1.0.so" - "lib64/vendor.google.radioext@1.1.so" - "lib64/vendor.google.radioext@1.2.so" - "lib64/vendor.google.radioext@1.3.so" - "lib64/vendor.qti.googleext.imsext@1.0.so" - "lib64/vendor.qti.hardware.data.latency@1.0.so" - "lib64/vendor.qti.hardware.radio.am@1.0.so" - "lib64/vendor.qti.hardware.radio.atcmdfwd@1.0.so" - "lib64/vendor.qti.hardware.radio.ims@1.0.so" - "lib64/vendor.qti.hardware.radio.ims@1.1.so" - "lib64/vendor.qti.hardware.radio.ims@1.2.so" - "lib64/vendor.qti.hardware.radio.ims@1.3.so" - "lib64/vendor.qti.hardware.radio.ims@1.4.so" - "lib64/vendor.qti.hardware.radio.internal.deviceinfo@1.0.so" - "lib64/vendor.qti.hardware.radio.lpa@1.0.so" - "lib64/vendor.qti.hardware.radio.qcrilhook@1.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@1.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.0.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.1.so" - "lib64/vendor.qti.hardware.radio.qtiradio@2.2.so" - "lib64/vendor.qti.hardware.radio.uim@1.0.so" - "lib64/vendor.qti.hardware.radio.uim@1.1.so" - "lib64/vendor.qti.hardware.radio.uim_remote_client@1.0.so" - "lib64/vendor.qti.hardware.radio.uim_remote_client@1.1.so" - "lib64/vendor.qti.hardware.radio.uim_remote_server@1.0.so" - "lib64/vendor.qti.ims.callinfo@1.0.so" - "lib64/vendor.qti.imsrtpservice@1.0-service-Impl.so" - "lib64/vendor.qti.imsrtpservice@1.0.so" - "radio/qcril_database/qcril.db" - "radio/qcril_database/upgrade/0_initial.sql" - "radio/qcril_database/upgrade/10_remove_germany_hard_ecc_110.sql" - "radio/qcril_database/upgrade/11_israel_normal_ecc.sql" - "radio/qcril_database/upgrade/12_brazil_ecc.sql" - "radio/qcril_database/upgrade/13_show_emer_ui_in_india.sql" - "radio/qcril_database/upgrade/1_version_intro.sql" - "radio/qcril_database/upgrade/2_version_add_wps_config.sql" - "radio/qcril_database/upgrade/3_version_google_feature.sql" - "radio/qcril_database/upgrade/3_version_update_wps_config.sql" - "radio/qcril_database/upgrade/4_version_google_feature.sql" - "radio/qcril_database/upgrade/5_recheck_ecc_setting.sql" - "radio/qcril_database/upgrade/6_remove_unnecessary_entry.sql" - "radio/qcril_database/upgrade/7_singapore_ecc_995.sql" - "radio/qcril_database/upgrade/8_germany_ecc_110.sql" - "radio/qcril_database/upgrade/9_remove_germany_ecc_110.sql" - - # Wi-Fi - "lib/libcld80211.so" - "lib/libwifi-hal-ctrl.so" - "lib/libwifi-hal-qcom.so" - "lib64/libwifi-hal-ctrl.so" - "lib64/libwifi-hal-qcom.so" - - # Wi-Fi service - "bin/hw/vendor.google.wifi_ext@1.0-service-vendor" - "etc/init/vendor.google.wifi_ext@1.0-service.rc" - "etc/vintf/manifest/manifest_wifi_ext.xml" - "lib64/google_wifi_firmware_config_info_cc_proto.so" - "lib64/vendor.google.wifi_ext@1.1.so" - "lib64/vendor.google.wifi_ext@1.2.so" - - # Misc interfaces - "lib/android.frameworks.sensorservice@1.0.so" - "lib/android.hardware.gatekeeper@1.0.so" - "lib/android.hardware.keymaster@3.0.so" - "lib/android.hardware.keymaster@4.0.so" - "lib/android.hardware.sensors@1.0.so" - "lib/android.hardware.sensors@2.0.so" - "lib64/android.frameworks.stats@1.0.so" - "lib64/android.hardware.authsecret@1.0.so" - "lib64/android.hardware.biometrics.fingerprint@2.1.so" - "lib64/android.hardware.biometrics.fingerprint@2.2.so" - "lib64/android.hardware.gatekeeper@1.0.so" - "lib64/android.hardware.neuralnetworks@1.0.so" - "lib64/android.hardware.neuralnetworks@1.1.so" - "lib64/android.hardware.neuralnetworks@1.2.so" - "lib64/android.hardware.neuralnetworks@1.3.so" - "lib64/android.hardware.oemlock@1.0.so" - "lib64/android.hardware.radio.config@1.0.so" - "lib64/android.hardware.radio.config@1.1.so" - "lib64/android.hardware.radio.deprecated@1.0.so" - "lib64/android.hardware.radio@1.2.so" - "lib64/android.hardware.radio@1.3.so" - "lib64/android.hardware.sensors@2.0.so" - "lib64/android.hardware.weaver@1.0.so" - "lib64/android.system.net.netd@1.0.so" - "lib64/android.system.net.netd@1.1.so" - - # Completely skip files that are not required - - # Cryptfshw - "etc/init/vendor.qti.hardware.cryptfshw@1.0-service-qti.rc" - "lib/libcryptfshwcommon.so" - "lib/vendor.qti.hardware.cryptfshw@1.0.so" - "lib64/libcryptfshwcommon.so" - "lib64/vendor.qti.hardware.cryptfshw@1.0.so" - - # Display - "lib/libdisplayconfig.so" - "lib64/libdisplayconfig.so" - - # Google battery - "bin/hw/vendor.google.google_battery@1.1-service-vendor" - "etc/init/vendor.google.google_battery@1.1-service.rc" - "lib64/vendor.google.google_battery@1.0.so" - "lib64/vendor.google.google_battery@1.1.so" - - # IOP - "lib/vendor.qti.hardware.iop@1.0.so" - "lib64/vendor.qti.hardware.iop@1.0.so" - - # Perf - "lib/vendor.qti.hardware.perf@1.0.so" - "lib/vendor.qti.hardware.perf@2.0.so" - "lib64/vendor.qti.hardware.perf@1.0.so" - "lib64/vendor.qti.hardware.perf@2.0.so" - - # Test mapping - "firmware/TEST_MAPPING" -) - -# Initialize the helper -setup_vendor_deps "${ANDROID_ROOT}" - -generate_prop_list_from_image "${_input_image}" "${_output_file}" VENDOR_SKIP_FILES - -# Fixups -function presign() { - sed -i "s|vendor/${1}$|vendor/${1};PRESIGNED|g" "${_output_file}" -} - -function symlink() { - sed -i "s|vendor/${1}$|vendor/${1};SYMLINK=${2}|g" "${_output_file}" -} - -function as_module() { - sed -i "s|vendor/${1}$|-vendor/${1}|g" "${_output_file}" -} - -function header() { - sed -i "1s/^/${1}\n/" "${_output_file}" -} - -symlink "lib/egl/libEGL_adreno.so" "vendor/lib/libEGL_adreno.so" -symlink "lib/egl/libGLESv2_adreno.so" "vendor/lib/libGLESv2_adreno.so" -symlink "lib/egl/libq3dtools_adreno.so" "vendor/lib/libq3dtools_adreno.so" -symlink "lib64/egl/libEGL_adreno.so" "vendor/lib64/libEGL_adreno.so" -symlink "lib64/egl/libGLESv2_adreno.so" "vendor/lib64/libGLESv2_adreno.so" -symlink "lib64/egl/libq3dtools_adreno.so" "vendor/lib64/libq3dtools_adreno.so" - -as_module "lib/libbtnv.so" -as_module "lib/libadsprpc.so" -as_module "lib/libMpeg4SwEncoder.so" -as_module "lib64/libbtnv.so" -as_module "lib64/libadsprpc.so" -as_module "lib64/libMpeg4SwEncoder.so" - -header "# All blobs are extracted from Google factory images for each new ASB" diff --git a/sargo/setup-makefiles.py b/sargo/setup-makefiles.py new file mode 100755 index 00000000..32947cfe --- /dev/null +++ b/sargo/setup-makefiles.py @@ -0,0 +1 @@ +#!./extract-files.py --regenerate_makefiles diff --git a/sargo/setup-makefiles.sh b/sargo/setup-makefiles.sh deleted file mode 100755 index b41bb94e..00000000 --- a/sargo/setup-makefiles.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The CyanogenMod Project -# Copyright (C) 2017-2023 The LineageOS Project -# -# SPDX-License-Identifier: Apache-2.0 -# - -set -e - -DEVICE=sargo -VENDOR=google - -# Load extract_utils and do some sanity checks -MY_DIR="${BASH_SOURCE%/*}" -if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi - -ANDROID_ROOT="${MY_DIR}/../../../.." - -HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh" -if [ ! -f "${HELPER}" ]; then - echo "Unable to find helper script at ${HELPER}" - exit 1 -fi -source "${HELPER}" - -# Initialize the helper -setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" - -# Warning headers and guards -write_headers - -write_makefiles "${MY_DIR}/proprietary-files.txt" true -write_makefiles "${MY_DIR}/proprietary-files-carriersettings.txt" true -write_makefiles "${MY_DIR}/proprietary-files-radio.txt" true -write_makefiles "${MY_DIR}/proprietary-files-vendor.txt" true - -append_firmware_calls_to_makefiles "${MY_DIR}/proprietary-firmware.txt" - -# Finish -write_footers diff --git a/sdm710/thermal-engine/Android.mk b/sdm710/thermal-engine/Android.mk deleted file mode 100644 index c54c59f0..00000000 --- a/sdm710/thermal-engine/Android.mk +++ /dev/null @@ -1,6 +0,0 @@ -################################################################################ -# @file device/qcom/common/thermal-engine/Android.mk -# @Makefile for installing thermal-engine client header on Android. -################################################################################ - -LOCAL_PATH:= $(call my-dir) diff --git a/sdm710/thermal-engine/thermal_client.h b/sdm710/thermal-engine/thermal_client.h deleted file mode 100644 index b41f1394..00000000 --- a/sdm710/thermal-engine/thermal_client.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <cutils/properties.h> -#ifndef __THERMAL_CLIENT_H__ -#define __THERMAL_CLIENT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_ACTIONS (32) - -/* Enum for supported fields */ -enum supported_fields { - UNKNOWN_FIELD = 0x0, - DISABLE_FIELD = 0x1, - SAMPLING_FIELD = 0x2, - THRESHOLDS_FIELD = 0x4, - SET_POINT_FIELD = THRESHOLDS_FIELD, - THRESHOLDS_CLR_FIELD = 0x8, - SET_POINT_CLR_FIELD = THRESHOLDS_CLR_FIELD, - ACTION_INFO_FIELD = 0x10, - SUPPORTED_FIELD_MAX = 0x20, -}; - -enum field_data_type { - FIELD_INT = 0, - FIELD_STR, - FIELD_INT_ARR, - FIELD_ARR_STR, - FIELD_ARR_INT_ARR, - FIELD_MAX -}; - -struct action_info_data { - int info[MAX_ACTIONS]; - uint32_t num_actions; -}; - -struct field_data { - char *field_name; - enum field_data_type data_type; - uint32_t num_data; - void *data; -}; - -struct config_instance { - char *cfg_desc; - char *algo_type; - unsigned int fields_mask; /* mask set by client to request to adjust supported fields */ - uint32_t num_fields; - struct field_data *fields; -}; - -int thermal_client_config_query(char *algo_type, struct config_instance **configs); -void thermal_client_config_cleanup(struct config_instance *configs, unsigned int config_size); -int thermal_client_config_set(struct config_instance *configs, unsigned int config_size); - -int thermal_client_register_callback(char *client_name, int (*callback)(int , void *, void *), void *data); -int thermal_client_request(char *client_name, int req_data); -void thermal_client_unregister_callback(int client_cb_handle); - -#ifdef __cplusplus -} -#endif - -#endif /* __THERMAL_CLIENT_H__ */ diff --git a/seccomp_policy/mediacodec.policy b/seccomp_policy/mediacodec.policy deleted file mode 100644 index 07b7bf70..00000000 --- a/seccomp_policy/mediacodec.policy +++ /dev/null @@ -1,9 +0,0 @@ -# device specific syscalls -pselect6: 1 -eventfd2: 1 -sendto: 1 -recvfrom: 1 -_llseek: 1 -sysinfo: 1 -getcwd: 1 -getdents64: 1 diff --git a/self-extractors/Android.mk b/self-extractors/Android.mk deleted file mode 100644 index e69de29b..00000000 --- a/self-extractors/Android.mk +++ /dev/null diff --git a/self-extractors/google_devices/staging/Android.mk b/self-extractors/google_devices/staging/Android.mk.template index 5caef362..5caef362 100644 --- a/self-extractors/google_devices/staging/Android.mk +++ b/self-extractors/google_devices/staging/Android.mk.template diff --git a/self-extractors/qcom/staging/Android.mk b/self-extractors/qcom/staging/Android.mk.template index 510d07a7..510d07a7 100644 --- a/self-extractors/qcom/staging/Android.mk +++ b/self-extractors/qcom/staging/Android.mk.template diff --git a/self-extractors_sargo/Android.mk b/self-extractors_sargo/Android.mk deleted file mode 100644 index e69de29b..00000000 --- a/self-extractors_sargo/Android.mk +++ /dev/null diff --git a/self-extractors_sargo/google_devices/staging/Android.mk b/self-extractors_sargo/google_devices/staging/Android.mk.template index 814ce95d..814ce95d 100644 --- a/self-extractors_sargo/google_devices/staging/Android.mk +++ b/self-extractors_sargo/google_devices/staging/Android.mk.template diff --git a/self-extractors_sargo/qcom/staging/Android.mk b/self-extractors_sargo/qcom/staging/Android.mk.template index 346dc40c..346dc40c 100644 --- a/self-extractors_sargo/qcom/staging/Android.mk +++ b/self-extractors_sargo/qcom/staging/Android.mk.template diff --git a/sepolicy/vendor/qcom/common/file.te b/sepolicy/vendor/qcom/common/file.te index 48047a39..4662b20b 100644 --- a/sepolicy/vendor/qcom/common/file.te +++ b/sepolicy/vendor/qcom/common/file.te @@ -1,3 +1,4 @@ +type sysfs_battery_supply, sysfs_type, fs_type; type sysfs_camera, sysfs_type, fs_type; type sysfs_devfreq, fs_type, sysfs_type; type sysfs_easel, sysfs_type, fs_type; @@ -31,6 +32,7 @@ type sysfs_rpm, sysfs_type, fs_type; type sysfs_wlc, sysfs_type, fs_type; type sysfs_esim, sysfs_type, fs_type; type sysfs_wifi_conmode, sysfs_type, fs_type; +type sysfs_kgsl_proc, sysfs_type, fs_type; type debugfs_clk, debugfs_type, fs_type; type debugfs_ion, debugfs_type, fs_type; diff --git a/sepolicy/vendor/qcom/common/file_contexts b/sepolicy/vendor/qcom/common/file_contexts index 9b90a7bc..8338bc14 100644 --- a/sepolicy/vendor/qcom/common/file_contexts +++ b/sepolicy/vendor/qcom/common/file_contexts @@ -122,7 +122,7 @@ /vendor/bin/cnd u:object_r:cnd_exec:s0 /vendor/bin/easelmanagerd u:object_r:easel_exec:s0 /vendor/bin/hw/android\.hardware\.usb@1\.3-service\.bonito u:object_r:hal_usb_impl_exec:s0 -/vendor/bin/chre u:object_r:chre_exec:s0 +/vendor/bin/chre_daemon_msm u:object_r:chre_exec:s0 /vendor/bin/time_daemon u:object_r:time_daemon_exec:s0 /vendor/bin/tcpdump_logger u:object_r:tcpdump_logger_exec:s0 /vendor/bin/imsrcsd u:object_r:hal_rcsservice_exec:s0 @@ -154,6 +154,8 @@ /vendor/bin/hw/vendor\.qti\.hardware\.display\.allocator@1\.0-service u:object_r:hal_graphics_allocator_default_exec:s0 /vendor/bin/hw/vendor\.google\.wireless_charger@1\.0-service-vendor u:object_r:hal_wlc_exec:s0 /vendor/bin/hw/hardware\.google\.light@1\.0-service u:object_r:hal_light_default_exec:s0 +/vendor/bin/hw/vendor\.qti.hardware\.memtrack-service u:object_r:hal_memtrack_default_exec:s0 +/vendor/bin/hw/android\.hardware\.boot-service\.qti u:object_r:hal_bootctl_default_exec:s0 ############################################### # same-process HAL files and their dependencies diff --git a/sepolicy/vendor/qcom/common/genfs_contexts b/sepolicy/vendor/qcom/common/genfs_contexts index cf789191..57d7ee77 100644 --- a/sepolicy/vendor/qcom/common/genfs_contexts +++ b/sepolicy/vendor/qcom/common/genfs_contexts @@ -34,6 +34,7 @@ genfscon sysfs /devices/platform/soc/1d84000.ufshc/slowio_unmap_cnt u:o genfscon sysfs /devices/platform/soc/1d84000.ufshc/slowio_sync_cnt u:object_r:sysfs_scsi_devices_0000:s0 genfscon sysfs /class/uio u:object_r:sysfs_uio:s0 +genfscon sysfs /devices/virtual/kgsl/kgsl/proc u:object_r:sysfs_kgsl_proc:s0 genfscon sysfs /devices/platform/soc/894000.i2c u:object_r:sysfs_msm_subsys:s0 genfscon sysfs /devices/platform/soc/soc:qcom,gpubw u:object_r:sysfs_msm_subsys:s0 genfscon sysfs /devices/platform/soc/c440000.qcom,spmi u:object_r:sysfs_msm_subsys:s0 diff --git a/sepolicy/vendor/qcom/common/hal_fingerprint.te b/sepolicy/vendor/qcom/common/hal_fingerprint.te index 0f8d65cc..75b485bc 100644 --- a/sepolicy/vendor/qcom/common/hal_fingerprint.te +++ b/sepolicy/vendor/qcom/common/hal_fingerprint.te @@ -5,11 +5,11 @@ allow hal_fingerprint sysfs_msm_subsys:file r_file_perms; allow hal_fingerprint sysfs_camera:dir search; allow hal_fingerprint sysfs_camera:file r_file_perms; allow hal_fingerprint sysfs_leds:dir search; -allow hal_fingerprint sysfs_leds:file r_file_perms; +allow { hal_fingerprint -coredomain } sysfs_leds:file r_file_perms; allow hal_fingerprint sysfs_pinctrl:dir search; allow hal_fingerprint sysfs_pinctrl:file r_file_perms; allow hal_fingerprint tee_device:file rw_file_perms; -allow hal_fingerprint tee_device:chr_file rw_file_perms; +allow { hal_fingerprint -coredomain } tee_device:chr_file rw_file_perms; allow hal_fingerprint uhid_device:chr_file rw_file_perms; diff --git a/sepolicy/vendor/qcom/common/hal_lineage_health_default.te b/sepolicy/vendor/qcom/common/hal_lineage_health_default.te new file mode 100644 index 00000000..3e05511a --- /dev/null +++ b/sepolicy/vendor/qcom/common/hal_lineage_health_default.te @@ -0,0 +1 @@ +allow hal_lineage_health_default sysfs_msm_subsys:dir search; diff --git a/sepolicy/vendor/qcom/common/hal_memtrack_default.te b/sepolicy/vendor/qcom/common/hal_memtrack_default.te index 4ffa74c2..4882eca2 100644 --- a/sepolicy/vendor/qcom/common/hal_memtrack_default.te +++ b/sepolicy/vendor/qcom/common/hal_memtrack_default.te @@ -1 +1,2 @@ -allow hal_memtrack_default debugfs_kgsl:file { open read getattr }; +allow hal_memtrack_default sysfs_kgsl_proc:file r_file_perms; +allow hal_memtrack_default sysfs_kgsl_proc:dir search; diff --git a/setup-makefiles.py b/setup-makefiles.py new file mode 100755 index 00000000..c98616b6 --- /dev/null +++ b/setup-makefiles.py @@ -0,0 +1,13 @@ +#!/bin/bash +# +# SPDX-FileCopyrightText: 2024 The LineageOS Project +# SPDX-License-Identifier: Apache-2.0 +# + +set -e + +MY_DIR="$(cd "$(dirname "${0}")"; pwd -P)" + +pushd "${MY_DIR}/bonito" +./setup-makefiles.py +popd diff --git a/ueventd.hardware.rc b/ueventd.hardware.rc index 1747a0b9..196b3a8d 100644 --- a/ueventd.hardware.rc +++ b/ueventd.hardware.rc @@ -130,3 +130,7 @@ firmware_directories /vendor/firmware_mnt/image/ # socinfo /sys/devices/soc0 serial_number 0000 root root + +# Charger +/sys/class/power_supply/battery charge_disable 0660 system system +/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-00/c440000.qcom,spmi:qcom,pm660@0:qcom,qpnp-smb2/power_supply/battery charge_disable 0660 system system |
