diff options
Diffstat (limited to 'install.cpp')
-rw-r--r-- | install.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/install.cpp b/install.cpp index 8f2f252..1bdf46b 100644 --- a/install.cpp +++ b/install.cpp @@ -255,6 +255,27 @@ really_install_package(const char *path, bool* wipe_cache, bool needs_mount) // Give verification half the progress bar... ui->SetProgressType(RecoveryUI::DETERMINATE); ui->ShowProgress(VERIFICATION_PROGRESS_FRACTION, VERIFICATION_PROGRESS_TIME); + + // Resolve symlink in case legacy /sdcard path is used + // Requires: symlink uses absolute path + char new_path[PATH_MAX]; + if (strlen(path) > 1) { + char *rest = strchr(path + 1, '/'); + if (rest != NULL) { + int readlink_length; + int root_length = rest - path; + char *root = (char *)malloc(root_length + 1); + strncpy(root, path, root_length); + root[root_length] = 0; + readlink_length = readlink(root, new_path, PATH_MAX); + if (readlink_length > 0) { + strncpy(new_path + readlink_length, rest, PATH_MAX - readlink_length); + path = new_path; + } + free(root); + } + } + LOGI("Update location: %s\n", path); // Map the update package into memory. |