diff --git a/Android.mk b/Android.mk index f017ce53..2134c69f 100755 --- a/Android.mk +++ b/Android.mk @@ -418,22 +418,12 @@ ifneq ($(TARGET_ARCH), arm64) else LOCAL_LDFLAGS += -Wl,-dynamic-linker,/sbin/linker64 endif -ifneq ($(TW_USE_TOOLBOX), true) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) - LOCAL_POST_INSTALL_CMD := \ - $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/sbin && \ - ln -sf /sbin/busybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/sh - endif -else - ifneq ($(wildcard external/toybox/Android.mk),) - TWRP_REQUIRED_MODULES += toybox_symlinks - endif - ifneq ($(wildcard external/zip/Android.mk),) - TWRP_REQUIRED_MODULES += zip - endif - ifneq ($(wildcard external/unzip/Android.mk),) - TWRP_REQUIRED_MODULES += unzip - endif + +ifneq ($(wildcard external/zip/Android.mk),) + TWRP_REQUIRED_MODULES += zip +endif +ifneq ($(wildcard external/unzip/Android.mk),) + TWRP_REQUIRED_MODULES += unzip endif ifneq ($(TW_NO_EXFAT), true) @@ -561,48 +551,7 @@ endif LOCAL_POST_INSTALL_CMD := \ $(hide) cp -f $(PRODUCT_OUT)/obj/ETC/file_contexts.bin_intermediates/file_contexts.concat.tmp $(TARGET_RECOVERY_ROOT_OUT)/file_contexts -#include $(BUILD_PHONY_PACKAGE) - -ifneq ($(TW_USE_TOOLBOX), true) -include $(CLEAR_VARS) -# Create busybox symlinks... gzip and gunzip are excluded because those need to link to pigz instead -BUSYBOX_LINKS := $(shell cat external/busybox/busybox-full.links) -exclude := tune2fs mke2fs mkdosfs mkfs.vfat gzip gunzip - -# Having /sbin/modprobe present on 32 bit devices with can cause a massive -# performance problem if the kernel has CONFIG_MODULES=y -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0) - ifneq ($(TARGET_ARCH), arm64) - ifneq ($(TARGET_ARCH), x86_64) - exclude += modprobe - endif - endif -endif - -# If busybox does not have restorecon, assume it does not have SELinux support. -# Then, let toolbox provide 'ls' so -Z is available to list SELinux contexts. -ifeq ($(filter restorecon, $(notdir $(BUSYBOX_LINKS))),) - exclude += ls -endif - -RECOVERY_BUSYBOX_TOOLS := $(filter-out $(exclude), $(notdir $(BUSYBOX_LINKS))) -RECOVERY_BUSYBOX_SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/, $(RECOVERY_BUSYBOX_TOOLS)) -$(RECOVERY_BUSYBOX_SYMLINKS): BUSYBOX_BINARY := busybox -$(RECOVERY_BUSYBOX_SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Symlink: $@ -> $(BUSYBOX_BINARY)" - @mkdir -p $(dir $@) - @rm -rf $@ - $(hide) ln -sf $(BUSYBOX_BINARY) $@ - -include $(CLEAR_VARS) -LOCAL_MODULE := busybox_symlinks -LOCAL_MODULE_TAGS := optional -LOCAL_ADDITIONAL_DEPENDENCIES := $(RECOVERY_BUSYBOX_SYMLINKS) -ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18)) -ALL_DEFAULT_INSTALLED_MODULES += $(RECOVERY_BUSYBOX_SYMLINKS) -endif -RECOVERY_BUSYBOX_SYMLINKS := -endif # !TW_USE_TOOLBOX +include $(BUILD_PHONY_PACKAGE) # recovery-persist (system partition dynamic executable run after /data mounts) # =============================== @@ -858,7 +807,6 @@ include $(commands_TWRP_local_path)/injecttwrp/Android.mk \ $(commands_TWRP_local_path)/minzip/Android.mk \ $(commands_TWRP_local_path)/dosfstools/Android.mk \ $(commands_TWRP_local_path)/etc/Android.mk \ - $(commands_TWRP_local_path)/toybox/Android.mk \ $(commands_TWRP_local_path)/simg2img/Android.mk \ $(commands_TWRP_local_path)/adbbu/Android.mk \ $(commands_TWRP_local_path)/libpixelflinger/Android.mk \ diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk index 689d58b0..cd806a8f 100755 --- a/prebuilt/Android.mk +++ b/prebuilt/Android.mk @@ -15,51 +15,48 @@ RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dump_image RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/flash_image RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/erase_image RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/bu -ifneq ($(TW_USE_TOOLBOX), true) - RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/busybox + +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0) + RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/sh else - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0) - RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/sh + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/sh +endif +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so +ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 23; echo $$?),0) + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 29; echo $$?),0) + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/grep else - RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/sh + RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/grep endif - RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 23; echo $$?),0) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 29; echo $$?),0) - RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/grep - else - RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/grep - endif - LOCAL_POST_INSTALL_CMD += $(hide) if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep" ]; then \ - rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; \ - if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep" ]; then \ - rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; - # RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/toybox - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0) - RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dd - endif - endif - ifneq ($(wildcard external/zip/Android.mk),) - RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/zip - endif - ifneq ($(wildcard external/unzip/Android.mk),) - RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/unzip - endif - ifneq ($(wildcard system/core/libziparchive/Android.bp),) - RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/unzip - endif - ifneq ($(wildcard external/one-true-awk/Android.bp),) - RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/awk + LOCAL_POST_INSTALL_CMD += $(hide) if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep" ]; then \ + rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; \ + if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep" ]; then \ + rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0) + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dd endif endif + ifneq ($(wildcard external/zip/Android.mk),) + RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/zip + endif + ifneq ($(wildcard external/unzip/Android.mk),) + RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/unzip + endif + ifneq ($(wildcard system/core/libziparchive/Android.bp),) + RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/unzip + endif + ifneq ($(wildcard external/one-true-awk/Android.bp),) + RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/awk + endif endif + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/pigz RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/fsck.fat RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/fatlabel RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/mkfs.fat ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 27; echo $$?),0) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 29; echo $$?),0) + ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 29; echo $$?),0) RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/adbd else RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/adbd @@ -105,12 +102,14 @@ ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 29; echo $$?),0) RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libadbd_services.so RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libcap.so RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libminijail.so + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/toybox # RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libinit.so RELINK_SOURCE_FILES += $(TARGET_ROOT_OUT)/../system/lib64/libdl_android.so else RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libc.so RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libdl.so RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libm.so + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/toybox endif RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcutils.so RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrecovery.so @@ -454,22 +453,29 @@ ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0) RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_misc.so endif -TW_BB_SYMLINKS := -ifneq ($(TW_USE_TOOLBOX), true) - TW_BB_SYMLINKS := busybox_symlinks -endif +#toybox links +toybox_links := acpi base64 basename bc blockdev cal cat chcon chgrp chmod chown chroot chrt cksum clear \ + cmp comm cp cpio cut date dd devmem df diff dirname dmesg dos2unix du echo env expand expr fallocate \ + false file find flock fmt free fsync getconf getenforce groups gunzip gzip head hostname hwclock i2cdetect \ + i2cdump i2cget i2cset iconv id ifconfig inotifyd insmod install ionice iorenice kill killall ln load_policy \ + log logname losetup ls lsmod lsof lspci lsusb md5sum microcom mkdir mkfifo mknod mkswap mktemp modinfo modprobe \ + more mount mountpoint mv nc netcat netstat nice nl nohup nproc nsenter od paste patch pgrep pidof pkill pmap \ + printenv printf ps pwd readlink realpath renice restorecon rm rmdir rmmod runcon sed sendevent seq setenforce \ + setprop setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort split start stat stop strings stty \ + swapoff swapon sync sysctl tac tail tar taskset tee time timeout top touch toybox tr true truncate tty ulimit \ + umount uname uniq unix2dos unlink unshare uptime usleep uudecode uuencode uuidgen vmstat watch wc which whoami \ + xargs xxd yes zcat +TOYBOX_LINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/system/bin/, $(toybox_links)) -# GEN := $(intermediates)/teamwin -# $(GEN): $(RELINK) $(TW_BB_SYMLINKS) toolbox_symlinks - -#relink recovery executables linker to /sbin +#relink recovery executables linker to /sbin and move symlinks include $(CLEAR_VARS) LOCAL_MODULE := relink LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin -LOCAL_POST_INSTALL_CMD += $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES) -LOCAL_REQUIRED_MODULES := linker toolbox_symlinks adbd libdl_android +LOCAL_POST_INSTALL_CMD += $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES) && \ + mv $(TOYBOX_LINKS) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ +LOCAL_REQUIRED_MODULES := linker adbd libdl_android toybox include $(BUILD_PHONY_PACKAGE) #relink init @@ -602,16 +608,16 @@ ifeq ($(TW_INCLUDE_DUMLOCK), true) include $(BUILD_PREBUILT) endif -#ifeq ($(TW_USE_TOOLBOX), true) -# include $(CLEAR_VARS) -# LOCAL_MODULE := mkshrc_twrp -# LOCAL_MODULE_STEM := mkshrc -# LOCAL_MODULE_TAGS := optional -# LOCAL_MODULE_CLASS := ETC -# LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc -# LOCAL_SRC_FILES := $(LOCAL_MODULE) -# include $(BUILD_PREBUILT) -#endif +ifeq ($(TW_USE_TOOLBOX), true) + include $(CLEAR_VARS) + LOCAL_MODULE := mkshrc_twrp + LOCAL_MODULE_STEM := mkshrc + LOCAL_MODULE_TAGS := optional + LOCAL_MODULE_CLASS := ETC + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) +endif #TWRP App "placeholder" include $(CLEAR_VARS) diff --git a/prebuilt/fix_permissions.sh b/prebuilt/fix_permissions.sh deleted file mode 100755 index 3723a126..00000000 --- a/prebuilt/fix_permissions.sh +++ /dev/null @@ -1,484 +0,0 @@ -#!/sbin/sh -# -# Warning: if you want to run this script in cm-recovery change the above to #!/sbin/sh -# -# fix_permissions - fixes permissions on Android data directories after upgrade -# shade@chemlab.org -# -# original concept: http://blog.elsdoerfer.name/2009/05/25/android-fix-package-uid-mismatches/ -# implementation by: Cyanogen -# improved by: ankn, smeat, thenefield, farmatito, rikupw, Kastro -# -# v1.1-v1.31r3 - many improvements and concepts from XDA developers. -# v1.34 through v2.00 - A lot of frustration [by Kastro] -# v2.01 - Completely rewrote the script for SPEED, thanks for the input farmatito -# /data/data depth recursion is tweaked; -# fixed single mode; -# functions created for modularity; -# logging can be disabled via CLI for more speed; -# runtime computation added to end (Runtime: mins secs); -# progress (current # of total) added to screen; -# fixed CLI argument parsing, now you can have more than one option!; -# debug cli option; -# verbosity can be disabled via CLI option for less noise;; -# [by Kastro, (XDA: k4str0), twitter;mattcarver] -# v2.02 - ignore com.htc.resources.apk if it exists and minor code cleanups, -# fix help text, implement simulated run (-s) [farmatito] -# v2.03 - fixed chown group ownership output [Kastro] -# v2.04 - replaced /system/sd with $SD_EXT_DIRECTORY [Firerat] -VERSION="2.04" - -# Defaults -DEBUG=0 # Debug off by default -LOGGING=1 # Logging on by default -VERBOSE=1 # Verbose on by default - -# Messages -UID_MSG="Changing user ownership for:" -GID_MSG="Changing group ownership for:" -PERM_MSG="Changing permissions for:" - -# Programs needed -ECHO="busybox echo" -GREP="busybox grep" -EGREP="busybox egrep" -CAT="busybox cat" -CHOWN="busybox chown" -CHMOD="busybox chmod" -MOUNT="busybox mount" -UMOUNT="busybox umount" -CUT="busybox cut" -FIND="busybox find" -LS="busybox ls" -TR="busybox tr" -TEE="busybox tee" -TEST="busybox test" -SED="busybox sed" -RM="busybox rm" -WC="busybox wc" -EXPR="busybox expr" -DATE="busybox date" - -# Initialise vars -CODEPATH="" -UID="" -GID="" -PACKAGE="" -REMOVE=0 -NOSYSTEM=0 -ONLY_ONE="" -SIMULATE=0 -SYSREMOUNT=0 -SYSMOUNT=0 -DATAMOUNT=0 -SYSSDMOUNT=0 -FP_STARTTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" ) -FP_STARTEPOCH=$( $DATE +%s ) -if $TEST "$SD_EXT_DIRECTORY" = ""; then - #check for mount point, /system/sd included in tests for backward compatibility - for MP in /sd-ext /system/sd;do - if $TEST -d $MP; then - SD_EXT_DIRECTORY=$MP - break - fi - done -fi -fp_usage() -{ - $ECHO "Usage $0 [OPTIONS] [APK_PATH]" - $ECHO " -d turn on debug" - $ECHO " -f fix only package APK_PATH" - $ECHO " -l disable logging for this run (faster)" - $ECHO " -r remove stale data directories" - $ECHO " of uninstalled packages while fixing permissions" - $ECHO " -s simulate only" - $ECHO " -u check only non-system directories" - $ECHO " -v disable verbosity for this run (less output)" - $ECHO " -V print version" - $ECHO " -h this help" -} - -fp_parseargs() -{ - # Parse options - while $TEST $# -ne 0; do - case "$1" in - -d) - DEBUG=1 - ;; - -f) - if $TEST $# -lt 2; then - $ECHO "$0: missing argument for option $1" - exit 1 - else - if $TEST $( $ECHO $2 | $CUT -c1 ) != "-"; then - ONLY_ONE=$2 - shift; - else - $ECHO "$0: missing argument for option $1" - exit 1 - fi - fi - ;; - -r) - REMOVE=1 - ;; - -s) - SIMULATE=1 - ;; - -l) - if $TEST $LOGGING -eq 0; then - LOGGING=1 - else - LOGGING=0 - fi - ;; - -v) - if $TEST $VERBOSE -eq 0; then - VERBOSE=1 - else - VERBOSE=0 - fi - ;; - -u) - NOSYSTEM=1 - ;; - -V) - $ECHO "$0 $VERSION" - exit 0 - ;; - -h) - fp_usage - exit 0 - ;; - -*) - $ECHO "$0: unknown option $1" - $ECHO - fp_usage - exit 1 - ;; - esac - shift; - done -} - -fp_print() -{ - MSG=$@ - if $TEST $LOGGING -eq 1; then - $ECHO $MSG | $TEE -a $LOG_FILE - else - $ECHO $MSG - fi -} - -fp_start() -{ - if $TEST $SIMULATE -eq 0 ; then - if $TEST $( $GREP -c " /system " "/proc/mounts" ) -ne 0; then - DEVICE=$( $GREP " /system " "/proc/mounts" | $CUT -d ' ' -f1 ) - if $TEST $DEBUG -eq 1; then - fp_print "/system mounted on $DEVICE" - fi - if $TEST $( $GREP " /system " "/proc/mounts" | $GREP -c " ro " ) -ne 0; then - $MOUNT -o remount,rw $DEVICE /system - SYSREMOUNT=1 - fi - else - $MOUNT /system > /dev/null 2>&1 - SYSMOUNT=1 - fi - - if $TEST $( $GREP -c " /data " "/proc/mounts" ) -eq 0; then - $MOUNT /data > /dev/null 2>&1 - DATAMOUNT=1 - fi - - if $TEST -e /dev/block/mmcblk0p2 && $TEST $( $GREP -c " $SD_EXT_DIRECTORY " "/proc/mounts" ) -eq 0; then - $MOUNT $SD_EXT_DIRECTORY > /dev/null 2>&1 - SYSSDMOUNT=1 - fi - fi - if $TEST $( $MOUNT | $GREP -c /sdcard ) -eq 0; then - LOG_FILE="/data/fix_permissions.log" - else - LOG_FILE="/sdcard/fix_permissions.log" - fi - if $TEST ! -e "$LOG_FILE"; then - > $LOG_FILE - fi - - fp_print "$0 $VERSION started at $FP_STARTTIME" -} - -fp_chown_uid() -{ - FP_OLDUID=$1 - FP_UID=$2 - FP_FILE=$3 - - #if user ownership doesn't equal then change them - if $TEST "$FP_OLDUID" != "$FP_UID"; then - if $TEST $VERBOSE -ne 0; then - fp_print "$UID_MSG $FP_FILE from '$FP_OLDUID' to '$FP_UID'" - fi - if $TEST $SIMULATE -eq 0; then - $CHOWN $FP_UID "$FP_FILE" - fi - fi -} - -fp_chown_gid() -{ - FP_OLDGID=$1 - FP_GID=$2 - FP_FILE=$3 - - #if group ownership doesn't equal then change them - if $TEST "$FP_OLDGID" != "$FP_GID"; then - if $TEST $VERBOSE -ne 0; then - fp_print "$GID_MSG $FP_FILE from '$FP_OLDGID' to '$FP_GID'" - fi - if $TEST $SIMULATE -eq 0; then - $CHOWN :$FP_GID "$FP_FILE" - fi - fi -} - -fp_chmod() -{ - FP_OLDPER=$1 - FP_OLDPER=$( $ECHO $FP_OLDPER | cut -c2-10 ) - FP_PERSTR=$2 - FP_PERNUM=$3 - FP_FILE=$4 - - #if the permissions are not equal - if $TEST "$FP_OLDPER" != "$FP_PERSTR"; then - if $TEST $VERBOSE -ne 0; then - fp_print "$PERM_MSG $FP_FILE from '$FP_OLDPER' to '$FP_PERSTR' ($FP_PERNUM)" - fi - #change the permissions - if $TEST $SIMULATE -eq 0; then - $CHMOD $FP_PERNUM "$FP_FILE" - fi - fi -} - -fp_all() -{ - FP_NUMS=$( $CAT /data/system/packages.xml | $EGREP "^ /dev/null 2>&1 - fi - - if $TEST $SYSSDMOUNT -eq 1; then - $UMOUNT $SD_EXT_DIRECTORY > /dev/null 2>&1 - fi - - if $TEST $SYSMOUNT -eq 1; then - $UMOUNT /system > /dev/null 2>&1 - fi - - if $TEST $DATAMOUNT -eq 1; then - $UMOUNT /data > /dev/null 2>&1 - fi - - FP_ENDTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" ) - FP_ENDEPOCH=$( $DATE +%s ) - - date_diff $FP_STARTEPOCH $FP_ENDEPOCH - - fp_print "$0 $VERSION ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)" -} - -#MAIN SCRIPT - -fp_parseargs $@ -fp_start -if $TEST "$ONLY_ONE" != "" -a "$ONLY_ONE" != "0" ; then - fp_single "$ONLY_ONE" -else - fp_all -fi -fp_end diff --git a/toolbox/Android.mk b/toolbox/Android.mk deleted file mode 100755 index 4a2546ed..00000000 --- a/toolbox/Android.mk +++ /dev/null @@ -1,357 +0,0 @@ -TWRP_TOOLBOX_PATH := $(call my-dir) -LOCAL_PATH := system/core/toolbox -include $(CLEAR_VARS) - -OUR_TOOLS := - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) - OUR_TOOLS := \ - start \ - stop -endif - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) - OUR_TOOLS += \ - getprop \ - setprop -endif - -# If busybox does not have SELinux support, provide these tools with toolbox. -# Note that RECOVERY_BUSYBOX_TOOLS will be empty if TW_USE_TOOLBOX == true. -TOOLS_FOR_SELINUX := \ - ls - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) - TOOLS_FOR_SELINUX += \ - load_policy \ - getenforce \ - chcon \ - restorecon \ - runcon \ - getsebool \ - setsebool -endif - -OUR_TOOLS += $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(TOOLS_FOR_SELINUX)) - -# toolbox setenforce is used during init, so it needs to be included here -# symlink is omitted at the very end if busybox already provides this -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0) - OUR_TOOLS += setenforce -endif - -ifeq ($(TW_USE_TOOLBOX), true) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0) - # These are the only toolbox tools in M. The rest are now in toybox. - BSD_TOOLS := - - OUR_TOOLS := \ - newfs_msdos - - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 26; echo $$?),0) - OUR_TOOLS += \ - iftop \ - ioctl \ - nandread \ - prlimit \ - sendevent \ - start \ - stop - endif - - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) - BSD_TOOLS += \ - dd \ - du \ - - OUR_TOOLS += \ - df \ - ionice \ - log \ - ls \ - lsof \ - mount \ - ps \ - renice \ - top \ - uptime \ - watchprops - endif - else - ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) - OUR_TOOLS += \ - mknod \ - nohup - BSD_TOOLS := \ - cat \ - chown \ - cp \ - dd \ - du \ - grep \ - kill \ - ln \ - mv \ - printenv \ - rm \ - rmdir \ - sleep \ - sync - else - OUR_TOOLS += \ - cat \ - chown \ - dd \ - du \ - kill \ - ln \ - mv \ - printenv \ - rm \ - rmdir \ - setconsole \ - sleep \ - sync - endif - - OUR_TOOLS += \ - chmod \ - clear \ - cmp \ - date \ - df \ - dmesg \ - getevent \ - hd \ - id \ - ifconfig \ - iftop \ - insmod \ - ioctl \ - ionice \ - log \ - lsmod \ - lsof \ - md5 \ - mkdir \ - mkswap \ - mount \ - nandread \ - netstat \ - newfs_msdos \ - notify \ - ps \ - readlink \ - renice \ - rmmod \ - route \ - schedtop \ - sendevent \ - smd \ - swapoff \ - swapon \ - top \ - touch \ - umount \ - uptime \ - vmstat \ - watchprops \ - wipe - endif -endif - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0) - # Special rules for 9.0 - OUR_TOOLS += getevent - LOCAL_C_INCLUDES += $(TWRP_TOOLBOX_PATH) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0) - LOCAL_WHOLE_STATIC_LIBRARIES += libtoolbox_dd - endif - - ifneq ($(TW_USE_TOOLBOX), true) - OUR_TOOLS += newfs_msdos - endif -endif - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) - ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) - OUR_TOOLS += r - endif -endif - -LOCAL_SRC_FILES := \ - toolbox.c \ - $(patsubst %,%.c,$(OUR_TOOLS)) - -ifneq ($(wildcard system/core/toolbox/dynarray.c),) - LOCAL_SRC_FILES += dynarray.c -endif - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) - LOCAL_SRC_FILES += \ - pwcache.c \ - upstream-netbsd/lib/libc/gen/getbsize.c \ - upstream-netbsd/lib/libc/gen/humanize_number.c \ - upstream-netbsd/lib/libc/stdlib/strsuftoll.c \ - upstream-netbsd/lib/libc/string/swab.c \ - upstream-netbsd/lib/libutil/raise_default_signal.c -endif - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) - LOCAL_CFLAGS += \ - -std=gnu99 \ - -Werror -Wno-unused-parameter \ - -I$(LOCAL_PATH)/upstream-netbsd/include \ - -include bsd-compatibility.h -endif - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) - LOCAL_C_INCLUDES += external/openssl/include -else - LOCAL_C_INCLUDES += bionic/libc/bionic -endif - -LOCAL_SHARED_LIBRARIES += libcutils - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22)) - ifeq ($(TW_USE_TOOLBOX), true) - LOCAL_SHARED_LIBRARIES += libcrypto - endif -else - LOCAL_SHARED_LIBRARIES += \ - libc \ - liblog -endif - -LOCAL_SHARED_LIBRARIES += libselinux - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) - # libusbhost is only used by lsusb, and that isn't usually included in toolbox. - # The linker strips out all the unused library code in the normal case. - LOCAL_STATIC_LIBRARIES := libusbhost - LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS)) -endif - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0) - # Rule to make getprop and setprop in M trees where toybox normally - # provides these tools. Toybox does not allow for easy dynamic - # configuration, so we would have to include the entire toybox binary - # which takes up more space than is necessary so long as we are still - # including busybox. -ifneq ($(TW_USE_TOOLBOX), true) - LOCAL_SRC_FILES += \ - ../../../$(TWRP_TOOLBOX_PATH)/setprop.c \ - ../../../$(TWRP_TOOLBOX_PATH)/ls.c - OUR_TOOLS += setprop - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 28; echo $$?),0) - # Special rules for <= 8.1 - LOCAL_SRC_FILES += \ - ../../../$(TWRP_TOOLBOX_PATH)/getprop.c - OUR_TOOLS += getprop - endif -endif -endif -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 28; echo $$?),0) - # Rule for making start and stop in N trees - LOCAL_SRC_FILES += \ - ../../../$(TWRP_TOOLBOX_PATH)/start.c \ - ../../../$(TWRP_TOOLBOX_PATH)/stop.c - OUR_TOOLS += start stop - endif -endif -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0) - LOCAL_SRC_FILES += getprop.cpp - LOCAL_SHARED_LIBRARIES += libbase - LOCAL_STATIC_LIBRARIES += libpropertyinfoparser - LOCAL_CPPFLAGS += -std=c++17 - OUR_TOOLS += getprop -endif - -LOCAL_MODULE := toolbox_recovery -LOCAL_MODULE_STEM := toolbox -LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin -LOCAL_MODULE_TAGS := optional -LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-const-variable - -# Including this will define $(intermediates) below -include $(BUILD_EXECUTABLE) - -$(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h - -ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23)) - ALL_TOOLS := $(BSD_TOOLS) $(OUR_TOOLS) -else - ALL_TOOLS := $(OUR_TOOLS) -endif - -TOOLS_H := $(intermediates)/tools.h -$(TOOLS_H): PRIVATE_TOOLS := $(ALL_TOOLS) -$(TOOLS_H): PRIVATE_CUSTOM_TOOL = echo "/* file generated automatically */" > $@ ; for t in $(PRIVATE_TOOLS) ; do echo "TOOL($$t)" >> $@ ; done -$(TOOLS_H): - $(transform-generated-source) - -# toolbox setenforce is used during init in non-symlink form, so it was -# required to be included as part of the suite above. if busybox already -# provides setenforce, we can omit the toolbox symlink -TEMP_TOOLS := $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(ALL_TOOLS)) -ALL_TOOLS := $(TEMP_TOOLS) - -# Make /sbin/toolbox launchers for each tool -SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS)) -$(SYMLINKS): TOOLBOX_BINARY := $(LOCAL_MODULE_STEM) -$(SYMLINKS): $(LOCAL_INSTALLED_MODULE) - @echo "Symlink: $@ -> $(TOOLBOX_BINARY)" - @mkdir -p $(dir $@) - @rm -rf $@ - $(hide) ln -sf $(TOOLBOX_BINARY) $@ - -include $(CLEAR_VARS) -LOCAL_MODULE := toolbox_symlinks -LOCAL_MODULE_TAGS := optional -LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS) -include $(BUILD_PHONY_PACKAGE) - -ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18)) - # Only needed if the build system lacks support for LOCAL_ADDITIONAL_DEPENDENCIES - ALL_DEFAULT_INSTALLED_MODULES += $(SYMLINKS) - ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \ - $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS) -endif - -ifeq ($(TW_USE_TOOLBOX), true) - ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) - include $(CLEAR_VARS) - LOCAL_MODULE := dd_twrp - LOCAL_MODULE_STEM := dd - LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin - LOCAL_MODULE_TAGS := optional - LOCAL_CFLAGS := -include bsd-compatibility.h -DNO_CONV -Wno-unused-parameter - LOCAL_C_INCLUDES := system/core/toolbox/upstream-netbsd/include/ system/core/toolbox/upstream-netbsd/bin/dd system/core/toolbox - - LOCAL_SHARED_LIBRARIES := \ - libcutils \ - - LOCAL_SRC_FILES += \ - upstream-netbsd/bin/dd/args.c \ - upstream-netbsd/bin/dd/conv.c \ - upstream-netbsd/bin/dd/dd.c \ - upstream-netbsd/bin/dd/dd_hostops.c \ - upstream-netbsd/bin/dd/misc.c \ - upstream-netbsd/bin/dd/position.c \ - upstream-netbsd/lib/libc/gen/getbsize.c \ - upstream-netbsd/lib/libc/gen/humanize_number.c \ - upstream-netbsd/lib/libc/stdlib/strsuftoll.c \ - upstream-netbsd/lib/libc/string/swab.c \ - upstream-netbsd/lib/libutil/raise_default_signal.c - - include $(BUILD_EXECUTABLE) - endif -endif - -SYMLINKS := -ALL_TOOLS := -BSD_TOOLS := -OUR_TOOLS := -TEMP_TOOLS := -TOOLS_FOR_SELINUX := diff --git a/toolbox/dynarray.h b/toolbox/dynarray.h deleted file mode 100644 index 0ca54fdf..00000000 --- a/toolbox/dynarray.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef DYNARRAY_H -#define DYNARRAY_H - -// These functions are now found in system/core/toolbox/ls.c - -#include - -/* simple dynamic array of pointers */ -typedef struct { - int count; - int capacity; - void** items; -} dynarray_t; - -#define DYNARRAY_INITIALIZER { 0, 0, NULL } - -void dynarray_init( dynarray_t *a ); -void dynarray_done( dynarray_t *a ); - -void dynarray_append( dynarray_t *a, void* item ); - -/* Used to iterate over a dynarray_t - * _array :: pointer to the array - * _item_type :: type of objects pointed to by the array - * _item :: name of a local variable defined within the loop - * with type '_item_type' - * _stmnt :: C statement that will be executed in each iteration. - * - * You case use 'break' and 'continue' within _stmnt - * - * This macro is only intended for simple uses. I.e. do not add or - * remove items from the array during iteration. - */ -#define DYNARRAY_FOREACH_TYPE(_array,_item_type,_item,_stmnt) \ - do { \ - int _nn_##__LINE__ = 0; \ - for (;_nn_##__LINE__ < (_array)->count; ++ _nn_##__LINE__) { \ - _item_type _item = (_item_type)(_array)->items[_nn_##__LINE__]; \ - _stmnt; \ - } \ - } while (0) - -#define DYNARRAY_FOREACH(_array,_item,_stmnt) \ - DYNARRAY_FOREACH_TYPE(_array,void *,_item,_stmnt) - -/* Simple dynamic string arrays - * - * NOTE: A strlist_t owns the strings it references. - */ -typedef dynarray_t strlist_t; - -#define STRLIST_INITIALIZER DYNARRAY_INITIALIZER - -/* Used to iterate over a strlist_t - * _list :: pointer to strlist_t object - * _string :: name of local variable name defined within the loop with - * type 'char*' - * _stmnt :: C statement executed in each iteration - * - * This macro is only intended for simple uses. Do not add or remove items - * to/from the list during iteration. - */ -#define STRLIST_FOREACH(_list,_string,_stmnt) \ - DYNARRAY_FOREACH_TYPE(_list,char *,_string,_stmnt) - -void strlist_init( strlist_t *list ); - -/* note: strlist_done will free all the strings owned by the list */ -void strlist_done( strlist_t *list ); - -/* append a new string made of the first 'slen' characters from 'str' - * followed by a trailing zero. - */ -void strlist_append_b( strlist_t *list, const void* str, size_t slen ); - -/* append the copy of a given input string to a strlist_t */ -void strlist_append_dup( strlist_t *list, const char *str); - -/* sort the strings in a given list (using strcmp) */ -void strlist_sort( strlist_t *list ); - -#endif /* DYNARRAY_H */ diff --git a/toolbox/getprop.c b/toolbox/getprop.c deleted file mode 100644 index dcc0ea03..00000000 --- a/toolbox/getprop.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include - -#include - -#include "dynarray.h" - -static void record_prop(const char* key, const char* name, void* opaque) -{ - strlist_t* list = opaque; - char temp[PROP_VALUE_MAX + PROP_NAME_MAX + 16]; - snprintf(temp, sizeof temp, "[%s]: [%s]", key, name); - strlist_append_dup(list, temp); -} - -static void list_properties(void) -{ - strlist_t list[1] = { STRLIST_INITIALIZER }; - - /* Record properties in the string list */ - (void)property_list(record_prop, list); - - /* Sort everything */ - strlist_sort(list); - - /* print everything */ - STRLIST_FOREACH(list, str, printf("%s\n", str)); - - /* voila */ - strlist_done(list); -} - -int getprop_main(int argc, char *argv[]) -{ - if (argc == 1) { - list_properties(); - } else { - char value[PROPERTY_VALUE_MAX]; - char *default_value; - if(argc > 2) { - default_value = argv[2]; - } else { - default_value = ""; - } - - property_get(argv[1], value, default_value); - printf("%s\n", value); - } - return 0; -} diff --git a/toolbox/input.h-labels.h b/toolbox/input.h-labels.h deleted file mode 100644 index 430586e4..00000000 --- a/toolbox/input.h-labels.h +++ /dev/null @@ -1,741 +0,0 @@ -static struct label input_prop_labels[] = { - LABEL(INPUT_PROP_POINTER), - LABEL(INPUT_PROP_DIRECT), - LABEL(INPUT_PROP_BUTTONPAD), - LABEL(INPUT_PROP_SEMI_MT), - LABEL(INPUT_PROP_TOPBUTTONPAD), - LABEL(INPUT_PROP_POINTING_STICK), - LABEL(INPUT_PROP_ACCELEROMETER), - LABEL(INPUT_PROP_MAX), - LABEL_END, -}; -static struct label ev_labels[] = { - LABEL(EV_VERSION), - LABEL(EV_SYN), - LABEL(EV_KEY), - LABEL(EV_REL), - LABEL(EV_ABS), - LABEL(EV_MSC), - LABEL(EV_SW), - LABEL(EV_LED), - LABEL(EV_SND), - LABEL(EV_REP), - LABEL(EV_FF), - LABEL(EV_PWR), - LABEL(EV_FF_STATUS), - LABEL(EV_MAX), - LABEL_END, -}; -static struct label syn_labels[] = { - LABEL(SYN_REPORT), - LABEL(SYN_CONFIG), - LABEL(SYN_MT_REPORT), - LABEL(SYN_DROPPED), - LABEL(SYN_MAX), - LABEL_END, -}; -static struct label key_labels[] = { - LABEL(KEY_RESERVED), - LABEL(KEY_ESC), - LABEL(KEY_1), - LABEL(KEY_2), - LABEL(KEY_3), - LABEL(KEY_4), - LABEL(KEY_5), - LABEL(KEY_6), - LABEL(KEY_7), - LABEL(KEY_8), - LABEL(KEY_9), - LABEL(KEY_0), - LABEL(KEY_MINUS), - LABEL(KEY_EQUAL), - LABEL(KEY_BACKSPACE), - LABEL(KEY_TAB), - LABEL(KEY_Q), - LABEL(KEY_W), - LABEL(KEY_E), - LABEL(KEY_R), - LABEL(KEY_T), - LABEL(KEY_Y), - LABEL(KEY_U), - LABEL(KEY_I), - LABEL(KEY_O), - LABEL(KEY_P), - LABEL(KEY_LEFTBRACE), - LABEL(KEY_RIGHTBRACE), - LABEL(KEY_ENTER), - LABEL(KEY_LEFTCTRL), - LABEL(KEY_A), - LABEL(KEY_S), - LABEL(KEY_D), - LABEL(KEY_F), - LABEL(KEY_G), - LABEL(KEY_H), - LABEL(KEY_J), - LABEL(KEY_K), - LABEL(KEY_L), - LABEL(KEY_SEMICOLON), - LABEL(KEY_APOSTROPHE), - LABEL(KEY_GRAVE), - LABEL(KEY_LEFTSHIFT), - LABEL(KEY_BACKSLASH), - LABEL(KEY_Z), - LABEL(KEY_X), - LABEL(KEY_C), - LABEL(KEY_V), - LABEL(KEY_B), - LABEL(KEY_N), - LABEL(KEY_M), - LABEL(KEY_COMMA), - LABEL(KEY_DOT), - LABEL(KEY_SLASH), - LABEL(KEY_RIGHTSHIFT), - LABEL(KEY_KPASTERISK), - LABEL(KEY_LEFTALT), - LABEL(KEY_SPACE), - LABEL(KEY_CAPSLOCK), - LABEL(KEY_F1), - LABEL(KEY_F2), - LABEL(KEY_F3), - LABEL(KEY_F4), - LABEL(KEY_F5), - LABEL(KEY_F6), - LABEL(KEY_F7), - LABEL(KEY_F8), - LABEL(KEY_F9), - LABEL(KEY_F10), - LABEL(KEY_NUMLOCK), - LABEL(KEY_SCROLLLOCK), - LABEL(KEY_KP7), - LABEL(KEY_KP8), - LABEL(KEY_KP9), - LABEL(KEY_KPMINUS), - LABEL(KEY_KP4), - LABEL(KEY_KP5), - LABEL(KEY_KP6), - LABEL(KEY_KPPLUS), - LABEL(KEY_KP1), - LABEL(KEY_KP2), - LABEL(KEY_KP3), - LABEL(KEY_KP0), - LABEL(KEY_KPDOT), - LABEL(KEY_ZENKAKUHANKAKU), - LABEL(KEY_102ND), - LABEL(KEY_F11), - LABEL(KEY_F12), - LABEL(KEY_RO), - LABEL(KEY_KATAKANA), - LABEL(KEY_HIRAGANA), - LABEL(KEY_HENKAN), - LABEL(KEY_KATAKANAHIRAGANA), - LABEL(KEY_MUHENKAN), - LABEL(KEY_KPJPCOMMA), - LABEL(KEY_KPENTER), - LABEL(KEY_RIGHTCTRL), - LABEL(KEY_KPSLASH), - LABEL(KEY_SYSRQ), - LABEL(KEY_RIGHTALT), - LABEL(KEY_LINEFEED), - LABEL(KEY_HOME), - LABEL(KEY_UP), - LABEL(KEY_PAGEUP), - LABEL(KEY_LEFT), - LABEL(KEY_RIGHT), - LABEL(KEY_END), - LABEL(KEY_DOWN), - LABEL(KEY_PAGEDOWN), - LABEL(KEY_INSERT), - LABEL(KEY_DELETE), - LABEL(KEY_MACRO), - LABEL(KEY_MUTE), - LABEL(KEY_VOLUMEDOWN), - LABEL(KEY_VOLUMEUP), - LABEL(KEY_POWER), - LABEL(KEY_KPEQUAL), - LABEL(KEY_KPPLUSMINUS), - LABEL(KEY_PAUSE), - LABEL(KEY_SCALE), - LABEL(KEY_KPCOMMA), - LABEL(KEY_HANGEUL), - LABEL(KEY_HANJA), - LABEL(KEY_YEN), - LABEL(KEY_LEFTMETA), - LABEL(KEY_RIGHTMETA), - LABEL(KEY_COMPOSE), - LABEL(KEY_STOP), - LABEL(KEY_AGAIN), - LABEL(KEY_PROPS), - LABEL(KEY_UNDO), - LABEL(KEY_FRONT), - LABEL(KEY_COPY), - LABEL(KEY_OPEN), - LABEL(KEY_PASTE), - LABEL(KEY_FIND), - LABEL(KEY_CUT), - LABEL(KEY_HELP), - LABEL(KEY_MENU), - LABEL(KEY_CALC), - LABEL(KEY_SETUP), - LABEL(KEY_SLEEP), - LABEL(KEY_WAKEUP), - LABEL(KEY_FILE), - LABEL(KEY_SENDFILE), - LABEL(KEY_DELETEFILE), - LABEL(KEY_XFER), - LABEL(KEY_PROG1), - LABEL(KEY_PROG2), - LABEL(KEY_WWW), - LABEL(KEY_MSDOS), - LABEL(KEY_COFFEE), - LABEL(KEY_ROTATE_DISPLAY), - LABEL(KEY_CYCLEWINDOWS), - LABEL(KEY_MAIL), - LABEL(KEY_BOOKMARKS), - LABEL(KEY_COMPUTER), - LABEL(KEY_BACK), - LABEL(KEY_FORWARD), - LABEL(KEY_CLOSECD), - LABEL(KEY_EJECTCD), - LABEL(KEY_EJECTCLOSECD), - LABEL(KEY_NEXTSONG), - LABEL(KEY_PLAYPAUSE), - LABEL(KEY_PREVIOUSSONG), - LABEL(KEY_STOPCD), - LABEL(KEY_RECORD), - LABEL(KEY_REWIND), - LABEL(KEY_PHONE), - LABEL(KEY_ISO), - LABEL(KEY_CONFIG), - LABEL(KEY_HOMEPAGE), - LABEL(KEY_REFRESH), - LABEL(KEY_EXIT), - LABEL(KEY_MOVE), - LABEL(KEY_EDIT), - LABEL(KEY_SCROLLUP), - LABEL(KEY_SCROLLDOWN), - LABEL(KEY_KPLEFTPAREN), - LABEL(KEY_KPRIGHTPAREN), - LABEL(KEY_NEW), - LABEL(KEY_REDO), - LABEL(KEY_F13), - LABEL(KEY_F14), - LABEL(KEY_F15), - LABEL(KEY_F16), - LABEL(KEY_F17), - LABEL(KEY_F18), - LABEL(KEY_F19), - LABEL(KEY_F20), - LABEL(KEY_F21), - LABEL(KEY_F22), - LABEL(KEY_F23), - LABEL(KEY_F24), - LABEL(KEY_PLAYCD), - LABEL(KEY_PAUSECD), - LABEL(KEY_PROG3), - LABEL(KEY_PROG4), - LABEL(KEY_DASHBOARD), - LABEL(KEY_SUSPEND), - LABEL(KEY_CLOSE), - LABEL(KEY_PLAY), - LABEL(KEY_FASTFORWARD), - LABEL(KEY_BASSBOOST), - LABEL(KEY_PRINT), - LABEL(KEY_HP), - LABEL(KEY_CAMERA), - LABEL(KEY_SOUND), - LABEL(KEY_QUESTION), - LABEL(KEY_EMAIL), - LABEL(KEY_CHAT), - LABEL(KEY_SEARCH), - LABEL(KEY_CONNECT), - LABEL(KEY_FINANCE), - LABEL(KEY_SPORT), - LABEL(KEY_SHOP), - LABEL(KEY_ALTERASE), - LABEL(KEY_CANCEL), - LABEL(KEY_BRIGHTNESSDOWN), - LABEL(KEY_BRIGHTNESSUP), - LABEL(KEY_MEDIA), - LABEL(KEY_SWITCHVIDEOMODE), - LABEL(KEY_KBDILLUMTOGGLE), - LABEL(KEY_KBDILLUMDOWN), - LABEL(KEY_KBDILLUMUP), - LABEL(KEY_SEND), - LABEL(KEY_REPLY), - LABEL(KEY_FORWARDMAIL), - LABEL(KEY_SAVE), - LABEL(KEY_DOCUMENTS), - LABEL(KEY_BATTERY), - LABEL(KEY_BLUETOOTH), - LABEL(KEY_WLAN), - LABEL(KEY_UWB), - LABEL(KEY_UNKNOWN), - LABEL(KEY_VIDEO_NEXT), - LABEL(KEY_VIDEO_PREV), - LABEL(KEY_BRIGHTNESS_CYCLE), - LABEL(KEY_BRIGHTNESS_AUTO), - LABEL(KEY_DISPLAY_OFF), - LABEL(KEY_WWAN), - LABEL(KEY_RFKILL), - LABEL(KEY_MICMUTE), - LABEL(BTN_MISC), - LABEL(BTN_0), - LABEL(BTN_1), - LABEL(BTN_2), - LABEL(BTN_3), - LABEL(BTN_4), - LABEL(BTN_5), - LABEL(BTN_6), - LABEL(BTN_7), - LABEL(BTN_8), - LABEL(BTN_9), - LABEL(BTN_MOUSE), - LABEL(BTN_LEFT), - LABEL(BTN_RIGHT), - LABEL(BTN_MIDDLE), - LABEL(BTN_SIDE), - LABEL(BTN_EXTRA), - LABEL(BTN_FORWARD), - LABEL(BTN_BACK), - LABEL(BTN_TASK), - LABEL(BTN_JOYSTICK), - LABEL(BTN_TRIGGER), - LABEL(BTN_THUMB), - LABEL(BTN_THUMB2), - LABEL(BTN_TOP), - LABEL(BTN_TOP2), - LABEL(BTN_PINKIE), - LABEL(BTN_BASE), - LABEL(BTN_BASE2), - LABEL(BTN_BASE3), - LABEL(BTN_BASE4), - LABEL(BTN_BASE5), - LABEL(BTN_BASE6), - LABEL(BTN_DEAD), - LABEL(BTN_GAMEPAD), - LABEL(BTN_SOUTH), - LABEL(BTN_EAST), - LABEL(BTN_C), - LABEL(BTN_NORTH), - LABEL(BTN_WEST), - LABEL(BTN_Z), - LABEL(BTN_TL), - LABEL(BTN_TR), - LABEL(BTN_TL2), - LABEL(BTN_TR2), - LABEL(BTN_SELECT), - LABEL(BTN_START), - LABEL(BTN_MODE), - LABEL(BTN_THUMBL), - LABEL(BTN_THUMBR), - LABEL(BTN_DIGI), - LABEL(BTN_TOOL_PEN), - LABEL(BTN_TOOL_RUBBER), - LABEL(BTN_TOOL_BRUSH), - LABEL(BTN_TOOL_PENCIL), - LABEL(BTN_TOOL_AIRBRUSH), - LABEL(BTN_TOOL_FINGER), - LABEL(BTN_TOOL_MOUSE), - LABEL(BTN_TOOL_LENS), - LABEL(BTN_TOOL_QUINTTAP), - LABEL(BTN_STYLUS3), - LABEL(BTN_TOUCH), - LABEL(BTN_STYLUS), - LABEL(BTN_STYLUS2), - LABEL(BTN_TOOL_DOUBLETAP), - LABEL(BTN_TOOL_TRIPLETAP), - LABEL(BTN_TOOL_QUADTAP), - LABEL(BTN_WHEEL), - LABEL(BTN_GEAR_DOWN), - LABEL(BTN_GEAR_UP), - LABEL(KEY_OK), - LABEL(KEY_SELECT), - LABEL(KEY_GOTO), - LABEL(KEY_CLEAR), - LABEL(KEY_POWER2), - LABEL(KEY_OPTION), - LABEL(KEY_INFO), - LABEL(KEY_TIME), - LABEL(KEY_VENDOR), - LABEL(KEY_ARCHIVE), - LABEL(KEY_PROGRAM), - LABEL(KEY_CHANNEL), - LABEL(KEY_FAVORITES), - LABEL(KEY_EPG), - LABEL(KEY_PVR), - LABEL(KEY_MHP), - LABEL(KEY_LANGUAGE), - LABEL(KEY_TITLE), - LABEL(KEY_SUBTITLE), - LABEL(KEY_ANGLE), - LABEL(KEY_ZOOM), - LABEL(KEY_MODE), - LABEL(KEY_KEYBOARD), - LABEL(KEY_SCREEN), - LABEL(KEY_PC), - LABEL(KEY_TV), - LABEL(KEY_TV2), - LABEL(KEY_VCR), - LABEL(KEY_VCR2), - LABEL(KEY_SAT), - LABEL(KEY_SAT2), - LABEL(KEY_CD), - LABEL(KEY_TAPE), - LABEL(KEY_RADIO), - LABEL(KEY_TUNER), - LABEL(KEY_PLAYER), - LABEL(KEY_TEXT), - LABEL(KEY_DVD), - LABEL(KEY_AUX), - LABEL(KEY_MP3), - LABEL(KEY_AUDIO), - LABEL(KEY_VIDEO), - LABEL(KEY_DIRECTORY), - LABEL(KEY_LIST), - LABEL(KEY_MEMO), - LABEL(KEY_CALENDAR), - LABEL(KEY_RED), - LABEL(KEY_GREEN), - LABEL(KEY_YELLOW), - LABEL(KEY_BLUE), - LABEL(KEY_CHANNELUP), - LABEL(KEY_CHANNELDOWN), - LABEL(KEY_FIRST), - LABEL(KEY_LAST), - LABEL(KEY_AB), - LABEL(KEY_NEXT), - LABEL(KEY_RESTART), - LABEL(KEY_SLOW), - LABEL(KEY_SHUFFLE), - LABEL(KEY_BREAK), - LABEL(KEY_PREVIOUS), - LABEL(KEY_DIGITS), - LABEL(KEY_TEEN), - LABEL(KEY_TWEN), - LABEL(KEY_VIDEOPHONE), - LABEL(KEY_GAMES), - LABEL(KEY_ZOOMIN), - LABEL(KEY_ZOOMOUT), - LABEL(KEY_ZOOMRESET), - LABEL(KEY_WORDPROCESSOR), - LABEL(KEY_EDITOR), - LABEL(KEY_SPREADSHEET), - LABEL(KEY_GRAPHICSEDITOR), - LABEL(KEY_PRESENTATION), - LABEL(KEY_DATABASE), - LABEL(KEY_NEWS), - LABEL(KEY_VOICEMAIL), - LABEL(KEY_ADDRESSBOOK), - LABEL(KEY_MESSENGER), - LABEL(KEY_DISPLAYTOGGLE), - LABEL(KEY_SPELLCHECK), - LABEL(KEY_LOGOFF), - LABEL(KEY_DOLLAR), - LABEL(KEY_EURO), - LABEL(KEY_FRAMEBACK), - LABEL(KEY_FRAMEFORWARD), - LABEL(KEY_CONTEXT_MENU), - LABEL(KEY_MEDIA_REPEAT), - LABEL(KEY_10CHANNELSUP), - LABEL(KEY_10CHANNELSDOWN), - LABEL(KEY_IMAGES), - LABEL(KEY_DEL_EOL), - LABEL(KEY_DEL_EOS), - LABEL(KEY_INS_LINE), - LABEL(KEY_DEL_LINE), - LABEL(KEY_FN), - LABEL(KEY_FN_ESC), - LABEL(KEY_FN_F1), - LABEL(KEY_FN_F2), - LABEL(KEY_FN_F3), - LABEL(KEY_FN_F4), - LABEL(KEY_FN_F5), - LABEL(KEY_FN_F6), - LABEL(KEY_FN_F7), - LABEL(KEY_FN_F8), - LABEL(KEY_FN_F9), - LABEL(KEY_FN_F10), - LABEL(KEY_FN_F11), - LABEL(KEY_FN_F12), - LABEL(KEY_FN_1), - LABEL(KEY_FN_2), - LABEL(KEY_FN_D), - LABEL(KEY_FN_E), - LABEL(KEY_FN_F), - LABEL(KEY_FN_S), - LABEL(KEY_FN_B), - LABEL(KEY_BRL_DOT1), - LABEL(KEY_BRL_DOT2), - LABEL(KEY_BRL_DOT3), - LABEL(KEY_BRL_DOT4), - LABEL(KEY_BRL_DOT5), - LABEL(KEY_BRL_DOT6), - LABEL(KEY_BRL_DOT7), - LABEL(KEY_BRL_DOT8), - LABEL(KEY_BRL_DOT9), - LABEL(KEY_BRL_DOT10), - LABEL(KEY_NUMERIC_0), - LABEL(KEY_NUMERIC_1), - LABEL(KEY_NUMERIC_2), - LABEL(KEY_NUMERIC_3), - LABEL(KEY_NUMERIC_4), - LABEL(KEY_NUMERIC_5), - LABEL(KEY_NUMERIC_6), - LABEL(KEY_NUMERIC_7), - LABEL(KEY_NUMERIC_8), - LABEL(KEY_NUMERIC_9), - LABEL(KEY_NUMERIC_STAR), - LABEL(KEY_NUMERIC_POUND), - LABEL(KEY_NUMERIC_A), - LABEL(KEY_NUMERIC_B), - LABEL(KEY_NUMERIC_C), - LABEL(KEY_NUMERIC_D), - LABEL(KEY_CAMERA_FOCUS), - LABEL(KEY_WPS_BUTTON), - LABEL(KEY_TOUCHPAD_TOGGLE), - LABEL(KEY_TOUCHPAD_ON), - LABEL(KEY_TOUCHPAD_OFF), - LABEL(KEY_CAMERA_ZOOMIN), - LABEL(KEY_CAMERA_ZOOMOUT), - LABEL(KEY_CAMERA_UP), - LABEL(KEY_CAMERA_DOWN), - LABEL(KEY_CAMERA_LEFT), - LABEL(KEY_CAMERA_RIGHT), - LABEL(KEY_ATTENDANT_ON), - LABEL(KEY_ATTENDANT_OFF), - LABEL(KEY_ATTENDANT_TOGGLE), - LABEL(KEY_LIGHTS_TOGGLE), - LABEL(BTN_DPAD_UP), - LABEL(BTN_DPAD_DOWN), - LABEL(BTN_DPAD_LEFT), - LABEL(BTN_DPAD_RIGHT), - LABEL(KEY_ALS_TOGGLE), - LABEL(KEY_BUTTONCONFIG), - LABEL(KEY_TASKMANAGER), - LABEL(KEY_JOURNAL), - LABEL(KEY_CONTROLPANEL), - LABEL(KEY_APPSELECT), - LABEL(KEY_SCREENSAVER), - LABEL(KEY_VOICECOMMAND), - LABEL(KEY_ASSISTANT), - LABEL(KEY_BRIGHTNESS_MIN), - LABEL(KEY_BRIGHTNESS_MAX), - LABEL(KEY_KBDINPUTASSIST_PREV), - LABEL(KEY_KBDINPUTASSIST_NEXT), - LABEL(KEY_KBDINPUTASSIST_PREVGROUP), - LABEL(KEY_KBDINPUTASSIST_NEXTGROUP), - LABEL(KEY_KBDINPUTASSIST_ACCEPT), - LABEL(KEY_KBDINPUTASSIST_CANCEL), - LABEL(KEY_RIGHT_UP), - LABEL(KEY_RIGHT_DOWN), - LABEL(KEY_LEFT_UP), - LABEL(KEY_LEFT_DOWN), - LABEL(KEY_ROOT_MENU), - LABEL(KEY_MEDIA_TOP_MENU), - LABEL(KEY_NUMERIC_11), - LABEL(KEY_NUMERIC_12), - LABEL(KEY_AUDIO_DESC), - LABEL(KEY_3D_MODE), - LABEL(KEY_NEXT_FAVORITE), - LABEL(KEY_STOP_RECORD), - LABEL(KEY_PAUSE_RECORD), - LABEL(KEY_VOD), - LABEL(KEY_UNMUTE), - LABEL(KEY_FASTREVERSE), - LABEL(KEY_SLOWREVERSE), - LABEL(KEY_DATA), - LABEL(KEY_ONSCREEN_KEYBOARD), - LABEL(BTN_TRIGGER_HAPPY), - LABEL(BTN_TRIGGER_HAPPY1), - LABEL(BTN_TRIGGER_HAPPY2), - LABEL(BTN_TRIGGER_HAPPY3), - LABEL(BTN_TRIGGER_HAPPY4), - LABEL(BTN_TRIGGER_HAPPY5), - LABEL(BTN_TRIGGER_HAPPY6), - LABEL(BTN_TRIGGER_HAPPY7), - LABEL(BTN_TRIGGER_HAPPY8), - LABEL(BTN_TRIGGER_HAPPY9), - LABEL(BTN_TRIGGER_HAPPY10), - LABEL(BTN_TRIGGER_HAPPY11), - LABEL(BTN_TRIGGER_HAPPY12), - LABEL(BTN_TRIGGER_HAPPY13), - LABEL(BTN_TRIGGER_HAPPY14), - LABEL(BTN_TRIGGER_HAPPY15), - LABEL(BTN_TRIGGER_HAPPY16), - LABEL(BTN_TRIGGER_HAPPY17), - LABEL(BTN_TRIGGER_HAPPY18), - LABEL(BTN_TRIGGER_HAPPY19), - LABEL(BTN_TRIGGER_HAPPY20), - LABEL(BTN_TRIGGER_HAPPY21), - LABEL(BTN_TRIGGER_HAPPY22), - LABEL(BTN_TRIGGER_HAPPY23), - LABEL(BTN_TRIGGER_HAPPY24), - LABEL(BTN_TRIGGER_HAPPY25), - LABEL(BTN_TRIGGER_HAPPY26), - LABEL(BTN_TRIGGER_HAPPY27), - LABEL(BTN_TRIGGER_HAPPY28), - LABEL(BTN_TRIGGER_HAPPY29), - LABEL(BTN_TRIGGER_HAPPY30), - LABEL(BTN_TRIGGER_HAPPY31), - LABEL(BTN_TRIGGER_HAPPY32), - LABEL(BTN_TRIGGER_HAPPY33), - LABEL(BTN_TRIGGER_HAPPY34), - LABEL(BTN_TRIGGER_HAPPY35), - LABEL(BTN_TRIGGER_HAPPY36), - LABEL(BTN_TRIGGER_HAPPY37), - LABEL(BTN_TRIGGER_HAPPY38), - LABEL(BTN_TRIGGER_HAPPY39), - LABEL(BTN_TRIGGER_HAPPY40), - LABEL(KEY_MAX), - LABEL_END, -}; -static struct label rel_labels[] = { - LABEL(REL_X), - LABEL(REL_Y), - LABEL(REL_Z), - LABEL(REL_RX), - LABEL(REL_RY), - LABEL(REL_RZ), - LABEL(REL_HWHEEL), - LABEL(REL_DIAL), - LABEL(REL_WHEEL), - LABEL(REL_MISC), - LABEL(REL_MAX), - LABEL_END, -}; -static struct label abs_labels[] = { - LABEL(ABS_X), - LABEL(ABS_Y), - LABEL(ABS_Z), - LABEL(ABS_RX), - LABEL(ABS_RY), - LABEL(ABS_RZ), - LABEL(ABS_THROTTLE), - LABEL(ABS_RUDDER), - LABEL(ABS_WHEEL), - LABEL(ABS_GAS), - LABEL(ABS_BRAKE), - LABEL(ABS_HAT0X), - LABEL(ABS_HAT0Y), - LABEL(ABS_HAT1X), - LABEL(ABS_HAT1Y), - LABEL(ABS_HAT2X), - LABEL(ABS_HAT2Y), - LABEL(ABS_HAT3X), - LABEL(ABS_HAT3Y), - LABEL(ABS_PRESSURE), - LABEL(ABS_DISTANCE), - LABEL(ABS_TILT_X), - LABEL(ABS_TILT_Y), - LABEL(ABS_TOOL_WIDTH), - LABEL(ABS_VOLUME), - LABEL(ABS_MISC), - LABEL(ABS_MT_SLOT), - LABEL(ABS_MT_TOUCH_MAJOR), - LABEL(ABS_MT_TOUCH_MINOR), - LABEL(ABS_MT_WIDTH_MAJOR), - LABEL(ABS_MT_WIDTH_MINOR), - LABEL(ABS_MT_ORIENTATION), - LABEL(ABS_MT_POSITION_X), - LABEL(ABS_MT_POSITION_Y), - LABEL(ABS_MT_TOOL_TYPE), - LABEL(ABS_MT_BLOB_ID), - LABEL(ABS_MT_TRACKING_ID), - LABEL(ABS_MT_PRESSURE), - LABEL(ABS_MT_DISTANCE), - LABEL(ABS_MT_TOOL_X), - LABEL(ABS_MT_TOOL_Y), - LABEL(ABS_MAX), - LABEL_END, -}; -static struct label sw_labels[] = { - LABEL(SW_LID), - LABEL(SW_TABLET_MODE), - LABEL(SW_HEADPHONE_INSERT), - LABEL(SW_RFKILL_ALL), - LABEL(SW_MICROPHONE_INSERT), - LABEL(SW_DOCK), - LABEL(SW_LINEOUT_INSERT), - LABEL(SW_JACK_PHYSICAL_INSERT), - LABEL(SW_VIDEOOUT_INSERT), - LABEL(SW_CAMERA_LENS_COVER), - LABEL(SW_KEYPAD_SLIDE), - LABEL(SW_FRONT_PROXIMITY), - LABEL(SW_ROTATE_LOCK), - LABEL(SW_LINEIN_INSERT), - LABEL(SW_MUTE_DEVICE), - LABEL(SW_PEN_INSERTED), - LABEL(SW_MAX), - LABEL_END, -}; -static struct label msc_labels[] = { - LABEL(MSC_SERIAL), - LABEL(MSC_PULSELED), - LABEL(MSC_GESTURE), - LABEL(MSC_RAW), - LABEL(MSC_SCAN), - LABEL(MSC_TIMESTAMP), - LABEL(MSC_MAX), - LABEL_END, -}; -static struct label led_labels[] = { - LABEL(LED_NUML), - LABEL(LED_CAPSL), - LABEL(LED_SCROLLL), - LABEL(LED_COMPOSE), - LABEL(LED_KANA), - LABEL(LED_SLEEP), - LABEL(LED_SUSPEND), - LABEL(LED_MUTE), - LABEL(LED_MISC), - LABEL(LED_MAIL), - LABEL(LED_CHARGING), - LABEL(LED_MAX), - LABEL_END, -}; -static struct label rep_labels[] = { - LABEL(REP_DELAY), - LABEL(REP_PERIOD), - LABEL(REP_MAX), - LABEL_END, -}; -static struct label snd_labels[] = { - LABEL(SND_CLICK), - LABEL(SND_BELL), - LABEL(SND_TONE), - LABEL(SND_MAX), - LABEL_END, -}; -static struct label mt_tool_labels[] = { - LABEL(MT_TOOL_FINGER), - LABEL(MT_TOOL_PEN), - LABEL(MT_TOOL_PALM), - LABEL(MT_TOOL_MAX), - LABEL_END, -}; -static struct label ff_status_labels[] = { - LABEL(FF_STATUS_STOPPED), - LABEL(FF_STATUS_PLAYING), - LABEL(FF_STATUS_MAX), - LABEL_END, -}; -static struct label ff_labels[] = { - LABEL(FF_RUMBLE), - LABEL(FF_PERIODIC), - LABEL(FF_CONSTANT), - LABEL(FF_SPRING), - LABEL(FF_FRICTION), - LABEL(FF_DAMPER), - LABEL(FF_INERTIA), - LABEL(FF_RAMP), - LABEL(FF_SQUARE), - LABEL(FF_TRIANGLE), - LABEL(FF_SINE), - LABEL(FF_SAW_UP), - LABEL(FF_SAW_DOWN), - LABEL(FF_CUSTOM), - LABEL(FF_GAIN), - LABEL(FF_AUTOCENTER), - LABEL(FF_MAX), - LABEL_END, -}; diff --git a/toolbox/ls.c b/toolbox/ls.c deleted file mode 100644 index 9a89dd46..00000000 --- a/toolbox/ls.c +++ /dev/null @@ -1,588 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -// simple dynamic array of strings. -typedef struct { - int count; - int capacity; - void** items; -} strlist_t; - -#define STRLIST_INITIALIZER { 0, 0, NULL } - -/* Used to iterate over a strlist_t - * _list :: pointer to strlist_t object - * _item :: name of local variable name defined within the loop with - * type 'char*' - * _stmnt :: C statement executed in each iteration - * - * This macro is only intended for simple uses. Do not add or remove items - * to/from the list during iteration. - */ -#define STRLIST_FOREACH(_list,_item,_stmnt) \ - do { \ - int _nn_##__LINE__ = 0; \ - for (;_nn_##__LINE__ < (_list)->count; ++ _nn_##__LINE__) { \ - char* _item = (char*)(_list)->items[_nn_##__LINE__]; \ - _stmnt; \ - } \ - } while (0) - -static void dynarray_reserve_more( strlist_t *a, int count ) { - int old_cap = a->capacity; - int new_cap = old_cap; - const int max_cap = INT_MAX/sizeof(void*); - void** new_items; - int new_count = a->count + count; - - if (count <= 0) - return; - - if (count > max_cap - a->count) - abort(); - - new_count = a->count + count; - - while (new_cap < new_count) { - old_cap = new_cap; - new_cap += (new_cap >> 2) + 4; - if (new_cap < old_cap || new_cap > max_cap) { - new_cap = max_cap; - } - } - new_items = realloc(a->items, new_cap*sizeof(void*)); - if (new_items == NULL) - abort(); - - a->items = new_items; - a->capacity = new_cap; -} - -void strlist_init( strlist_t *list ) { - list->count = list->capacity = 0; - list->items = NULL; -} - -// append a new string made of the first 'slen' characters from 'str' -// followed by a trailing zero. -void strlist_append_b( strlist_t *list, const void* str, size_t slen ) { - char *copy = malloc(slen+1); - memcpy(copy, str, slen); - copy[slen] = '\0'; - if (list->count >= list->capacity) - dynarray_reserve_more(list, 1); - list->items[list->count++] = copy; -} - -// append the copy of a given input string to a strlist_t. -void strlist_append_dup( strlist_t *list, const char *str) { - strlist_append_b(list, str, strlen(str)); -} - -// note: strlist_done will free all the strings owned by the list. -void strlist_done( strlist_t *list ) { - STRLIST_FOREACH(list, string, free(string)); - free(list->items); - list->items = NULL; - list->count = list->capacity = 0; -} - -static int strlist_compare_strings(const void* a, const void* b) { - const char *sa = *(const char **)a; - const char *sb = *(const char **)b; - return strcmp(sa, sb); -} - -/* sort the strings in a given list (using strcmp) */ -void strlist_sort( strlist_t *list ) { - if (list->count > 0) { - qsort(list->items, (size_t)list->count, sizeof(void*), strlist_compare_strings); - } -} - - -// bits for flags argument -#define LIST_LONG (1 << 0) -#define LIST_ALL (1 << 1) -#define LIST_RECURSIVE (1 << 2) -#define LIST_DIRECTORIES (1 << 3) -#define LIST_SIZE (1 << 4) -#define LIST_LONG_NUMERIC (1 << 5) -#define LIST_CLASSIFY (1 << 6) -#define LIST_MACLABEL (1 << 7) -#define LIST_INODE (1 << 8) - -// fwd -static int listpath(const char *name, int flags); - -static char mode2kind(mode_t mode) -{ - switch(mode & S_IFMT){ - case S_IFSOCK: return 's'; - case S_IFLNK: return 'l'; - case S_IFREG: return '-'; - case S_IFDIR: return 'd'; - case S_IFBLK: return 'b'; - case S_IFCHR: return 'c'; - case S_IFIFO: return 'p'; - default: return '?'; - } -} - -void strmode(mode_t mode, char *out) -{ - *out++ = mode2kind(mode); - - *out++ = (mode & 0400) ? 'r' : '-'; - *out++ = (mode & 0200) ? 'w' : '-'; - if(mode & 04000) { - *out++ = (mode & 0100) ? 's' : 'S'; - } else { - *out++ = (mode & 0100) ? 'x' : '-'; - } - *out++ = (mode & 040) ? 'r' : '-'; - *out++ = (mode & 020) ? 'w' : '-'; - if(mode & 02000) { - *out++ = (mode & 010) ? 's' : 'S'; - } else { - *out++ = (mode & 010) ? 'x' : '-'; - } - *out++ = (mode & 04) ? 'r' : '-'; - *out++ = (mode & 02) ? 'w' : '-'; - if(mode & 01000) { - *out++ = (mode & 01) ? 't' : 'T'; - } else { - *out++ = (mode & 01) ? 'x' : '-'; - } - *out = 0; -} - -static void user2str(uid_t uid, char *out, size_t out_size) -{ - struct passwd *pw = getpwuid(uid); - if(pw) { - strlcpy(out, pw->pw_name, out_size); - } else { - snprintf(out, out_size, "%d", uid); - } -} - -static void group2str(gid_t gid, char *out, size_t out_size) -{ - struct group *gr = getgrgid(gid); - if(gr) { - strlcpy(out, gr->gr_name, out_size); - } else { - snprintf(out, out_size, "%d", gid); - } -} - -static int show_total_size(const char *dirname, DIR *d, int flags) -{ - struct dirent *de; - char tmp[1024]; - struct stat s; - int sum = 0; - - /* run through the directory and sum up the file block sizes */ - while ((de = readdir(d)) != 0) { - if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) - continue; - if (de->d_name[0] == '.' && (flags & LIST_ALL) == 0) - continue; - - if (strcmp(dirname, "/") == 0) - snprintf(tmp, sizeof(tmp), "/%s", de->d_name); - else - snprintf(tmp, sizeof(tmp), "%s/%s", dirname, de->d_name); - - if (lstat(tmp, &s) < 0) { - fprintf(stderr, "stat failed on %s: %s\n", tmp, strerror(errno)); - rewinddir(d); - return -1; - } - - sum += s.st_blocks / 2; - } - - printf("total %d\n", sum); - rewinddir(d); - return 0; -} - -static int listfile_size(const char *path, const char *filename, struct stat *s, - int flags) -{ - if(!s || !path) { - return -1; - } - - /* blocks are 512 bytes, we want output to be KB */ - if ((flags & LIST_SIZE) != 0) { - printf("%lld ", (long long)s->st_blocks / 2); - } - - if ((flags & LIST_CLASSIFY) != 0) { - char filetype = mode2kind(s->st_mode); - if (filetype != 'l') { - printf("%c ", filetype); - } else { - struct stat link_dest; - if (!stat(path, &link_dest)) { - printf("l%c ", mode2kind(link_dest.st_mode)); - } else { - fprintf(stderr, "stat '%s' failed: %s\n", path, strerror(errno)); - printf("l? "); - } - } - } - - printf("%s\n", filename); - - return 0; -} - -static int listfile_long(const char *path, struct stat *s, int flags) -{ - char date[32]; - char mode[16]; - char user[32]; - char group[32]; - const char *name; - - if(!s || !path) { - return -1; - } - - /* name is anything after the final '/', or the whole path if none*/ - name = strrchr(path, '/'); - if(name == 0) { - name = path; - } else { - name++; - } - - strmode(s->st_mode, mode); - if (flags & LIST_LONG_NUMERIC) { - snprintf(user, sizeof(user), "%u", s->st_uid); - snprintf(group, sizeof(group), "%u", s->st_gid); - } else { - user2str(s->st_uid, user, sizeof(user)); - group2str(s->st_gid, group, sizeof(group)); - } - - strftime(date, 32, "%Y-%m-%d %H:%M", localtime((const time_t*)&s->st_mtime)); - date[31] = 0; - -// 12345678901234567890123456789012345678901234567890123456789012345678901234567890 -// MMMMMMMM UUUUUUUU GGGGGGGGG XXXXXXXX YYYY-MM-DD HH:MM NAME (->LINK) - - switch(s->st_mode & S_IFMT) { - case S_IFBLK: - case S_IFCHR: - printf("%s %-8s %-8s %3d, %3d %s %s\n", - mode, user, group, - major(s->st_rdev), minor(s->st_rdev), - date, name); - break; - case S_IFREG: - printf("%s %-8s %-8s %8lld %s %s\n", - mode, user, group, (long long)s->st_size, date, name); - break; - case S_IFLNK: { - char linkto[256]; - ssize_t len; - - len = readlink(path, linkto, 256); - if(len < 0) return -1; - - if(len > 255) { - linkto[252] = '.'; - linkto[253] = '.'; - linkto[254] = '.'; - linkto[255] = 0; - } else { - linkto[len] = 0; - } - - printf("%s %-8s %-8s %s %s -> %s\n", - mode, user, group, date, name, linkto); - break; - } - default: - printf("%s %-8s %-8s %s %s\n", - mode, user, group, date, name); - - } - return 0; -} - -static int listfile_maclabel(const char *path, struct stat *s) -{ - char mode[16]; - char user[32]; - char group[32]; - char *maclabel = NULL; - const char *name; - - if(!s || !path) { - return -1; - } - - /* name is anything after the final '/', or the whole path if none*/ - name = strrchr(path, '/'); - if(name == 0) { - name = path; - } else { - name++; - } - - lgetfilecon(path, &maclabel); - if (!maclabel) { - return -1; - } - - strmode(s->st_mode, mode); - user2str(s->st_uid, user, sizeof(user)); - group2str(s->st_gid, group, sizeof(group)); - - switch(s->st_mode & S_IFMT) { - case S_IFLNK: { - char linkto[256]; - ssize_t len; - - len = readlink(path, linkto, sizeof(linkto)); - if(len < 0) return -1; - - if((size_t)len > sizeof(linkto)-1) { - linkto[sizeof(linkto)-4] = '.'; - linkto[sizeof(linkto)-3] = '.'; - linkto[sizeof(linkto)-2] = '.'; - linkto[sizeof(linkto)-1] = 0; - } else { - linkto[len] = 0; - } - - printf("%s %-8s %-8s %s %s -> %s\n", - mode, user, group, maclabel, name, linkto); - break; - } - default: - printf("%s %-8s %-8s %s %s\n", - mode, user, group, maclabel, name); - - } - - free(maclabel); - - return 0; -} - -static int listfile(const char *dirname, const char *filename, int flags) -{ - struct stat s; - - if ((flags & (LIST_LONG | LIST_SIZE | LIST_CLASSIFY | LIST_MACLABEL | LIST_INODE)) == 0) { - printf("%s\n", filename); - return 0; - } - - char tmp[4096]; - const char* pathname = filename; - - if (dirname != NULL) { - snprintf(tmp, sizeof(tmp), "%s/%s", dirname, filename); - pathname = tmp; - } else { - pathname = filename; - } - - if(lstat(pathname, &s) < 0) { - fprintf(stderr, "lstat '%s' failed: %s\n", pathname, strerror(errno)); - return -1; - } - - if(flags & LIST_INODE) { - printf("%8llu ", (unsigned long long)s.st_ino); - } - - if ((flags & LIST_MACLABEL) != 0) { - return listfile_maclabel(pathname, &s); - } else if ((flags & LIST_LONG) != 0) { - return listfile_long(pathname, &s, flags); - } else /*((flags & LIST_SIZE) != 0)*/ { - return listfile_size(pathname, filename, &s, flags); - } -} - -static int listdir(const char *name, int flags) -{ - char tmp[4096]; - DIR *d; - struct dirent *de; - strlist_t files = STRLIST_INITIALIZER; - - d = opendir(name); - if(d == 0) { - fprintf(stderr, "opendir failed, %s\n", strerror(errno)); - return -1; - } - - if ((flags & LIST_SIZE) != 0) { - show_total_size(name, d, flags); - } - - while((de = readdir(d)) != 0){ - if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue; - if(de->d_name[0] == '.' && (flags & LIST_ALL) == 0) continue; - - strlist_append_dup(&files, de->d_name); - } - - strlist_sort(&files); - STRLIST_FOREACH(&files, filename, listfile(name, filename, flags)); - strlist_done(&files); - - if (flags & LIST_RECURSIVE) { - strlist_t subdirs = STRLIST_INITIALIZER; - - rewinddir(d); - - while ((de = readdir(d)) != 0) { - struct stat s; - int err; - - if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) - continue; - if (de->d_name[0] == '.' && (flags & LIST_ALL) == 0) - continue; - - if (!strcmp(name, "/")) - snprintf(tmp, sizeof(tmp), "/%s", de->d_name); - else - snprintf(tmp, sizeof(tmp), "%s/%s", name, de->d_name); - - /* - * If the name ends in a '/', use stat() so we treat it like a - * directory even if it's a symlink. - */ - if (tmp[strlen(tmp)-1] == '/') - err = stat(tmp, &s); - else - err = lstat(tmp, &s); - - if (err < 0) { - perror(tmp); - closedir(d); - return -1; - } - - if (S_ISDIR(s.st_mode)) { - strlist_append_dup(&subdirs, tmp); - } - } - strlist_sort(&subdirs); - STRLIST_FOREACH(&subdirs, path, { - printf("\n%s:\n", path); - listdir(path, flags); - }); - strlist_done(&subdirs); - } - - closedir(d); - return 0; -} - -static int listpath(const char *name, int flags) -{ - struct stat s; - int err; - - /* - * If the name ends in a '/', use stat() so we treat it like a - * directory even if it's a symlink. - */ - if (name[strlen(name)-1] == '/') - err = stat(name, &s); - else - err = lstat(name, &s); - - if (err < 0) { - perror(name); - return -1; - } - - if ((flags & LIST_DIRECTORIES) == 0 && S_ISDIR(s.st_mode)) { - if (flags & LIST_RECURSIVE) - printf("\n%s:\n", name); - return listdir(name, flags); - } else { - /* yeah this calls stat() again*/ - return listfile(NULL, name, flags); - } -} - -int ls_main(int argc, char **argv) -{ - int flags = 0; - - if(argc > 1) { - int i; - int err = 0; - strlist_t files = STRLIST_INITIALIZER; - - for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') { - /* an option ? */ - const char *arg = argv[i]+1; - while (arg[0]) { - switch (arg[0]) { - case 'l': flags |= LIST_LONG; break; - case 'n': flags |= LIST_LONG | LIST_LONG_NUMERIC; break; - case 's': flags |= LIST_SIZE; break; - case 'R': flags |= LIST_RECURSIVE; break; - case 'd': flags |= LIST_DIRECTORIES; break; - case 'Z': flags |= LIST_MACLABEL; break; - case 'a': flags |= LIST_ALL; break; - case 'F': flags |= LIST_CLASSIFY; break; - case 'i': flags |= LIST_INODE; break; - default: - fprintf(stderr, "%s: Unknown option '-%c'. Aborting.\n", "ls", arg[0]); - exit(1); - } - arg++; - } - } else { - /* not an option ? */ - strlist_append_dup(&files, argv[i]); - } - } - - if (files.count > 0) { - STRLIST_FOREACH(&files, path, { - if (listpath(path, flags) != 0) { - err = EXIT_FAILURE; - } - }); - strlist_done(&files); - return err; - } - } - - // list working directory if no files or directories were specified - return listpath(".", flags); -} diff --git a/toolbox/setprop.c b/toolbox/setprop.c deleted file mode 100644 index 63ad2b42..00000000 --- a/toolbox/setprop.c +++ /dev/null @@ -1,18 +0,0 @@ -#include - -#include - -int setprop_main(int argc, char *argv[]) -{ - if(argc != 3) { - fprintf(stderr,"usage: setprop \n"); - return 1; - } - - if(property_set(argv[1], argv[2])){ - fprintf(stderr,"could not set property\n"); - return 1; - } - - return 0; -} diff --git a/toolbox/start.c b/toolbox/start.c deleted file mode 100644 index 6c8a3f2b..00000000 --- a/toolbox/start.c +++ /dev/null @@ -1,21 +0,0 @@ - -#include -#include -#include - -#include - -int start_main(int argc, char *argv[]) -{ - if(argc > 1) { - property_set("ctl.start", argv[1]); - } else { - /* defaults to starting the common services stopped by stop.c */ - property_set("ctl.start", "netd"); - property_set("ctl.start", "surfaceflinger"); - property_set("ctl.start", "zygote"); - property_set("ctl.start", "zygote_secondary"); - } - - return 0; -} diff --git a/toolbox/stop.c b/toolbox/stop.c deleted file mode 100644 index 5e3ce3c8..00000000 --- a/toolbox/stop.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include - -#include - -int stop_main(int argc, char *argv[]) -{ - if(argc > 1) { - property_set("ctl.stop", argv[1]); - } else{ - /* defaults to stopping the common services */ - property_set("ctl.stop", "zygote_secondary"); - property_set("ctl.stop", "zygote"); - property_set("ctl.stop", "surfaceflinger"); - property_set("ctl.stop", "netd"); - } - - return 0; -} diff --git a/toybox/Android.mk b/toybox/Android.mk deleted file mode 100755 index 0fb345da..00000000 --- a/toybox/Android.mk +++ /dev/null @@ -1,599 +0,0 @@ -# -# Copyright (C) 2014 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. -# - -ifneq ($(wildcard external/toybox/Android.mk),) - -ifeq ($(TW_USE_TOOLBOX), true) - -LOCAL_PATH := external/toybox - -# -# To update: -# - -# git remote add toybox https://github.com/landley/toybox.git -# git fetch toybox -# git merge toybox/master -# mm -j32 -# # (Make any necessary Android.mk changes and test the new toybox.) -# git push aosp HEAD:master # Push directly, avoiding gerrit. -# git push aosp HEAD:refs/for/master # Push to gerrit. -# -# # Now commit any necessary Android.mk changes like normal: -# repo start post-sync . -# git commit -a - - -# -# To add a toy: -# - -# make menuconfig -# # (Select the toy you want to add.) -# make clean && make # Regenerate the generated files. -# # Edit LOCAL_SRC_FILES below to add the toy. -# # If you just want to use it as "toybox x" rather than "x", you can stop now. -# # If you want this toy to have a symbolic link in /system/bin, add the toy to ALL_TOOLS. - -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := \ - lib/args.c \ - lib/dirtree.c \ - lib/getmountlist.c \ - lib/help.c \ - lib/interestingtimes.c \ - lib/lib.c \ - lib/llist.c \ - lib/net.c \ - lib/portability.c \ - lib/xwrap.c \ - main.c \ - toys/android/getenforce.c \ - toys/android/getprop.c \ - toys/android/load_policy.c \ - toys/android/restorecon.c \ - toys/android/runcon.c \ - toys/android/setenforce.c \ - toys/android/setprop.c \ - toys/lsb/hostname.c \ - toys/lsb/killall.c \ - toys/lsb/md5sum.c \ - toys/lsb/mknod.c \ - toys/lsb/mktemp.c \ - toys/lsb/mount.c \ - toys/lsb/pidof.c \ - toys/lsb/seq.c \ - toys/lsb/sync.c \ - toys/lsb/umount.c \ - toys/other/acpi.c \ - toys/other/base64.c \ - toys/other/blkid.c \ - toys/other/blockdev.c \ - toys/other/bzcat.c \ - toys/other/chcon.c \ - toys/other/chroot.c \ - toys/other/clear.c \ - toys/other/dos2unix.c \ - toys/other/fallocate.c \ - toys/other/free.c \ - toys/other/freeramdisk.c \ - toys/other/fsfreeze.c \ - toys/other/help.c \ - toys/other/inotifyd.c \ - toys/other/insmod.c \ - toys/other/losetup.c \ - toys/other/lsattr.c \ - toys/other/lsmod.c \ - toys/other/lsusb.c \ - toys/other/makedevs.c \ - toys/other/mkswap.c \ - toys/other/modinfo.c \ - toys/other/mountpoint.c \ - toys/other/nbd_client.c \ - toys/other/partprobe.c \ - toys/other/pivot_root.c \ - toys/other/pmap.c \ - toys/other/printenv.c \ - toys/other/pwdx.c \ - toys/other/readlink.c \ - toys/other/realpath.c \ - toys/other/rev.c \ - toys/other/rmmod.c \ - toys/other/setsid.c \ - toys/other/stat.c \ - toys/other/swapoff.c \ - toys/other/swapon.c \ - toys/other/sysctl.c \ - toys/other/tac.c \ - toys/other/taskset.c \ - toys/other/timeout.c \ - toys/other/truncate.c \ - toys/other/usleep.c \ - toys/other/vconfig.c \ - toys/other/vmstat.c \ - toys/other/which.c \ - toys/other/yes.c \ - toys/pending/dd.c \ - toys/pending/expr.c \ - toys/pending/more.c \ - toys/pending/route.c \ - toys/pending/tar.c \ - toys/pending/tr.c \ - toys/pending/traceroute.c \ - toys/posix/basename.c \ - toys/posix/cal.c \ - toys/posix/cat.c \ - toys/posix/chgrp.c \ - toys/posix/chmod.c \ - toys/posix/cksum.c \ - toys/posix/cmp.c \ - toys/posix/comm.c \ - toys/posix/cp.c \ - toys/posix/cpio.c \ - toys/posix/cut.c \ - toys/posix/date.c \ - toys/posix/df.c \ - toys/posix/dirname.c \ - toys/posix/du.c \ - toys/posix/echo.c \ - toys/posix/env.c \ - toys/posix/expand.c \ - toys/posix/false.c \ - toys/posix/find.c \ - toys/posix/grep.c \ - toys/posix/head.c \ - toys/posix/id.c \ - toys/posix/kill.c \ - toys/posix/ln.c \ - toys/posix/ls.c \ - toys/posix/mkdir.c \ - toys/posix/mkfifo.c \ - toys/posix/nice.c \ - toys/posix/nl.c \ - toys/posix/nohup.c \ - toys/posix/od.c \ - toys/posix/paste.c \ - toys/posix/patch.c \ - toys/posix/printf.c \ - toys/posix/pwd.c \ - toys/posix/renice.c \ - toys/posix/rm.c \ - toys/posix/rmdir.c \ - toys/posix/sed.c \ - toys/posix/sleep.c \ - toys/posix/sort.c \ - toys/posix/split.c \ - toys/posix/strings.c \ - toys/posix/tail.c \ - toys/posix/tee.c \ - toys/posix/time.c \ - toys/posix/touch.c \ - toys/posix/true.c \ - toys/posix/tty.c \ - toys/posix/uname.c \ - toys/posix/uniq.c \ - toys/posix/wc.c \ - toys/posix/xargs.c - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -eq 26; echo $$?),0) -# Android 8.0 had some tools in different paths -LOCAL_SRC_FILES += \ - toys/pending/dmesg.c -else -LOCAL_SRC_FILES += \ - toys/lsb/dmesg.c -endif - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) -# there are some conflicts here with AOSP-7.[01] and CM-14.[01] -# the following items have been removed for compatibility -# ifconfig, netcat, netstat, rfkill, switch_root -LOCAL_STATIC_LIBRARIES := libcrypto_static - -LOCAL_C_INCLUDES += \ - external/boringssl/include \ - bionic/libc/dns/include - -LOCAL_SRC_FILES += \ - lib/linestack.c \ - lib/password.c \ - toys/other/flock.c \ - toys/other/hwclock.c \ - toys/other/ionice.c \ - toys/other/lspci.c \ - toys/other/readahead.c \ - toys/other/reset.c \ - toys/other/uptime.c \ - toys/other/xxd.c \ - toys/pending/arp.c \ - toys/pending/diff.c \ - toys/pending/lsof.c \ - toys/pending/telnet.c \ - toys/pending/test.c \ - toys/pending/watch.c \ - toys/posix/ps.c \ - toys/posix/ulimit.c -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 27; echo $$?),0) -LOCAL_SRC_FILES += \ - toys/pending/xzcat.c -endif - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) -# Android 8.0/8.1 had some tools in different paths -LOCAL_SRC_FILES += \ - toys/net/ftpget.c -else -LOCAL_SRC_FILES += \ - toys/pending/ftpget.c -endif - -# Account for master branch changes pulld into CM14.1 -ifneq ($(CM_BUILD),) -LOCAL_SRC_FILES += \ - toys/android/log.c \ - toys/android/sendevent.c \ - toys/android/start.c \ - toys/net/ifconfig.c \ - toys/net/netcat.c \ - toys/net/netstat.c \ - toys/net/rfkill.c \ - toys/net/tunctl.c \ - toys/other/setfattr.c \ - toys/pending/chrt.c \ - toys/pending/fdisk.c \ - toys/pending/getfattr.c \ - toys/pending/host.c \ - toys/pending/resize.c \ - toys/posix/file.c -else -LOCAL_SRC_FILES += \ - toys/other/switch_root.c -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) -# Android 8.0 had some tools in different paths -LOCAL_SRC_FILES += \ - toys/android/log.c \ - toys/android/sendevent.c \ - toys/android/start.c \ - toys/net/ifconfig.c \ - toys/net/microcom.c \ - toys/net/netcat.c \ - toys/net/netstat.c \ - toys/net/rfkill.c \ - toys/net/tunctl.c \ - toys/pending/getfattr.c \ - toys/pending/modprobe.c \ - toys/posix/file.c \ - toys/posix/uudecode.c \ - toys/posix/uuencode.c -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0) -# Android 8.1 had some tools in different paths -LOCAL_SRC_FILES += \ - toys/other/chrt.c \ - toys/pending/gzip.c -else -LOCAL_SRC_FILES += \ - toys/pending/chrt.c -endif -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0) -# Android 9.0 -LOCAL_SRC_FILES += \ - toys/other/setfattr.c \ - toys/pending/fmt.c \ - toys/pending/stty.c -else -LOCAL_SRC_FILES += \ - toys/pending/setfattr.c -endif -LOCAL_SHARED_LIBRARIES += liblog -else -LOCAL_SRC_FILES += \ - toys/other/ifconfig.c \ - toys/other/netcat.c \ - toys/other/rfkill.c \ - toys/pending/netstat.c -endif -endif -else -LOCAL_SRC_FILES += \ - toys/other/ifconfig.c \ - toys/other/netcat.c \ - toys/other/rfkill.c \ - toys/other/switch_root.c \ - toys/pending/hwclock.c \ - toys/pending/netstat.c \ - toys/pending/pgrep.c \ - toys/pending/top.c -endif - -LOCAL_CFLAGS += \ - -std=c99 \ - -std=gnu11 \ - -Os \ - -Wno-char-subscripts \ - -Wno-sign-compare \ - -Wno-string-plus-int \ - -Wno-uninitialized \ - -Wno-unused-parameter \ - -funsigned-char \ - -ffunction-sections -fdata-sections \ - -fno-asynchronous-unwind-tables \ - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0) - toybox_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/null)-android - LOCAL_CFLAGS += -DTOYBOX_VERSION='"$(toybox_version)"' -else - toybox_version := $(shell sed 's/#define.*TOYBOX_VERSION.*"\(.*\)"/\1/p;d' $(LOCAL_PATH)/main.c) - LOCAL_CFLAGS += -DTOYBOX_VERSION=\"$(toybox_version)\" -endif - -LOCAL_CLANG := true - -LOCAL_SHARED_LIBRARIES += libcutils libselinux - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0) -LOCAL_CFLAGS += \ - -Wno-gnu-variable-sized-type-not-at-end \ - -Wno-missing-field-initializers - -LOCAL_SHARED_LIBRARIES += libz -endif - -LOCAL_MODULE := toybox_recovery -LOCAL_MODULE_STEM := toybox -LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin -LOCAL_MODULE_TAGS := optional - -# dupes: dd df du ls mount renice -# useless?: freeramdisk fsfreeze install makedevs mkfifo nbd-client -# partprobe pivot_root pwdx rev rfkill switch_root tty vconfig -# prefer BSD netcat instead?: nc netcat -# prefer efs2progs instead?: blkid chattr lsattr - -ALL_TOOLS := \ - acpi \ - basename \ - blkid \ - blockdev \ - bzcat \ - cal \ - cat \ - chcon \ - chgrp \ - chmod \ - chown \ - chroot \ - cksum \ - clear \ - comm \ - cmp \ - cp \ - cpio \ - cut \ - date \ - dirname \ - dmesg \ - dos2unix \ - echo \ - env \ - expand \ - expr \ - fallocate \ - false \ - find \ - free \ - getenforce \ - groups \ - head \ - hostname \ - hwclock \ - id \ - ifconfig \ - inotifyd \ - insmod \ - kill \ - load_policy \ - ln \ - logname \ - losetup \ - lsmod \ - lsusb \ - md5sum \ - mkdir \ - mknod \ - mkswap \ - mktemp \ - modinfo \ - more \ - mountpoint \ - mv \ - netstat \ - nice \ - nl \ - nohup \ - od \ - paste \ - patch \ - pgrep \ - pidof \ - pkill \ - pmap \ - printenv \ - printf \ - pwd \ - readlink \ - realpath \ - restorecon \ - rm \ - rmdir \ - rmmod \ - route \ - runcon \ - sed \ - seq \ - setenforce \ - setprop \ - setsid \ - sha1sum \ - sleep \ - sort \ - split \ - stat \ - strings \ - swapoff \ - swapon \ - sync \ - sysctl \ - tac \ - tail \ - tar \ - taskset \ - tee \ - time \ - timeout \ - touch \ - tr \ - true \ - truncate \ - umount \ - uname \ - uniq \ - unix2dos \ - usleep \ - vmstat \ - wc \ - which \ - whoami \ - xargs \ - yes - -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0) -ALL_TOOLS += \ - arp \ - base64 \ - chattr \ - df \ - diff \ - flock \ - freeramdisk \ - fsfreeze \ - fstype \ - ftpget \ - ftpput \ - help \ - install \ - ionice \ - iorenice \ - iotop \ - killall \ - ls \ - lsattr \ - lsof \ - lspci \ - makedevs \ - mkfifo \ - mount \ - nbd-client \ - nc \ - netcat \ - nproc \ - partprobe \ - pivot_root \ - ps \ - pwdx \ - readahead \ - renice \ - reset \ - rev \ - rfkill \ - sha224sum \ - sha256sum \ - sha384sum \ - sha512sum \ - telnet \ - test \ - top \ - traceroute \ - traceroute6 \ - tty \ - tunctl \ - ulimit \ - uptime \ - vconfig \ - watch \ - xxd -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 27; echo $$?),0) -ALL_TOOLS += \ - getprop \ - xzcat -endif -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 24; echo $$?),0) -ALL_TOOLS += \ - du \ - gzip \ - gunzip \ - zcat -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0) -ALL_TOOLS += \ - fmt \ - start \ - stop \ - stty -endif -ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 28; echo $$?),0) -ALL_TOOLS += \ - dd -endif -endif -# Account for master branch changes pulld into CM14.1 -ifneq ($(CM_BUILD),) -ALL_TOOLS += \ - chrt \ - fdisk \ - file \ - getfattr \ - host \ - log \ - resize \ - setfattr -endif -endif - -# Install the symlinks. -# LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);) -LOCAL_POST_INSTALL_CMD := $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);) - - -include $(BUILD_EXECUTABLE) - -# Make /sbin/toolbox launchers for each tool -SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS)) -$(SYMLINKS): TOYBOX_BINARY := $(LOCAL_MODULE_STEM) -$(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk - @echo "Symlink: $@ -> $(TOYBOX_BINARY)" - @mkdir -p $(dir $@) - @rm -rf $@ - $(hide) ln -sf $(TOYBOX_BINARY) $@ - -include $(CLEAR_VARS) -LOCAL_MODULE := toybox_symlinks -LOCAL_MODULE_TAGS := optional -LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS) -include $(BUILD_PHONY_PACKAGE) - -endif - -endif