Loading recovery.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,7 @@ main(int argc, char **argv) { } if (status != INSTALL_SUCCESS) { ui->Print("Installation aborted.\n"); ui->Print("OTA failed! Please power off the device to keep it in this state and file a bug report!\n"); // If this is an eng or userdebug build, then automatically // turn the text display on if the script fails so the error Loading updater/blockimg.c +28 −14 Original line number Diff line number Diff line Loading @@ -687,19 +687,26 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] rss.p_remain = (tgt->pos[1] - tgt->pos[0]) * BLOCKSIZE; check_lseek(fd, (off64_t)tgt->pos[0] * BLOCKSIZE, SEEK_SET); int ret; if (style[0] == 'i') { // imgdiff ApplyImagePatch(buffer, src_blocks * BLOCKSIZE, ret = ApplyImagePatch(buffer, src_blocks * BLOCKSIZE, &patch_value, &RangeSinkWrite, &rss, NULL, NULL); } else { ApplyBSDiffPatch(buffer, src_blocks * BLOCKSIZE, ret = ApplyBSDiffPatch(buffer, src_blocks * BLOCKSIZE, &patch_value, 0, &RangeSinkWrite, &rss, NULL); } if (ret != 0) { ErrorAbort(state, "patch failed\n"); goto done; } // We expect the output of the patcher to fill the tgt ranges exactly. if (rss.p_block != tgt->count || rss.p_remain != 0) { fprintf(stderr, "range sink underrun?\n"); ErrorAbort(state, "range sink underrun?\n"); goto done; } blocks_so_far += tgt->size; Loading @@ -723,7 +730,8 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] range[1] = (tgt->pos[i*2+1] - tgt->pos[i*2]) * (uint64_t)BLOCKSIZE; if (ioctl(fd, BLKDISCARD, &range) < 0) { printf(" blkdiscard failed: %s\n", strerror(errno)); ErrorAbort(state, " blkdiscard failed: %s\n", strerror(errno)); goto done; } } Loading @@ -732,8 +740,8 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] printf(" ignoring erase (not block device)\n"); } } else { fprintf(stderr, "unknown transfer style \"%s\"\n", style); exit(1); ErrorAbort(state, "unknown transfer style \"%s\"\n", style); goto done; } } Loading @@ -750,7 +758,13 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] FreeValue(transfer_list_value); FreeValue(new_data_fn); FreeValue(patch_data_fn); return StringValue(success ? strdup("t") : strdup("")); if (success) { return StringValue(strdup("t")); } else { // NULL will be passed to its caller at Evaluate() and abort the OTA // process. return NULL; } } Value* RangeSha1Fn(const char* name, State* state, int argc, Expr* argv[]) { Loading Loading @@ -797,7 +811,7 @@ Value* RangeSha1Fn(const char* name, State* state, int argc, Expr* argv[]) { FreeValue(blockdev_filename); FreeValue(ranges); if (digest == NULL) { return StringValue(strdup("")); return NULL; } else { return StringValue(PrintSha1(digest)); } Loading Loading
recovery.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,7 @@ main(int argc, char **argv) { } if (status != INSTALL_SUCCESS) { ui->Print("Installation aborted.\n"); ui->Print("OTA failed! Please power off the device to keep it in this state and file a bug report!\n"); // If this is an eng or userdebug build, then automatically // turn the text display on if the script fails so the error Loading
updater/blockimg.c +28 −14 Original line number Diff line number Diff line Loading @@ -687,19 +687,26 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] rss.p_remain = (tgt->pos[1] - tgt->pos[0]) * BLOCKSIZE; check_lseek(fd, (off64_t)tgt->pos[0] * BLOCKSIZE, SEEK_SET); int ret; if (style[0] == 'i') { // imgdiff ApplyImagePatch(buffer, src_blocks * BLOCKSIZE, ret = ApplyImagePatch(buffer, src_blocks * BLOCKSIZE, &patch_value, &RangeSinkWrite, &rss, NULL, NULL); } else { ApplyBSDiffPatch(buffer, src_blocks * BLOCKSIZE, ret = ApplyBSDiffPatch(buffer, src_blocks * BLOCKSIZE, &patch_value, 0, &RangeSinkWrite, &rss, NULL); } if (ret != 0) { ErrorAbort(state, "patch failed\n"); goto done; } // We expect the output of the patcher to fill the tgt ranges exactly. if (rss.p_block != tgt->count || rss.p_remain != 0) { fprintf(stderr, "range sink underrun?\n"); ErrorAbort(state, "range sink underrun?\n"); goto done; } blocks_so_far += tgt->size; Loading @@ -723,7 +730,8 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] range[1] = (tgt->pos[i*2+1] - tgt->pos[i*2]) * (uint64_t)BLOCKSIZE; if (ioctl(fd, BLKDISCARD, &range) < 0) { printf(" blkdiscard failed: %s\n", strerror(errno)); ErrorAbort(state, " blkdiscard failed: %s\n", strerror(errno)); goto done; } } Loading @@ -732,8 +740,8 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] printf(" ignoring erase (not block device)\n"); } } else { fprintf(stderr, "unknown transfer style \"%s\"\n", style); exit(1); ErrorAbort(state, "unknown transfer style \"%s\"\n", style); goto done; } } Loading @@ -750,7 +758,13 @@ Value* BlockImageUpdateFn(const char* name, State* state, int argc, Expr* argv[] FreeValue(transfer_list_value); FreeValue(new_data_fn); FreeValue(patch_data_fn); return StringValue(success ? strdup("t") : strdup("")); if (success) { return StringValue(strdup("t")); } else { // NULL will be passed to its caller at Evaluate() and abort the OTA // process. return NULL; } } Value* RangeSha1Fn(const char* name, State* state, int argc, Expr* argv[]) { Loading Loading @@ -797,7 +811,7 @@ Value* RangeSha1Fn(const char* name, State* state, int argc, Expr* argv[]) { FreeValue(blockdev_filename); FreeValue(ranges); if (digest == NULL) { return StringValue(strdup("")); return NULL; } else { return StringValue(PrintSha1(digest)); } Loading