void install_update_package(char* filename) { char* extension = (filename+strlen(filename)-3); char* boot_extension = (filename+strlen(filename)-8); char* rec_extension = (filename+strlen(filename)-7); if (strcmp(extension, "zip") == 0 ) { ui_print("\nZIP detected.\n"); remove("/block_update"); install_update_zip(filename); return; } if (strcmp(extension, "tar") == 0 || strcmp(extension, "tgz") == 0 ) { ui_print("\nTAR detected.\n"); install_rom_from_tar(filename); return; } if (strcmp(rec_extension, "rec.img") == 0 ) { ui_print("\nRECOVERY IMAGE detected.\n"); install_img(filename, "recovery"); return; } if (strcmp(boot_extension, "boot.img") == 0 ) { ui_print("\nBOOT IMAGE detected.\n"); install_img(filename, "boot"); return; } }
void show_choose_tar_menu() { static char* headers[] = { "Choose a ROM or press POWER to return", "", NULL }; char path[PATH_MAX] = ""; DIR *dir; struct dirent *de; int total = 0; int i; char** files; char** list; if (ensure_root_path_mounted("SDCARD:") != 0) { LOGE ("Can't mount /sdcard\n"); return; } dir = opendir("/sdcard"); if (dir == NULL) { LOGE("Couldn't open /sdcard"); return; } while ((de=readdir(dir)) != NULL) { if (de->d_name[0] != '.' && strlen(de->d_name) > 4 && (strcmp(de->d_name+strlen(de->d_name)-8,".rom.tar")==0 || strcmp(de->d_name+strlen(de->d_name)-11,".rom.tar.gz")==0) || strcmp(de->d_name+strlen(de->d_name)-8,".rom.tgz")==0) { total++; } } if (total==0) { LOGE("No tar archives found\n"); if(closedir(dir) < 0) { LOGE("Failed to close directory /sdcard"); return; } } else { files = (char**) malloc((total+1)*sizeof(char*)); files[total]=NULL; list = (char**) malloc((total+1)*sizeof(char*)); list[total]=NULL; rewinddir(dir); i = 0; while ((de = readdir(dir)) != NULL) { if (de->d_name[0] != '.' && strlen(de->d_name) > 4 && (strcmp(de->d_name+strlen(de->d_name)-8,".rom.tar")==0 || strcmp(de->d_name+strlen(de->d_name)-11,".rom.tar.gz")==0) || strcmp(de->d_name+strlen(de->d_name)-8,".rom.tgz")==0) { files[i] = (char*) malloc(strlen("/sdcard/")+strlen(de->d_name)+1); strcpy(files[i], "/sdcard/"); strcat(files[i], de->d_name); list[i] = (char*) malloc(strlen(de->d_name)+1); strcpy(list[i], de->d_name); i++; } } if (closedir(dir) <0) { LOGE("Failure closing directory /sdcard\n"); return; } int chosen_item = -1; while (chosen_item < 0) { chosen_item = get_menu_selection(headers, list, 1, chosen_item<0?0:chosen_item); if (chosen_item >= 0 && chosen_item != ITEM_BACK) { install_rom_from_tar(files[chosen_item]); } } } }