Skip to content

M #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 147 commits into
base: cupcake
Choose a base branch
from
Open

M #1

Changes from all commits
Commits
Show all changes
147 commits
Select commit Hold shift + click to select a range
6d12e0d
Merge branch 'cupcake'
Jan 10, 2009
fac53c1
Remove obsolete OTA tools
Mar 2, 2009
c5c389f
Merge commit 'remotes/korg/cupcake' into cupcake_to_master
Mar 18, 2009
97c618f
Automated import from //branches/master/...@140824,140824
Mar 25, 2009
cf5b170
Automated import from //branches/donutburger/...@140818,140818
Mar 25, 2009
bc012de
Automated import from //branches/donutburger/...@142141,142141
Mar 25, 2009
e6faba0
Automated import from //branches/master/...@142142,142142
Mar 25, 2009
58bde31
AI 143128: Use PNG instead of BMP for recovery image icons. This saves
Mar 27, 2009
b2b467c
Merge commit 'korg/cupcake'
Mar 27, 2009
19faefa
AI 143289: am: CL 143128 Use PNG instead of BMP for recovery image ic…
Mar 28, 2009
36a9c1e
Merge branch 'open_source_no_contributions' into google_internal
Mar 29, 2009
1066d2c
AI 144070: Add an option to wipe cache (only) to the recovery menu.
Apr 1, 2009
4928385
AI 144082: Remove the unused "unpacking" recovery icon.
Apr 1, 2009
d1b19b9
AI 144130: Don't build OTA package keys into the recovery binary; read
Apr 1, 2009
fc3ada0
AI 144101: am: CL 144070 Add an option to wipe cache (only) to the re…
Apr 2, 2009
5d30026
Merge branch 'readonly-p4-master'
Apr 2, 2009
0555388
AI 144105: am: CL 144082 Remove the unused "unpacking" recovery icon.
Apr 2, 2009
d5ebb7b
Merge branch 'readonly-p4-master'
Apr 2, 2009
796901d
AI 144132: am: CL 144130 Don't build OTA package keys into the recove…
Apr 2, 2009
275acbe
Merge branch 'readonly-p4-master'
Apr 2, 2009
29fcea1
Merge donut into master
Apr 23, 2009
f554ceb
merge cupcake into donut
Apr 23, 2009
7fce23f
Merge donut into master
Apr 23, 2009
596271f
handle short writes when unzipping files
Apr 29, 2009
0f03d14
am 596271f: handle short writes when unzipping files
Apr 30, 2009
683c462
align data passed to write() on 32k boundaries
May 6, 2009
1c10ff3
am 683c462: align data passed to write() on 32k boundaries
May 6, 2009
1c4ceae
undo temporary alignment hack
May 8, 2009
985d95f
am 1c4ceae: undo temporary alignment hack
May 8, 2009
07e1dca
don't say "install complete" when it really isn't
May 29, 2009
9d5be84
am 07e1dca7: don\'t say "install complete" when it really isn\'t
Jun 1, 2009
f28c916
remove unused permissions scheme from amend
Jun 2, 2009
8caf81f
am f28c916e: remove unused permissions scheme from amend
Jun 3, 2009
b2ee920
allow OTA package to provide binary instead of script
Jun 4, 2009
825915d
am b2ee9201: allow OTA package to provide binary instead of script
Jun 5, 2009
573fd7b
Force the fb into 16 bpp mode in case the hw has some other default.
Jun 5, 2009
37bee62
core of edify, an eventual replacement for amend
Jun 9, 2009
9b9c211
Merge change 3514 into donut
Jun 10, 2009
d9d9d17
am 9b9c2114: Merge change 3514 into donut
Jun 10, 2009
ddd6a28
split out device-specific recovery UI code into vendor directories
Jun 9, 2009
cbb9129
fix error from change 3606
Jun 11, 2009
9931f7f
edify extensions for OTA package installation, part 1
Jun 10, 2009
c3885fa
fix simulator build by excluding more of recovery
Jun 12, 2009
9dbc027
fix sim build in donut, too
Jun 12, 2009
6c301e2
am 9931f7f3: edify extensions for OTA package installation, part 1
Jun 12, 2009
32eb0a8
am 9dbc027b: fix sim build in donut, too
Jun 12, 2009
8edb00c
edify extensions for OTA package installation, part 2
Jun 12, 2009
d9c9d10
fixes to edify and updater script
Jun 12, 2009
e3da02e
add less_than_int, greater_than_int to edify
Jun 12, 2009
cf2b2a2
am 8edb00c9: edify extensions for OTA package installation, part 2
Jun 15, 2009
84cbfb6
am d9c9d10d: fixes to edify and updater script
Jun 15, 2009
e77e091
am e3da02e7: add less_than_int, greater_than_int to edify
Jun 15, 2009
fb2e3af
let the "firmware" command take the file straight from the package
Jun 18, 2009
d683785
resolved conflicts for merge of fb2e3af3 to master
Jun 18, 2009
47cace9
add file_getprop() to updater
Jun 18, 2009
f8aaf0a
am 47cace98: add file_getprop() to updater
Jun 18, 2009
b128f54
add function for device-specific wipe data features
Jun 18, 2009
2b0fdc6
add device extension mechanism to updater
Jun 19, 2009
fbf3c10
improve updater progress bar
Jun 24, 2009
4275c3c
am fbf3c10e: improve updater progress bar
Jun 25, 2009
0bbfe3d
fix off-by-one error in set_perm()
Jun 25, 2009
898ef39
am 0bbfe3d9: fix off-by-one error in set_perm()
Jun 25, 2009
ad3db09
remove updater from the user system image
Jun 26, 2009
d8f7c9b
Merge change 5545 into donut
Jun 26, 2009
fc382df
am d8f7c9b8: Merge change 5545 into donut
Jun 29, 2009
bec02d5
skip over all-zero blocks when reading MTD partition
Jul 1, 2009
c457ff6
am bec02d57: skip over all-zero blocks when reading MTD partition
Jul 2, 2009
64893cc
remove amend
Jul 14, 2009
608fa02
resolved conflicts for merge of 64893ccc to master
Jul 16, 2009
23412e6
fix compile warnings in recovery, change images
Jul 23, 2009
20697b9
only build flash_image for eng
Jul 23, 2009
7bd5c66
Merge korg/donut into korg/master
Jul 26, 2009
eb1ac27
reconcile korg/master into goog/master
Jul 26, 2009
34109de
merge from donut
Jul 29, 2009
b9955b8
am 20697b96: only build flash_image for eng
Aug 4, 2009
0cf0e33
merge from open-source master
Aug 4, 2009
54e2e86
do not merge: cherry-picked 60151a295ccf726238dc47456d80b427db6d6a38 …
Aug 17, 2009
34c98df
do not merge: cherry-pick of c2d666bd4f6eb5f7a9f17b10435c161cb105b7c5…
Aug 18, 2009
a3f89ea
add a run_program() function to edify
Sep 10, 2009
196c25c
don't complain if recovery icon is short
Sep 15, 2009
60babf8
delete files before symlinking; log error messages
Sep 18, 2009
fd8fb0c
reduce fraction of progress bar for verification
Sep 20, 2009
f93d816
confirm before wiping user data in recovery
Sep 22, 2009
1c8ca2e
replace generic recovery icons
Oct 2, 2009
988500b
add terminator to recovery's getopt_long options array
Oct 6, 2009
54ec81f
Merge change I1c8ca2e4 into eclair
Oct 8, 2009
c652e41
fix cut-and-paste error in verifier
Dec 8, 2009
17a4709
use MEMGETBADBLOCK to look for bad blocks when reading MTD partitions
Dec 15, 2009
22d79a5
make offsets in firmware update header not point to bad blocks
Jan 13, 2010
89d385c
allow mouse/trackball click for enter on touch only devices.
koush Feb 4, 2010
0d4ff2f
allow alt-l or menu to bring up the recovery menu
koush Feb 8, 2010
4c1eed2
Initial reintegration of legacy update process that used update-script
koush Feb 12, 2010
6060e5c
update.zip somewhat working now...
koush Feb 12, 2010
1f14c9a
Need to call register_package_root prior to installing the package. T…
koush Feb 12, 2010
e923487
working recovery image!
koush Feb 12, 2010
3a976a7
power button toggles menu
koush Feb 13, 2010
841b2bf
Add static flash_image for recovery
koush Feb 15, 2010
a3c2f73
fix up back button and menu toggling
koush Feb 19, 2010
bf055bb
intetrate nandroid into recovery
koush Feb 20, 2010
3ab130f
add missing files
koush Feb 20, 2010
8ce0be4
nearly working nandroid, built against libc
koush Feb 20, 2010
c788c26
more fixes
koush Feb 21, 2010
f9476fb
fix build break
koush Feb 21, 2010
7e5a661
move unyaffs into external/yaffs2
koush Feb 21, 2010
1a7ee53
add mkfstab.sh script to create an fstab on any device. clean up dump…
koush Feb 22, 2010
466e67a
generate fstab using mkfstab.sh. implement restore of system data and…
koush Feb 22, 2010
bcdd003
Functional Nandroid
koush Feb 22, 2010
1fa52ec
add mount sdcard option
koush Feb 22, 2010
225c6b4
do error checking of nandroid operations
koush Feb 22, 2010
981b0cd
roll recovery tools into a single binary. fix up nandroid to work wit…
koush Feb 22, 2010
7400dc2
missing file
koush Feb 22, 2010
007439b
never restore recovery
koush Feb 23, 2010
69b7541
do not check the results of a run_program if script asserts are disabled
koush Feb 24, 2010
5740b04
change the nandroid backup directory to something recovery specific, …
koush Feb 24, 2010
a37e9b1
Patch from Magnus to fix issues with bad blocks and dumping a boot im…
koush Feb 24, 2010
ff32e8c
clean up
koush Feb 24, 2010
36d0289
fix build
koush Feb 22, 2010
01098d2
nandroid backup supports a directory now
koush Feb 25, 2010
33370db
better error codes to allow for diagnosing problems in recovery mode.…
koush Feb 25, 2010
79ce82c
successful installation should hide the android installing icon
koush Feb 25, 2010
49f5689
allow choosing of subdirectories when searching for a zip file to ins…
koush Feb 25, 2010
001c5b5
clean up tabs vs spaces
koush Feb 25, 2010
261dde9
make it pretty
koush Feb 26, 2010
185baee
Added ability to wipe_data and update_package at the same time.
ctso Feb 26, 2010
db8dedf
Fixed a bug that would never allow update_package + wipe_data to be c…
ctso Feb 26, 2010
a1749d9
Added ability to wipe_data and update_package at the same time.
ctso Feb 26, 2010
ea2f242
Merge branch 'eclair' of git@github.com:ctso/android_bootable_recover…
ctso Feb 26, 2010
0317378
usb mass storage support. user initiated recovery is now user friendly.
koush Feb 26, 2010
81d8ee5
up the version
koush Feb 26, 2010
e81cb75
not every implementation has the "enable" file
koush Feb 27, 2010
99fb6fe
merge busybox and other tools into recovery.
koush Mar 3, 2010
73098ab
version 1.4.2. minor bug fixes.
koush Mar 7, 2010
2bda3e9
disable script asserts by default for user usage
koush Mar 7, 2010
f68aaaf
run amend scripts from the command line
koush Mar 7, 2010
72a1db6
run an extended command script on boot if it exists
koush Mar 7, 2010
32e4111
reboot upon extendedcommand success
koush Mar 7, 2010
13d8fcc
need to hide the UI to reboot
koush Mar 7, 2010
a948308
add backup_rom and restore_rom to amend scripts
koush Mar 8, 2010
60d7ee0
add sleep and print commands.
koush Mar 8, 2010
19459f3
1.5.0
koush Mar 8, 2010
ea46fe2
install_zip command
koush Mar 8, 2010
8bbbbd4
menus can now be bigger than the screen, scoll support in menus
packetlss Mar 8, 2010
5306db5
fix backup bug
koush Mar 8, 2010
8c866dc
fix backup
koush Mar 8, 2010
85c2a53
1.6.1
koush Mar 8, 2010
3a25cf5
extended command script waits for the sd card device
koush Mar 9, 2010
d42f1a7
added erase_flash, utility to erase mtd partition
packetlss Mar 10, 2010
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 28 additions & 24 deletions Android.mk
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
ifneq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_ARCH),arm)

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

commands_recovery_local_path := $(LOCAL_PATH)

ifneq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_ARCH),arm)
# LOCAL_CPP_EXTENSION := .c

LOCAL_SRC_FILES := \
extendedcommands.c \
legacy.c \
commands.c \
recovery.c \
bootloader.c \
commands.c \
firmware.c \
install.c \
roots.c \
@@ -22,39 +25,40 @@ LOCAL_MODULE := recovery

LOCAL_FORCE_STATIC_EXECUTABLE := true

RECOVERY_API_VERSION := 1.6.3
LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)

# This binary is in the recovery ramdisk, which is otherwise a copy of root.
# It gets copied there in config/Makefile. LOCAL_MODULE_TAGS suppresses
# a (redundant) copy of the binary in /system/bin for user builds.
# TODO: Build the ramdisk image in a more principled way.

LOCAL_MODULE_TAGS := eng

LOCAL_STATIC_LIBRARIES := libminzip libunz libamend libmtdutils libmincrypt
LOCAL_STATIC_LIBRARIES += libminui libpixelflinger_static libcutils
LOCAL_STATIC_LIBRARIES :=
ifeq ($(TARGET_RECOVERY_UI_LIB),)
LOCAL_SRC_FILES += default_recovery_ui.c
else
LOCAL_STATIC_LIBRARIES += $(TARGET_RECOVERY_UI_LIB)
endif
LOCAL_STATIC_LIBRARIES += libbusybox libclearsilverregex libmkyaffs2image libunyaffs libdump_image libflash_image libmtdutils
LOCAL_STATIC_LIBRARIES += libamend
LOCAL_STATIC_LIBRARIES += libminzip libunz libmtdutils libmincrypt
LOCAL_STATIC_LIBRARIES += libminui libpixelflinger_static libpng libcutils
LOCAL_STATIC_LIBRARIES += libstdc++ libc

# Specify a C-includable file containing the OTA public keys.
# This is built in config/Makefile.
# *** THIS IS A TOTAL HACK; EXECUTABLES MUST NOT CHANGE BETWEEN DIFFERENT
# PRODUCTS/BUILD TYPES. ***
# TODO: make recovery read the keys from an external file.
RECOVERY_INSTALL_OTA_KEYS_INC := \
$(call intermediates-dir-for,PACKAGING,ota_keys_inc)/keys.inc
# Let install.c say #include "keys.inc"
LOCAL_C_INCLUDES += $(dir $(RECOVERY_INSTALL_OTA_KEYS_INC))

include $(BUILD_EXECUTABLE)

# Depend on the generated keys.inc containing the OTA public keys.
$(intermediates)/install.o: $(RECOVERY_INSTALL_OTA_KEYS_INC)

include $(commands_recovery_local_path)/minui/Android.mk

endif # TARGET_ARCH == arm
endif # !TARGET_SIMULATOR

include $(commands_recovery_local_path)/amend/Android.mk
include $(commands_recovery_local_path)/nandroid/Android.mk
include $(commands_recovery_local_path)/minui/Android.mk
include $(commands_recovery_local_path)/minzip/Android.mk
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
commands_recovery_local_path :=

endif # TARGET_ARCH == arm
endif # !TARGET_SIMULATOR

16 changes: 16 additions & 0 deletions amend/register.c
Original file line number Diff line number Diff line change
@@ -125,6 +125,19 @@ cmd_copy_dir(const char *name, void *cookie, int argc, const char *argv[],
return -1;
}

/* delete <srcdir> <dstdir>
*/
static int
cmd_delete(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(name);
UNUSED(cookie);
CHECK_WORDS();
//xxx
return -1;
}

/* mark <resource> dirty|clean
*/
static int
@@ -165,6 +178,9 @@ registerUpdateCommands()
ret = registerCommand("copy_dir", CMD_ARGS_WORDS, cmd_copy_dir, NULL);
if (ret < 0) return ret;

ret = registerCommand("delete", CMD_ARGS_WORDS, cmd_delete, NULL);
if (ret < 0) return ret;

ret = registerCommand("format", CMD_ARGS_WORDS, cmd_format, NULL);
if (ret < 0) return ret;

12 changes: 8 additions & 4 deletions bootloader.c
Original file line number Diff line number Diff line change
@@ -198,38 +198,42 @@ int write_update_for_bootloader(
header.version = UPDATE_VERSION;
header.size = header_size;

header.image_offset = mtd_erase_blocks(write, 0);
off_t image_start_pos = mtd_erase_blocks(write, 0);
header.image_length = update_length;
if ((int) header.image_offset == -1 ||
mtd_write_data(write, update, update_length) != update_length) {
LOGE("Can't write update to %s\n(%s)\n", CACHE_NAME, strerror(errno));
mtd_write_close(write);
return -1;
}
off_t busy_start_pos = mtd_erase_blocks(write, 0);
header.image_offset = mtd_find_write_start(write, image_start_pos);

header.bitmap_width = bitmap_width;
header.bitmap_height = bitmap_height;
header.bitmap_bpp = bitmap_bpp;

int bitmap_length = (bitmap_bpp + 7) / 8 * bitmap_width * bitmap_height;

header.busy_bitmap_offset = mtd_erase_blocks(write, 0);
header.busy_bitmap_length = busy_bitmap != NULL ? bitmap_length : 0;
if ((int) header.busy_bitmap_offset == -1 ||
mtd_write_data(write, busy_bitmap, bitmap_length) != bitmap_length) {
LOGE("Can't write bitmap to %s\n(%s)\n", CACHE_NAME, strerror(errno));
mtd_write_close(write);
return -1;
}
off_t fail_start_pos = mtd_erase_blocks(write, 0);
header.busy_bitmap_offset = mtd_find_write_start(write, busy_start_pos);

header.fail_bitmap_offset = mtd_erase_blocks(write, 0);
header.fail_bitmap_length = fail_bitmap != NULL ? bitmap_length : 0;
if ((int) header.fail_bitmap_offset == -1 ||
mtd_write_data(write, fail_bitmap, bitmap_length) != bitmap_length) {
LOGE("Can't write bitmap to %s\n(%s)\n", CACHE_NAME, strerror(errno));
mtd_write_close(write);
return -1;
}
mtd_erase_blocks(write, 0);
header.fail_bitmap_offset = mtd_find_write_start(write, fail_start_pos);

/* Write the header last, after all the blocks it refers to, so that
* when the magic number is installed everything is valid.
@@ -252,7 +256,7 @@ int write_update_for_bootloader(
return -1;
}

if (mtd_erase_blocks(write, 0) != (off_t) header.image_offset) {
if (mtd_erase_blocks(write, 0) != image_start_pos) {
LOGE("Misalignment rewriting %s\n(%s)\n", CACHE_NAME, strerror(errno));
mtd_write_close(write);
return -1;
115 changes: 114 additions & 1 deletion commands.c
Original file line number Diff line number Diff line change
@@ -39,6 +39,8 @@
#include "minzip/Zip.h"
#include "roots.h"

#include "extendedcommands.h"

static int gDidShowProgress = 0;

#define UNUSED(p) ((void)(p))
@@ -107,6 +109,10 @@ cmd_assert(const char *name, void *cookie, int argc, const char *argv[],
CHECK_BOOL();
NO_PERMS(permissions);

if (!script_assert_enabled) {
return 0;
}

/* If our argument is false, return non-zero (failure)
* If our argument is true, return zero (success)
*/
@@ -391,7 +397,7 @@ cmd_run_program(const char *name, void *cookie, int argc, const char *argv[],

int status;
waitpid(pid, &status, 0);
if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
if (WIFEXITED(status) && WEXITSTATUS(status) == 0 || !script_assert_enabled) {
return 0;
} else {
LOGE("Error in %s\n(Status %d)\n", path, status);
@@ -753,6 +759,98 @@ cmd_done(const char *name, void *cookie, int argc, const char *argv[],
}


static int
cmd_backup_rom(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(cookie);
CHECK_WORDS();

char* backup_name = NULL;
switch(argc)
{
case 0:
break;
case 1:
backup_name = argv[0];
break;
default:
LOGE("Command %s requires zero or one argument\n", name);
return 1;
}

return do_nandroid_backup(backup_name);
}

static int
cmd_restore_rom(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(cookie);
CHECK_WORDS();

if (argc != 1) {
LOGE("Command %s requires exactly one argument\n", name);
return 1;
}

return do_nandroid_restore(argv[0]);
}

static int
cmd_sleep(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(cookie);
CHECK_WORDS();

if (argc != 1) {
LOGE("Command %s requires exactly one argument\n", name);
return 1;
}

int seconds = atoi(argv[0]);
sleep(seconds);

return 0;
}

static int
cmd_print(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(cookie);
CHECK_WORDS();

char message[1024];
message[0] = NULL;
int i;
for (i = 0; i < argc; i++)
{
strcat(message, argv[i]);
strcat(message, " ");
}
strcat(message, "\n");

ui_print(message);
return 0;
}

static int
cmd_install_zip(const char *name, void *cookie, int argc, const char *argv[],
PermissionRequestList *permissions)
{
UNUSED(cookie);
CHECK_WORDS();

if (argc != 1) {
LOGE("Command %s requires exactly one argument\n", name);
return 1;
}

return install_zip(argv[0]);
}

/*
* Function definitions
*/
@@ -1116,6 +1214,21 @@ register_update_commands(RecoveryCommandContext *ctx)
ret = registerCommand("done", CMD_ARGS_WORDS, cmd_done, (void *)ctx);
if (ret < 0) return ret;

ret = registerCommand("backup_rom", CMD_ARGS_WORDS, cmd_backup_rom, (void *)ctx);
if (ret < 0) return ret;

ret = registerCommand("restore_rom", CMD_ARGS_WORDS, cmd_restore_rom, (void *)ctx);
if (ret < 0) return ret;

ret = registerCommand("sleep", CMD_ARGS_WORDS, cmd_sleep, (void *)ctx);
if (ret < 0) return ret;

ret = registerCommand("print", CMD_ARGS_WORDS, cmd_print, (void *)ctx);
if (ret < 0) return ret;

ret = registerCommand("install_zip", CMD_ARGS_WORDS, cmd_install_zip, (void *)ctx);
if (ret < 0) return ret;

/*
* Functions
*/
6 changes: 4 additions & 2 deletions common.h
Original file line number Diff line number Diff line change
@@ -47,7 +47,6 @@ void ui_end_menu();
// Set the icon (normally the only thing visible besides the progress bar).
enum {
BACKGROUND_ICON_NONE,
BACKGROUND_ICON_UNPACKING,
BACKGROUND_ICON_INSTALLING,
BACKGROUND_ICON_ERROR,
BACKGROUND_ICON_FIRMWARE_INSTALLING,
@@ -69,7 +68,7 @@ void ui_set_progress(float fraction); // 0.0 - 1.0 within the defined scope

// Default allocation of progress bar segments to operations
static const int VERIFICATION_PROGRESS_TIME = 60;
static const float VERIFICATION_PROGRESS_FRACTION = 0.5;
static const float VERIFICATION_PROGRESS_FRACTION = 0.25;
static const float DEFAULT_FILES_PROGRESS_FRACTION = 0.4;
static const float DEFAULT_IMAGE_PROGRESS_FRACTION = 0.1;

@@ -91,4 +90,7 @@ void ui_reset_progress();
#define LOGD(...) do {} while (0)
#endif

#define STRINGIFY(x) #x
#define EXPAND(x) STRINGIFY(x)

#endif // RECOVERY_COMMON_H
Loading