add fix permissions and partition sd card to the recovery. TODO: Restrict to devicess that support large recovery images.
This commit is contained in:
		@@ -44,7 +44,7 @@ LOCAL_MODULE := recovery
 | 
			
		||||
 | 
			
		||||
LOCAL_FORCE_STATIC_EXECUTABLE := true
 | 
			
		||||
 | 
			
		||||
RECOVERY_VERSION := ClockworkMod Recovery v2.5.0.7
 | 
			
		||||
RECOVERY_VERSION := ClockworkMod Recovery v2.5.0.8
 | 
			
		||||
LOCAL_CFLAGS += -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
 | 
			
		||||
RECOVERY_API_VERSION := 2
 | 
			
		||||
LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)
 | 
			
		||||
@@ -194,6 +194,7 @@ include $(commands_recovery_local_path)/mtdutils/Android.mk
 | 
			
		||||
include $(commands_recovery_local_path)/tools/Android.mk
 | 
			
		||||
include $(commands_recovery_local_path)/edify/Android.mk
 | 
			
		||||
include $(commands_recovery_local_path)/updater/Android.mk
 | 
			
		||||
include $(commands_recovery_local_path)/utilities/Android.mk
 | 
			
		||||
commands_recovery_local_path :=
 | 
			
		||||
 | 
			
		||||
endif   # TARGET_ARCH == arm
 | 
			
		||||
 
 | 
			
		||||
@@ -418,6 +418,10 @@ void show_mount_usb_storage_menu()
 | 
			
		||||
 | 
			
		||||
int confirm_selection(const char* title, const char* confirm)
 | 
			
		||||
{
 | 
			
		||||
    struct stat info;
 | 
			
		||||
    if (0 == stat("/sdcard/clockworkmod/.no_confirm", &info))
 | 
			
		||||
        return 1;
 | 
			
		||||
 | 
			
		||||
    char* confirm_headers[]  = {  title, "  THIS CAN NOT BE UNDONE.", "", NULL };
 | 
			
		||||
    char* items[] = { "No",
 | 
			
		||||
                      "No",
 | 
			
		||||
@@ -474,7 +478,7 @@ int format_non_mtd_device(const char* root)
 | 
			
		||||
 | 
			
		||||
void show_partition_menu()
 | 
			
		||||
{
 | 
			
		||||
    static char* headers[] = {  "Mount and unmount partitions",
 | 
			
		||||
    static char* headers[] = {  "Mounts and Storage Menu",
 | 
			
		||||
                                "",
 | 
			
		||||
                                NULL 
 | 
			
		||||
    };
 | 
			
		||||
@@ -796,8 +800,8 @@ void show_advanced_menu()
 | 
			
		||||
                            "Wipe Battery Stats",
 | 
			
		||||
                            "Report Error",
 | 
			
		||||
                            "Key Test",
 | 
			
		||||
                            "Restart adbd",
 | 
			
		||||
                            "Process dump",
 | 
			
		||||
                            "Partition SD Card",
 | 
			
		||||
                            "Fix Permissions",
 | 
			
		||||
                            NULL
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@@ -851,12 +855,51 @@ void show_advanced_menu()
 | 
			
		||||
            }
 | 
			
		||||
            case 5:
 | 
			
		||||
            {
 | 
			
		||||
                __system("kill $(ps | grep adbd)");
 | 
			
		||||
                __system("/sbin/adbd &");
 | 
			
		||||
                static char* ext_sizes[] = { "128M",
 | 
			
		||||
                                             "256M",
 | 
			
		||||
                                             "512M",
 | 
			
		||||
                                             "1024M",
 | 
			
		||||
                                             NULL };
 | 
			
		||||
 | 
			
		||||
                static char* swap_sizes[] = { "0M",
 | 
			
		||||
                                              "32M",
 | 
			
		||||
                                              "64M",
 | 
			
		||||
                                              "128M",
 | 
			
		||||
                                              "256M",
 | 
			
		||||
                                              NULL };
 | 
			
		||||
 | 
			
		||||
                static char* ext_headers[] = { "Ext Size", "", NULL };
 | 
			
		||||
                static char* swap_headers[] = { "Swap Size", "", NULL };
 | 
			
		||||
 | 
			
		||||
                int ext_size = get_menu_selection(ext_headers, ext_sizes, 0);
 | 
			
		||||
                if (ext_size == GO_BACK)
 | 
			
		||||
                    continue;
 | 
			
		||||
                 
 | 
			
		||||
                int swap_size = get_menu_selection(swap_headers, swap_sizes, 0);
 | 
			
		||||
                if (swap_size == GO_BACK)
 | 
			
		||||
                    continue;
 | 
			
		||||
 | 
			
		||||
                char sddevice[256];
 | 
			
		||||
                const RootInfo *ri = get_root_info_for_path("SDCARD:");
 | 
			
		||||
                strcpy(sddevice, ri->device);
 | 
			
		||||
                // we only want the mmcblk, not the partition
 | 
			
		||||
                sddevice[strlen("/dev/block/mmcblkX")] = NULL;
 | 
			
		||||
                char cmd[PATH_MAX];
 | 
			
		||||
                setenv("SDPATH", sddevice, 1);
 | 
			
		||||
                sprintf(cmd, "sdparted -es %s -ss %s -efs ext3 -s", ext_sizes[ext_size], swap_sizes[swap_size]);
 | 
			
		||||
                ui_print("Partitioning SD Card... please wait...\n");
 | 
			
		||||
                if (0 == __system(cmd))
 | 
			
		||||
                    ui_print("Done!\n");
 | 
			
		||||
                else
 | 
			
		||||
                    ui_print("An error occured while partitioning your SD Card. Please see /tmp/recovery.log for more details.\n");
 | 
			
		||||
            }
 | 
			
		||||
            case 6:
 | 
			
		||||
            {
 | 
			
		||||
                __system("ps");
 | 
			
		||||
                ensure_root_path_mounted("SYSTEM:");
 | 
			
		||||
                ensure_root_path_mounted("DATA:");
 | 
			
		||||
                ui_print("Fixing permissions...\n");
 | 
			
		||||
                __system("fix_permissions");
 | 
			
		||||
                ui_print("Done!\n");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								roots.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								roots.h
									
									
									
									
									
								
							@@ -21,11 +21,11 @@
 | 
			
		||||
#include "mtdutils/mtdutils.h"
 | 
			
		||||
 | 
			
		||||
#ifndef SDCARD_DEVICE_PRIMARY
 | 
			
		||||
#define SDCARD_DEVICE_PRIMARY "/dev/block/mmcblk0"
 | 
			
		||||
#define SDCARD_DEVICE_PRIMARY "/dev/block/mmcblk0p1"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef SDCARD_DEVICE_SECONDARY
 | 
			
		||||
#define SDCARD_DEVICE_SECONDARY "/dev/block/mmcblk0p1"
 | 
			
		||||
#define SDCARD_DEVICE_SECONDARY "/dev/block/mmcblk0"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef SDEXT_DEVICE
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								utilities/Android.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								utilities/Android.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
LOCAL_PATH := $(call my-dir)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE := e2fsck
 | 
			
		||||
LOCAL_MODULE_TAGS := eng
 | 
			
		||||
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
 | 
			
		||||
include $(BUILD_PREBUILT)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE := fix_permissions
 | 
			
		||||
LOCAL_MODULE_TAGS := eng
 | 
			
		||||
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
 | 
			
		||||
include $(BUILD_PREBUILT)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE := parted
 | 
			
		||||
LOCAL_MODULE_TAGS := eng
 | 
			
		||||
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
 | 
			
		||||
include $(BUILD_PREBUILT)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE := sdparted
 | 
			
		||||
LOCAL_MODULE_TAGS := eng
 | 
			
		||||
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
 | 
			
		||||
include $(BUILD_PREBUILT)
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_MODULE := tune2fs
 | 
			
		||||
LOCAL_MODULE_TAGS := eng
 | 
			
		||||
LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
 | 
			
		||||
include $(BUILD_PREBUILT)
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								utilities/e2fsck
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								utilities/e2fsck
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										476
									
								
								utilities/fix_permissions
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										476
									
								
								utilities/fix_permissions
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,476 @@
 | 
			
		||||
#! /system/bin/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]
 | 
			
		||||
 | 
			
		||||
VERSION="2.03"
 | 
			
		||||
 | 
			
		||||
# 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 )
 | 
			
		||||
 | 
			
		||||
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 " /system/sd " "/proc/mounts" ) -eq 0; then
 | 
			
		||||
         $MOUNT /system/sd > /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 "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $WC -l )
 | 
			
		||||
   I=0
 | 
			
		||||
   $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | while read all_line; do
 | 
			
		||||
      I=$( $EXPR $I + 1 )
 | 
			
		||||
      fp_package "$all_line" $I $FP_NUMS
 | 
			
		||||
   done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fp_single()
 | 
			
		||||
{
 | 
			
		||||
   FP_SFOUND=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE | wc -l )
 | 
			
		||||
   if $TEST $FP_SFOUND -gt 1; then
 | 
			
		||||
      fp_print "Cannot perform single operation on $FP_SFOUND matched package(s)."
 | 
			
		||||
      elif $TEST $FP_SFOUND = "" -o $FP_SFOUND -eq 0; then
 | 
			
		||||
      fp_print "Could not find the package you specified in the packages.xml file."
 | 
			
		||||
   else
 | 
			
		||||
      FP_SPKG=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE )
 | 
			
		||||
      fp_package "${FP_SPKG}" 1 1
 | 
			
		||||
   fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fp_package()
 | 
			
		||||
{
 | 
			
		||||
   pkgline=$1
 | 
			
		||||
   curnum=$2
 | 
			
		||||
   endnum=$3
 | 
			
		||||
   CODEPATH=$( $ECHO $pkgline | $SED 's%.* codePath="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
 | 
			
		||||
   PACKAGE=$( $ECHO $pkgline | $SED 's%.* name="\(.*\)".*%\1%' | $CUT -d '"' -f1 )
 | 
			
		||||
   UID=$( $ECHO $pkgline | $SED 's%.*serId="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
 | 
			
		||||
   GID=$UID
 | 
			
		||||
   APPDIR=$( $ECHO $CODEPATH | $SED 's%^\(.*\)/.*%\1%' )
 | 
			
		||||
   APK=$( $ECHO $CODEPATH | $SED 's%^.*/\(.*\..*\)$%\1%' )
 | 
			
		||||
   
 | 
			
		||||
   #debug
 | 
			
		||||
   if $TEST $DEBUG -eq 1; then
 | 
			
		||||
      fp_print "CODEPATH: $CODEPATH APPDIR: $APPDIR APK:$APK UID/GID:$UID:$GID"
 | 
			
		||||
   fi
 | 
			
		||||
   
 | 
			
		||||
   #check for existence of apk
 | 
			
		||||
   if $TEST -e $CODEPATH;  then
 | 
			
		||||
      fp_print "Processing ($curnum of $endnum): $PACKAGE..."
 | 
			
		||||
      
 | 
			
		||||
      #lets get existing permissions of CODEPATH
 | 
			
		||||
      OLD_UGD=$( $LS -ln "$CODEPATH" )
 | 
			
		||||
      OLD_PER=$( $ECHO $OLD_UGD | $CUT -d ' ' -f1 )
 | 
			
		||||
      OLD_UID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f3 )
 | 
			
		||||
      OLD_GID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f4 )
 | 
			
		||||
      
 | 
			
		||||
      #apk source dirs
 | 
			
		||||
      if $TEST "$APPDIR" = "/system/app"; then
 | 
			
		||||
         #skip system apps if set
 | 
			
		||||
         if $TEST "$NOSYSTEM" = "1"; then
 | 
			
		||||
            fp_print "***SKIPPING SYSTEM APP ($PACKAGE)!"
 | 
			
		||||
            return
 | 
			
		||||
         fi
 | 
			
		||||
         fp_chown_uid $OLD_UID 0 "$CODEPATH"
 | 
			
		||||
         fp_chown_gid $OLD_GID 0 "$CODEPATH"
 | 
			
		||||
         fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
 | 
			
		||||
         elif $TEST "$APPDIR" = "/data/app" || $TEST "$APPDIR" = "/sd-ext/app"; then
 | 
			
		||||
         fp_chown_uid $OLD_UID 1000 "$CODEPATH"
 | 
			
		||||
         fp_chown_gid $OLD_GID 1000 "$CODEPATH"
 | 
			
		||||
         fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
 | 
			
		||||
         elif $TEST "$APPDIR" = "/data/app-private" || $TEST "$APPDIR" = "/sd-ext/app-private"; then
 | 
			
		||||
         fp_chown_uid $OLD_UID 1000 "$CODEPATH"
 | 
			
		||||
         fp_chown_gid $OLD_GID $GID "$CODEPATH"
 | 
			
		||||
         fp_chmod $OLD_PER "rw-r-----" 640 "$CODEPATH"
 | 
			
		||||
      fi
 | 
			
		||||
   else
 | 
			
		||||
      fp_print "$CODEPATH does not exist ($curnum of $endnum). Reinstall..."
 | 
			
		||||
      if $TEST $REMOVE -eq 1; then
 | 
			
		||||
         if $TEST -d /data/data/$PACKAGE ; then
 | 
			
		||||
            fp_print "Removing stale dir /data/data/$PACKAGE"
 | 
			
		||||
            if $TEST $SIMULATE -eq 0 ; then
 | 
			
		||||
               $RM -R /data/data/$PACKAGE
 | 
			
		||||
            fi
 | 
			
		||||
         fi
 | 
			
		||||
      fi
 | 
			
		||||
   fi
 | 
			
		||||
   
 | 
			
		||||
   #the data/data for the package
 | 
			
		||||
   if $TEST -d "/data/data/$PACKAGE"; then
 | 
			
		||||
      #find all directories in /data/data/$PACKAGE
 | 
			
		||||
      $FIND /data/data/$PACKAGE -type d -exec $LS -ldn {} \; | while read dataline; do
 | 
			
		||||
         #get existing permissions of that directory
 | 
			
		||||
         OLD_PER=$( $ECHO $dataline | $CUT -d ' ' -f1 )
 | 
			
		||||
         OLD_UID=$( $ECHO $dataline | $CUT -d ' ' -f3 )
 | 
			
		||||
         OLD_GID=$( $ECHO $dataline | $CUT -d ' ' -f4 )
 | 
			
		||||
         FILEDIR=$( $ECHO $dataline | $CUT -d ' ' -f9 )
 | 
			
		||||
         FOURDIR=$( $ECHO $FILEDIR | $CUT -d '/' -f5 )
 | 
			
		||||
         
 | 
			
		||||
         #set defaults for iteration
 | 
			
		||||
         ISLIB=0
 | 
			
		||||
         REVPERM=755
 | 
			
		||||
         REVPSTR="rwxr-xr-x"
 | 
			
		||||
         REVUID=$UID
 | 
			
		||||
         REVGID=$GID
 | 
			
		||||
         
 | 
			
		||||
         if $TEST "$FOURDIR" = ""; then
 | 
			
		||||
            #package directory, perms:755 owner:$UID:$GID
 | 
			
		||||
            fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
 | 
			
		||||
            elif $TEST "$FOURDIR" = "lib"; then
 | 
			
		||||
            #lib directory, perms:755 owner:1000:1000
 | 
			
		||||
            #lib files, perms:755 owner:1000:1000
 | 
			
		||||
            ISLIB=1
 | 
			
		||||
            REVPERM=755
 | 
			
		||||
            REVPSTR="rwxr-xr-x"
 | 
			
		||||
            REVUID=1000
 | 
			
		||||
            REVGID=1000
 | 
			
		||||
            fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
 | 
			
		||||
            elif $TEST "$FOURDIR" = "shared_prefs"; then
 | 
			
		||||
            #shared_prefs directories, perms:771 owner:$UID:$GID
 | 
			
		||||
            #shared_prefs files, perms:660 owner:$UID:$GID
 | 
			
		||||
            REVPERM=660
 | 
			
		||||
            REVPSTR="rw-rw----"
 | 
			
		||||
            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
 | 
			
		||||
            elif $TEST "$FOURDIR" = "databases"; then
 | 
			
		||||
            #databases directories, perms:771 owner:$UID:$GID
 | 
			
		||||
            #databases files, perms:660 owner:$UID:$GID
 | 
			
		||||
            REVPERM=660
 | 
			
		||||
            REVPSTR="rw-rw----"
 | 
			
		||||
            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
 | 
			
		||||
            elif $TEST "$FOURDIR" = "cache"; then
 | 
			
		||||
            #cache directories, perms:771 owner:$UID:$GID
 | 
			
		||||
            #cache files, perms:600 owner:$UID:GID
 | 
			
		||||
            REVPERM=600
 | 
			
		||||
            REVPSTR="rw-------"
 | 
			
		||||
            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
 | 
			
		||||
         else
 | 
			
		||||
            #other directories, perms:771 owner:$UID:$GID
 | 
			
		||||
            REVPERM=771
 | 
			
		||||
            REVPSTR="rwxrwx--x"
 | 
			
		||||
            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
 | 
			
		||||
         fi
 | 
			
		||||
         
 | 
			
		||||
         #change ownership of directories matched
 | 
			
		||||
         if $TEST "$ISLIB" = "1"; then
 | 
			
		||||
            fp_chown_uid $OLD_UID 1000 "$FILEDIR"
 | 
			
		||||
            fp_chown_gid $OLD_GID 1000 "$FILEDIR"
 | 
			
		||||
         else
 | 
			
		||||
            fp_chown_uid $OLD_UID $UID "$FILEDIR"
 | 
			
		||||
            fp_chown_gid $OLD_GID $GID "$FILEDIR"
 | 
			
		||||
         fi
 | 
			
		||||
         
 | 
			
		||||
         #if any files exist in directory with improper permissions reset them
 | 
			
		||||
         $FIND $FILEDIR -type f -maxdepth 1 ! -perm $REVPERM -exec $LS -ln {} \; | while read subline; do
 | 
			
		||||
            OLD_PER=$( $ECHO $subline | $CUT -d ' ' -f1 )
 | 
			
		||||
            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
 | 
			
		||||
            fp_chmod $OLD_PER $REVPSTR $REVPERM "$SUBFILE"
 | 
			
		||||
         done
 | 
			
		||||
         
 | 
			
		||||
         #if any files exist in directory with improper user reset them
 | 
			
		||||
         $FIND $FILEDIR -type f -maxdepth 1 ! -user $REVUID -exec $LS -ln {} \; | while read subline; do
 | 
			
		||||
            OLD_UID=$( $ECHO $subline | $CUT -d ' ' -f3 )
 | 
			
		||||
            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
 | 
			
		||||
            fp_chown_uid $OLD_UID $REVUID "$SUBFILE"
 | 
			
		||||
         done
 | 
			
		||||
         
 | 
			
		||||
         #if any files exist in directory with improper group reset them
 | 
			
		||||
         $FIND $FILEDIR -type f -maxdepth 1 ! -group $REVGID -exec $LS -ln {} \; | while read subline; do
 | 
			
		||||
            OLD_GID=$( $ECHO $subline | $CUT -d ' ' -f4 )
 | 
			
		||||
            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
 | 
			
		||||
            fp_chown_gid $OLD_GID $REVGID "$SUBFILE"
 | 
			
		||||
         done
 | 
			
		||||
      done
 | 
			
		||||
   fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
date_diff()
 | 
			
		||||
{
 | 
			
		||||
   if $TEST $# -ne 2; then
 | 
			
		||||
      FP_DDM="E"
 | 
			
		||||
      FP_DDS="E"
 | 
			
		||||
      return
 | 
			
		||||
   fi
 | 
			
		||||
   FP_DDD=$( $EXPR $2 - $1 )
 | 
			
		||||
   FP_DDM=$( $EXPR $FP_DDD / 60 )
 | 
			
		||||
   FP_DDS=$( $EXPR $FP_DDD % 60 )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fp_end()
 | 
			
		||||
{
 | 
			
		||||
   if $TEST $SYSREMOUNT -eq 1; then
 | 
			
		||||
      $MOUNT -o remount,ro $DEVICE /system > /dev/null 2>&1
 | 
			
		||||
   fi
 | 
			
		||||
   
 | 
			
		||||
   if $TEST $SYSSDMOUNT -eq 1; then
 | 
			
		||||
      $UMOUNT /system/sd > /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
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								utilities/parted
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								utilities/parted
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										637
									
								
								utilities/sdparted
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										637
									
								
								utilities/sdparted
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,637 @@
 | 
			
		||||
#!/sbin/sh
 | 
			
		||||
 | 
			
		||||
# do logging, if not excluded with -x
 | 
			
		||||
LOGFILE="/data/sdparted.log"
 | 
			
		||||
[ "$1" != "-x" ] && echo "$0" "$@" >> "$LOGFILE" && "$0" -x "$@" 2>&1 | tee -a "$LOGFILE" && exit
 | 
			
		||||
shift
 | 
			
		||||
 | 
			
		||||
ShowError() { echo ; echo " err: $1" ; echo ; exit 1 ; }
 | 
			
		||||
 | 
			
		||||
ShowMessage() { echo ; echo " msg: $1" ; }
 | 
			
		||||
 | 
			
		||||
ShowHelp() {
 | 
			
		||||
 | 
			
		||||
cat <<DONEHELP
 | 
			
		||||
 | 
			
		||||
$SCRIPTNAME v$SCRIPTREV created by $MYNAME
 | 
			
		||||
 | 
			
		||||
if you use this script in your work, please give some credit. thanks.
 | 
			
		||||
 | 
			
		||||
requirements: cm-recovery-v1.4
 | 
			
		||||
 | 
			
		||||
usage: $SCRIPTNAME [options]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
options:
 | 
			
		||||
 | 
			
		||||
 --fatsize|-fs SIZE[MG]     set the size of the fat32 partition to <SIZE>.
 | 
			
		||||
                            default=total sdcard size - (ext + swap)
 | 
			
		||||
						
 | 
			
		||||
 --extsize|-es SIZE[MG]     set the size of the ext partition to <SIZE>.
 | 
			
		||||
                            default=$EXTSIZE
 | 
			
		||||
						
 | 
			
		||||
 --swapsize|-ss SIZE[MG]    set the size of the swap partition to <SIZE>.
 | 
			
		||||
                            if set to 0, no swap partition will be created.
 | 
			
		||||
                            default=$SWAPSIZE
 | 
			
		||||
						
 | 
			
		||||
 --extfs|-efs TYPE          set the filesystem of ext partition to <TYPE>.
 | 
			
		||||
                            valid types=ext2, ext3, ext4
 | 
			
		||||
                            default=$EXTFS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 --upgradefs|-ufs TYPE      upgrades existing ext partition to <TYPE>.
 | 
			
		||||
                            this operation will NOT wipe your sdcard and
 | 
			
		||||
                            cannot be used with any partition creation options.
 | 
			
		||||
                            valid types=ext3, ext4
 | 
			
		||||
 | 
			
		||||
 --downgradefs|-dfs TYPE    downgrades existing ext partition to <TYPE>.
 | 
			
		||||
                            this operation will NOT wipe your sdcard and
 | 
			
		||||
                            cannot be used with any partition creation options.
 | 
			
		||||
                            valid types=ext2
 | 
			
		||||
 | 
			
		||||
							
 | 
			
		||||
 --interactive|-i           interactive mode
 | 
			
		||||
 | 
			
		||||
 --help|-h                  display this help
 | 
			
		||||
 | 
			
		||||
 --printonly|-po            display sdcard information
 | 
			
		||||
 | 
			
		||||
 --silent|-s                do not prompt user, not even initial warning.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
examples:
 | 
			
		||||
 $SCRIPTNAME                     creates swap=$SWAPSIZE ext2=$EXTSIZE fat32=remaining free space
 | 
			
		||||
 $SCRIPTNAME -efs ext4           creates swap=$SWAPSIZE ext4=$EXTSIZE fat32=remaining free space
 | 
			
		||||
 $SCRIPTNAME -fs 1.5G -efs ext3  creates swap=$SWAPSIZE ext3=$EXTSIZE fat32=1536
 | 
			
		||||
 $SCRIPTNAME -es 256M -ss 0      creates no swap ext2=256 fat32=remaining free space
 | 
			
		||||
 $SCRIPTNAME -ufs ext4           upgrades ext partition to ext4
 | 
			
		||||
 | 
			
		||||
DONEHELP
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UserAbort() {
 | 
			
		||||
	
 | 
			
		||||
	WHILEEXIT=
 | 
			
		||||
 | 
			
		||||
	while [ -z "$WHILEEXIT" ]
 | 
			
		||||
	do
 | 
			
		||||
		echo -n "do you want to continue? (Y/n) "
 | 
			
		||||
		read response
 | 
			
		||||
		echo
 | 
			
		||||
		[ "$response" = "Y" ] || [ "$response" = "n" ] || [ "$response" = "N" ] && WHILEEXIT="$response"
 | 
			
		||||
	done
 | 
			
		||||
	
 | 
			
		||||
	echo "$response" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
	
 | 
			
		||||
	[ "$response" != "Y" ]
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UnmountAll () {
 | 
			
		||||
 | 
			
		||||
	# unmount all partitions so we can work with $SDPATH
 | 
			
		||||
	# i'm assuming no more than 3 partitions
 | 
			
		||||
	# maybe make a little more elegant later
 | 
			
		||||
	echo -n "unmounting all partitions..."
 | 
			
		||||
	umount "$FATPATH" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
	umount "$EXTPATH" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
	umount "$SWAPPATH" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
	echo "done"
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CheckReqs() {
 | 
			
		||||
 | 
			
		||||
	echo -n "checking script requirements..."
 | 
			
		||||
	# check for valid sdcard
 | 
			
		||||
	[ -e $SDPATH ] || ShowError "$SDPATH does not exist!"
 | 
			
		||||
	
 | 
			
		||||
	# look for necessary programs
 | 
			
		||||
	[ -e $CMPARTED ] || ShowError "$CMPARTED does not exist!"
 | 
			
		||||
	[ -e $CMTUNE2FS ] || ShowError "$CMTUNE2FS does not exist!"
 | 
			
		||||
	[ -e $CME2FSCK ] || ShowError "$CME2FSCK does not exist!"
 | 
			
		||||
	
 | 
			
		||||
	# verify cm-v1.4
 | 
			
		||||
	PARTEDREV=`"$CMPARTED" "$SDPATH" version | grep Parted | cut -d" " -f3`
 | 
			
		||||
	[ "$PARTEDREV" == "1.8.8.1.179-aef3" ] || ShowError "you are not using parted v1.8.8.1.179-aef3!"
 | 
			
		||||
	echo "done"
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CheckTableType() {
 | 
			
		||||
 | 
			
		||||
	TABLETYPE=`"$CMPARTED" "$SDPATH" print | grep Table: | cut -d" " -f3`
 | 
			
		||||
	
 | 
			
		||||
	[ "$TABLETYPE" == "loop" -o "$TABLETYPE" == "msdos" ] && TTISOK=1 || TTISOK=0
 | 
			
		||||
	[ "$TABLETYPE" == "loop" ] && TTISLOOP=1 || TTISLOOP=0
 | 
			
		||||
	[ "$TABLETYPE" == "msdos" ] && TTISMSDOS=1 || TTISMOSDOS=0
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ValidateExtArg() {
 | 
			
		||||
 | 
			
		||||
	FUNC_RET="nonzero"
 | 
			
		||||
		
 | 
			
		||||
	# validating argument
 | 
			
		||||
	[ "$1" != "ext2" ] && [ "$1" != "ext3" ] && [ "$1" != "ext4" ] && FUNC_RET=
 | 
			
		||||
		
 | 
			
		||||
	[ -z "$FUNC_RET" ] && [ -z "$IMODE" ] && ShowError "$1 is not a valid filesystem."
 | 
			
		||||
	[ -z "$FUNC_RET" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid filesystem."
 | 
			
		||||
	
 | 
			
		||||
	# return valid argument
 | 
			
		||||
	[ -n "$FUNC_RET" ] && FUNC_RET="$1"
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ValidateSizeArg() {
 | 
			
		||||
 | 
			
		||||
	# check for zero-length arg to protect expr length
 | 
			
		||||
	[ -z "$1" ] && ShowError "zero-length argument passed to size-validator"
 | 
			
		||||
		
 | 
			
		||||
	SIZEMB=
 | 
			
		||||
	ARGLEN=`expr length $1`
 | 
			
		||||
	SIZELEN=$(($ARGLEN-1))
 | 
			
		||||
	SIZEARG=`expr substr $1 1 $SIZELEN`
 | 
			
		||||
	SIZEUNIT=`expr substr $1 $ARGLEN 1`
 | 
			
		||||
	
 | 
			
		||||
	# check if SIZEARG is an integer
 | 
			
		||||
	if [ $SIZEARG -eq $SIZEARG 2> /dev/null ] ; then
 | 
			
		||||
		# look for G
 | 
			
		||||
		[ "$SIZEUNIT" == "G" ] && SIZEMB=$(($SIZEARG * 1024))
 | 
			
		||||
		# look for M
 | 
			
		||||
		[ "$SIZEUNIT" == "M" ] && SIZEMB=$SIZEARG
 | 
			
		||||
		# no units on arg AND prevents using bogus size units
 | 
			
		||||
		[ -z "$SIZEMB" ] && [ $SIZEUNIT -eq $SIZEUNIT 2> /dev/null ] && SIZEMB=$1
 | 
			
		||||
	# check if SIZEARG is a floating point number, GB only
 | 
			
		||||
	elif [ `expr index "$SIZEARG" .` != 0 ] && [ "$SIZEUNIT" == "G" ]  ; then
 | 
			
		||||
		INT=`echo "$SIZEARG" | cut -d"." -f1`
 | 
			
		||||
		FRAC=`echo "$SIZEARG" | cut -d"." -f2`
 | 
			
		||||
		SIGDIGITS=`expr length $FRAC`
 | 
			
		||||
		
 | 
			
		||||
		[ -z "$INT" ] && INT=0
 | 
			
		||||
		INTMB=$(($INT * 1024))
 | 
			
		||||
		FRACMB=$((($FRAC * 1024) / (10**$SIGDIGITS)))
 | 
			
		||||
		SIZEMB=$(($INTMB + $FRACMB))
 | 
			
		||||
	# it's not a valid size
 | 
			
		||||
	else
 | 
			
		||||
		[ -z "$IMODE" ] && ShowError "$1 is not a valid size"
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	[ -z "$SIZEMB" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid size"
 | 
			
		||||
	
 | 
			
		||||
	# return valid argument in MB
 | 
			
		||||
	FUNC_RET=$SIZEMB
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CalculatePartitions() {
 | 
			
		||||
 | 
			
		||||
	# get size of sdcard in MB & do some math
 | 
			
		||||
	SDSIZEMB=`"$CMPARTED" "$SDPATH" unit MB print | grep $SDPATH | cut -d" " -f3`
 | 
			
		||||
	SDSIZE=${SDSIZEMB%MB}
 | 
			
		||||
	[ -n "$FATSIZE" ] || FATSIZE=$(($SDSIZE - $EXTSIZE - $SWAPSIZE))
 | 
			
		||||
	EXTEND=$(($FATSIZE + $EXTSIZE))
 | 
			
		||||
	SWAPEND=$(($EXTEND + $SWAPSIZE))
 | 
			
		||||
	
 | 
			
		||||
	# check for fatsize of 0
 | 
			
		||||
	[ $FATSIZE -le 0 ] && ShowError "must have a fat32 partition greater than 0MB"
 | 
			
		||||
	
 | 
			
		||||
	# check for zero-length sdsize...
 | 
			
		||||
	# indicative of parted not reporting length 
 | 
			
		||||
	# correctly b/c of error on sdcard
 | 
			
		||||
	[ -z "$SDSIZE" ] && ShowError "zero-length argument passed to partition-calculator"
 | 
			
		||||
	
 | 
			
		||||
	# make sure we're not being asked to do the impossible
 | 
			
		||||
	[ $(($FATSIZE + $EXTSIZE + $SWAPSIZE)) -gt $SDSIZE ] && [ -z "$IMODE" ] && ShowError "sum of requested partitions is greater than sdcard size"
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
UpgradeDowngradeOnly() {
 | 
			
		||||
 | 
			
		||||
	if [ -n "$UEXTFSONLY" ] ; then
 | 
			
		||||
		echo
 | 
			
		||||
		[ -n "$CREATEPART" ] && ShowError "cannot use upgrade option when creating partitions, use -efs instead"
 | 
			
		||||
		[ -n "$DEXTFSONLY" ] && ShowError "cannot upgrade AND downgrade, it just doesn't make sense"
 | 
			
		||||
		echo "you have chosen to upgrade $EXTPATH to $UEXTFSONLY."
 | 
			
		||||
		echo "this action will NOT delete any data from sdcard."
 | 
			
		||||
		echo
 | 
			
		||||
		[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
 | 
			
		||||
		echo
 | 
			
		||||
		UpgradeExt "$UEXTFSONLY"
 | 
			
		||||
		ShowCardInfo
 | 
			
		||||
	elif [ -n "$DEXTFSONLY" ] ; then
 | 
			
		||||
		echo
 | 
			
		||||
		[ -n "$CREATEPART" ] && ShowError "cannot use downgrade option when creating partitions."
 | 
			
		||||
		[ -n "$UEXTFSONLY" ] && ShowError "cannot downgrade AND upgrade, it just doesn't make sense."
 | 
			
		||||
		echo "you have chosen to downgrade $EXTPATH to $DEXTFSONLY."
 | 
			
		||||
		echo "this action will NOT delete any data from sdcard."
 | 
			
		||||
		echo
 | 
			
		||||
		[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
 | 
			
		||||
		echo
 | 
			
		||||
		DowngradeExt "$DEXTFSONLY"
 | 
			
		||||
		ShowCardInfo
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PrepareSdCard() {
 | 
			
		||||
 | 
			
		||||
	echo
 | 
			
		||||
	if [ $TTISOK -eq 0 ] ; then
 | 
			
		||||
		echo "partition 1 may not be aligned to cylinder boundaries."
 | 
			
		||||
		echo "to continue, this must be corrected."
 | 
			
		||||
	elif [ $TTISLOOP -gt 0 ] ; then
 | 
			
		||||
		echo "your sdcard's partition table type is $TABLETYPE."
 | 
			
		||||
		echo "to continue, partition table must be set to 'msdos'."
 | 
			
		||||
	elif [ $TTISMSDOS -gt 0 ] ; then
 | 
			
		||||
		# just a reminder..in a later version, 
 | 
			
		||||
		# i may implement resizing of partitions, 
 | 
			
		||||
		# so this will be unnecessary. but until then...
 | 
			
		||||
		echo "to continue, all existing partitions must be removed."
 | 
			
		||||
	else
 | 
			
		||||
		# this is not good, and should never happen
 | 
			
		||||
		# if it does, there is a serious problem
 | 
			
		||||
		ShowError "sdcard failed table type check."
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	echo
 | 
			
		||||
	echo "this action will remove all data from your sdcard."
 | 
			
		||||
	echo
 | 
			
		||||
	[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
 | 
			
		||||
	
 | 
			
		||||
	[ $TTISOK -eq 0 ] && echo -n "correcting cylinder boundaries..."
 | 
			
		||||
	[ $TTISLOOP -gt 0 ] && echo -n "setting partition table to msdos..."
 | 
			
		||||
	[ $TTISMSDOS -gt 0 ] && echo -n "removing all partitions..."
 | 
			
		||||
	
 | 
			
		||||
	"$CMPARTED" -s "$SDPATH" mklabel msdos 2>&1 >>"$LOGFILE"
 | 
			
		||||
	echo "done"
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ShowActions() {
 | 
			
		||||
 | 
			
		||||
	echo
 | 
			
		||||
	echo "total size of sdcard=$SDSIZEMB"
 | 
			
		||||
	echo
 | 
			
		||||
	echo "the following actions will be performed:"
 | 
			
		||||
	echo " -create $FATSIZE""MB fat32 partition"
 | 
			
		||||
	[ $EXTSIZE -gt 0 ] && echo " -create $EXTSIZE""MB ext2 partition"
 | 
			
		||||
	[ $SWAPSIZE -gt 0 ] && echo " -create $SWAPSIZE""MB swap partition"
 | 
			
		||||
	[ "$EXTFS" != "ext2" ] && echo " -ext2 partition will be upgraded to $EXTFS"
 | 
			
		||||
	echo
 | 
			
		||||
	[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ShowCardInfo() {
 | 
			
		||||
 | 
			
		||||
	CheckTableType
 | 
			
		||||
	
 | 
			
		||||
	echo
 | 
			
		||||
	echo "retrieving current sdcard information..."
 | 
			
		||||
	
 | 
			
		||||
	if [ $TTISOK -gt 0 ] ; then
 | 
			
		||||
		echo
 | 
			
		||||
		parted "$SDPATH" print
 | 
			
		||||
		echo
 | 
			
		||||
		echo "script log is located @ /data/sdparted.log"
 | 
			
		||||
		exit 0
 | 
			
		||||
	else
 | 
			
		||||
		echo
 | 
			
		||||
		echo "partition 1 may not be aligned to cylinder boundaries."
 | 
			
		||||
		ShowError "cannot complete print operation."
 | 
			
		||||
	fi
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PartitionSdCard() {
 | 
			
		||||
 | 
			
		||||
	echo "performing selected actions..."
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
	if [ $FATSIZE -gt 0 ] ; then
 | 
			
		||||
		echo -n "creating fat32 partition..."
 | 
			
		||||
		"$CMPARTED" -s "$SDPATH" mkpartfs primary fat32 0 "$FATSIZE"MB 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if [ $EXTSIZE -gt 0 ] ; then
 | 
			
		||||
		echo -n "creating ext2 partition..."
 | 
			
		||||
		"$CMPARTED" -s "$SDPATH" mkpartfs primary ext2 "$FATSIZE"MB "$EXTEND"MB 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if [ $SWAPSIZE -gt 0 ] ; then
 | 
			
		||||
		echo -n "creating swap partition..."
 | 
			
		||||
		"$CMPARTED" -s "$SDPATH" mkpartfs primary linux-swap "$EXTEND"MB "$SWAPEND"MB 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UpgradeExt() {
 | 
			
		||||
 | 
			
		||||
	# check for no upgrade
 | 
			
		||||
	[ "$1" == "ext2" ] && return
 | 
			
		||||
	# check for ext partition
 | 
			
		||||
	[ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist"
 | 
			
		||||
 | 
			
		||||
	# have to use -m switch for this check b/c parted incorrectly
 | 
			
		||||
	# reports all ext partitions as ext2 when running print <number>
 | 
			
		||||
	CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5`
 | 
			
		||||
	[ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1"
 | 
			
		||||
 | 
			
		||||
	# grabbed the code bits for ext3 from upgrade_fs(credit:cyanogen)
 | 
			
		||||
	# check for ext2...must upgrade to ext3 first b4 ext4
 | 
			
		||||
	if [ "$1" == "ext3" -o "$1" == "ext4" ] ; then
 | 
			
		||||
		echo -n "adding journaling to $EXTPATH..."
 | 
			
		||||
		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CME2FSCK" -p "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CMTUNE2FS" -c0 -i0 -j "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# and got convert to ext4 from xda-forum(credit:Denkai)
 | 
			
		||||
	if [ "$1" == "ext4" ] ; then
 | 
			
		||||
		echo -n "converting $EXTPATH to ext4 filesystem..."
 | 
			
		||||
		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CMTUNE2FS" -O extents,uninit_bg,dir_index "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CME2FSCK" -fpDC0 "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DowngradeExt() {
 | 
			
		||||
 | 
			
		||||
	# check for ext partition
 | 
			
		||||
	[ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist"
 | 
			
		||||
 | 
			
		||||
	# have to use print for this check b/c parted incorrectly
 | 
			
		||||
	# reports all ext partitions as ext2 when running print <number>
 | 
			
		||||
	CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5`
 | 
			
		||||
	[ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1"
 | 
			
		||||
	
 | 
			
		||||
	if [ "$CHECKEXTFS" == "ext4" -o "$1" == "ext3" ] ; then
 | 
			
		||||
		# interweb says downgrading from ext4 is not possible
 | 
			
		||||
		# without a backup/restore procedure.
 | 
			
		||||
		# if i figure it out, i'll implement it.
 | 
			
		||||
		ShowError "downgrading from ext4 is not currently supported"
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if [ "$1" == "ext2" ] ; then
 | 
			
		||||
		echo -n "removing journaling from $EXTPATH..."
 | 
			
		||||
		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CMTUNE2FS" -O ^has_journal "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		"$CME2FSCK" -fp "$EXTPATH" 2>&1 >>"$LOGFILE"
 | 
			
		||||
		echo "done"
 | 
			
		||||
	fi
 | 
			
		||||
	echo
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Interactive() {
 | 
			
		||||
 | 
			
		||||
cat <<DONEINSTRUCT
 | 
			
		||||
 | 
			
		||||
sdparted interactive mode
 | 
			
		||||
 | 
			
		||||
rules:
 | 
			
		||||
1. no answer means you accept default value
 | 
			
		||||
2. enter '0' for no partition
 | 
			
		||||
 | 
			
		||||
DONEINSTRUCT
 | 
			
		||||
 | 
			
		||||
	UserAbort && ShowError "script canceled by user"
 | 
			
		||||
	
 | 
			
		||||
	CalculatePartitions
 | 
			
		||||
	
 | 
			
		||||
	GetSwapSize
 | 
			
		||||
	
 | 
			
		||||
	FATSIZE=
 | 
			
		||||
	
 | 
			
		||||
	CalculatePartitions
 | 
			
		||||
	
 | 
			
		||||
	GetExtSize
 | 
			
		||||
	
 | 
			
		||||
	GetExtType
 | 
			
		||||
	
 | 
			
		||||
	FATSIZE=
 | 
			
		||||
	
 | 
			
		||||
	CalculatePartitions
 | 
			
		||||
	
 | 
			
		||||
	GetFatSize
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GetSwapSize() {
 | 
			
		||||
 | 
			
		||||
	SWAPTEST=
 | 
			
		||||
	
 | 
			
		||||
	while [ -z "$SWAPTEST" ]
 | 
			
		||||
	do
 | 
			
		||||
		echo
 | 
			
		||||
		echo -n "swap partition size [default=$SWAPSIZE]: "
 | 
			
		||||
		read SWAPRESP
 | 
			
		||||
		
 | 
			
		||||
		[ -z "$SWAPRESP" ] && SWAPRESP="$SWAPSIZE"
 | 
			
		||||
		echo "$SWAPRESP" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		
 | 
			
		||||
		ValidateSizeArg "$SWAPRESP"
 | 
			
		||||
		SWAPTEST="$FUNC_RET"
 | 
			
		||||
		[ -n "$SWAPTEST" ] && [ $SWAPTEST -gt $SDSIZE ] && ShowMessage "$SWAPRESP > available space($(($SDSIZE))M)." && SWAPTEST=
 | 
			
		||||
	done
 | 
			
		||||
	
 | 
			
		||||
	SWAPSIZE=$SWAPTEST
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GetExtSize() {
 | 
			
		||||
 | 
			
		||||
	EXTTEST=
 | 
			
		||||
	
 | 
			
		||||
	while [ -z "$EXTTEST" ]
 | 
			
		||||
	do
 | 
			
		||||
		echo
 | 
			
		||||
		echo -n "ext partition size [default=$EXTSIZE]: "
 | 
			
		||||
		read EXTRESP
 | 
			
		||||
		
 | 
			
		||||
		[ -z "$EXTRESP" ] && EXTRESP="$EXTSIZE"
 | 
			
		||||
		echo "$EXTRESP" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		
 | 
			
		||||
		ValidateSizeArg "$EXTRESP"
 | 
			
		||||
		EXTTEST="$FUNC_RET"
 | 
			
		||||
		
 | 
			
		||||
		[ -n "$EXTTEST" ] && [ $EXTTEST -gt $(($SDSIZE - $SWAPSIZE)) ] && ShowMessage "$EXTRESP > available space($(($SDSIZE - $SWAPSIZE))M)." && EXTTEST=
 | 
			
		||||
	done
 | 
			
		||||
	
 | 
			
		||||
	EXTSIZE=$EXTTEST
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GetExtType() {
 | 
			
		||||
 | 
			
		||||
	FSTEST=
 | 
			
		||||
	
 | 
			
		||||
	while [ -z "$FSTEST" ]
 | 
			
		||||
	do
 | 
			
		||||
		echo
 | 
			
		||||
		echo -n "ext partition type [default=$EXTFS]: "
 | 
			
		||||
		read FSRESP
 | 
			
		||||
		
 | 
			
		||||
		[ -z "$FSRESP" ] && FSRESP="$EXTFS"
 | 
			
		||||
		echo "$FSRESP" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		
 | 
			
		||||
		ValidateExtArg "$FSRESP"
 | 
			
		||||
		FSTEST="$FUNC_RET"
 | 
			
		||||
	done
 | 
			
		||||
	
 | 
			
		||||
	EXTFS="$FSTEST"
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GetFatSize() {
 | 
			
		||||
 | 
			
		||||
	FATTEST=
 | 
			
		||||
	
 | 
			
		||||
	while [ -z "$FATTEST" ]
 | 
			
		||||
	do
 | 
			
		||||
		echo
 | 
			
		||||
		echo -n "fat partition size [default=$FATSIZE]: "
 | 
			
		||||
		read FATRESP
 | 
			
		||||
		
 | 
			
		||||
		[ -z "$FATRESP" ] && FATRESP="$FATSIZE"
 | 
			
		||||
		echo "$FATRESP" > /dev/null 2>&1 >>"$LOGFILE"
 | 
			
		||||
		
 | 
			
		||||
		ValidateSizeArg "$FATRESP"
 | 
			
		||||
		FATTEST="$FUNC_RET"
 | 
			
		||||
		
 | 
			
		||||
		[ -n "$FATTEST" ] && [ $FATTEST -gt $FATSIZE ] && ShowMessage "$FATRESP > available space($(($SDSIZE - $SWAPSIZE - $EXTSIZE))M)." && FATTEST=
 | 
			
		||||
		[ -n "$FATTEST" ] && [ $FATTEST -le 0 ] && ShowMessage "must have a fat32 partition greater than 0MB" && FATTEST=
 | 
			
		||||
	done
 | 
			
		||||
	
 | 
			
		||||
	FATSIZE=$FATTEST
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SCRIPTNAME="sdparted"
 | 
			
		||||
SCRIPTREV="0.6"
 | 
			
		||||
MYNAME="51dusty"
 | 
			
		||||
 | 
			
		||||
IMODE=
 | 
			
		||||
SILENTRUN=
 | 
			
		||||
CREATEPART=
 | 
			
		||||
FUNC_RET=
 | 
			
		||||
 | 
			
		||||
UEXTFSONLY=
 | 
			
		||||
DEXTFSONLY=
 | 
			
		||||
 | 
			
		||||
TTISOK=
 | 
			
		||||
TTISLOOP=
 | 
			
		||||
TTISMSDOS=
 | 
			
		||||
 | 
			
		||||
SDSIZE=
 | 
			
		||||
SDSIZEMB=
 | 
			
		||||
if [ -z "$SDPATH" ]
 | 
			
		||||
then
 | 
			
		||||
    SDPATH="/dev/block/mmcblk0"
 | 
			
		||||
else
 | 
			
		||||
    echo Found SDPATH=$SDPATH
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
FATSIZE=
 | 
			
		||||
FATTYPE="fat32"
 | 
			
		||||
FATPATH=$SDPATH"p1"
 | 
			
		||||
 | 
			
		||||
EXTSIZE=512
 | 
			
		||||
EXTFS="ext2"
 | 
			
		||||
EXTPATH=$SDPATH"p2"
 | 
			
		||||
EXTEND=
 | 
			
		||||
 | 
			
		||||
SWAPSIZE=32
 | 
			
		||||
SWAPTYPE="linux-swap"
 | 
			
		||||
SWAPPATH=$SDPATH"p3"
 | 
			
		||||
SWAPEND=
 | 
			
		||||
 | 
			
		||||
CMPARTED="/sbin/parted"
 | 
			
		||||
CMTUNE2FS="/sbin/tune2fs"
 | 
			
		||||
CME2FSCK="/sbin/e2fsck"
 | 
			
		||||
 | 
			
		||||
# give the output some breathing room
 | 
			
		||||
echo "$SCRIPTREV" >> "$LOGFILE" 
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# check for arguments
 | 
			
		||||
while [ $# -gt 0 ] ; do
 | 
			
		||||
  case "$1" in
 | 
			
		||||
 | 
			
		||||
    -h|--help) ShowHelp ; exit 0 ;;
 | 
			
		||||
    
 | 
			
		||||
    -fs|--fatsize) shift ; ValidateSizeArg "$1" ; FATSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
 | 
			
		||||
    -es|--extsize) shift ; ValidateSizeArg "$1" ; EXTSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
 | 
			
		||||
	-ss|--swapsize) shift ; ValidateSizeArg "$1" ; SWAPSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
 | 
			
		||||
	-efs|--extfs) shift ; ValidateExtArg "$1" ; EXTFS="$FUNC_RET" ; CREATEPART="$1" ;;
 | 
			
		||||
	
 | 
			
		||||
	-ufs|--upgradefs) shift ; ValidateExtArg "$1" ; UEXTFSONLY="$FUNC_RET" ;;
 | 
			
		||||
	-dfs|--downgradefs) shift ; ValidateExtArg "$1" ; DEXTFSONLY="$FUNC_RET" ;;
 | 
			
		||||
	
 | 
			
		||||
	-i|--interactive) IMODE="$1" ;;
 | 
			
		||||
	
 | 
			
		||||
	-s|--silent) SILENTRUN="$1" ;;
 | 
			
		||||
	
 | 
			
		||||
	-po|--printonly) ShowCardInfo ;;
 | 
			
		||||
	
 | 
			
		||||
	*) ShowHelp ; ShowError "unknown argument '$1'" ;;
 | 
			
		||||
 | 
			
		||||
  esac
 | 
			
		||||
  shift
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# can't do silent when in interactive mode
 | 
			
		||||
[ -n "$IMODE" ] && SILENTRUN=
 | 
			
		||||
 | 
			
		||||
# make sure sdcard exists and all needed files are here
 | 
			
		||||
CheckReqs
 | 
			
		||||
 | 
			
		||||
# unmount all
 | 
			
		||||
UnmountAll
 | 
			
		||||
 | 
			
		||||
# upgrade only? downgrade only?
 | 
			
		||||
UpgradeDowngradeOnly
 | 
			
		||||
 | 
			
		||||
# check table
 | 
			
		||||
CheckTableType
 | 
			
		||||
 | 
			
		||||
# prep card
 | 
			
		||||
PrepareSdCard
 | 
			
		||||
 | 
			
		||||
# check for interactive mode
 | 
			
		||||
[ -n "$IMODE" ] && Interactive
 | 
			
		||||
 | 
			
		||||
# do some math
 | 
			
		||||
CalculatePartitions
 | 
			
		||||
 | 
			
		||||
# last chance to cancel
 | 
			
		||||
ShowActions
 | 
			
		||||
 | 
			
		||||
# partition card
 | 
			
		||||
PartitionSdCard
 | 
			
		||||
 | 
			
		||||
# upgrade fs if necessary
 | 
			
		||||
UpgradeExt "$EXTFS"
 | 
			
		||||
 | 
			
		||||
# say goodbye and show print output
 | 
			
		||||
ShowCardInfo
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								utilities/tune2fs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								utilities/tune2fs
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user