Merge "PackageManager: Fix reference profile canonicalization." into nyc-dev

This commit is contained in:
Narayan Kamath
2016-05-18 15:04:18 +00:00
committed by Android (Google) Code Review
3 changed files with 21 additions and 3 deletions

View File

@@ -328,10 +328,11 @@ class PackageDexOptimizer {
for (String apkPath : pkg.getAllCodePathsExcludingResourceOnly()) {
try {
apkPath = new File(apkPath).getCanonicalPath();
apkPath = PackageManagerServiceUtils.realpath(new File(apkPath));
} catch (IOException e) {
// Log an error but continue without it.
Slog.w(TAG, "Failed to get canonical path", e);
continue;
}
String useMarker = apkPath.replace('/', '@');
final int[] currentUserIds = UserManagerService.getInstance().getUserIds();

View File

@@ -7603,10 +7603,11 @@ public class PackageManagerService extends IPackageManager.Stub {
for (String path : pkg.getAllCodePathsExcludingResourceOnly()) {
try {
path = new File(path).getCanonicalPath();
path = PackageManagerServiceUtils.realpath(new File(path));
} catch (IOException e) {
// TODO: Should we return early here ?
Slog.w(TAG, "Failed to get canonical path", e);
continue;
}
final String useMarker = path.replace('/', '@');

View File

@@ -25,9 +25,13 @@ import android.content.pm.PackageParser;
import android.content.pm.ResolveInfo;
import android.os.RemoteException;
import android.os.UserHandle;
import android.system.ErrnoException;
import android.util.ArraySet;
import android.util.Log;
import libcore.io.Libcore;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -163,4 +167,16 @@ public class PackageManagerServiceUtils {
return result;
}
}
/**
* Returns the canonicalized path of {@code path} as per {@code realpath(3)}
* semantics.
*/
public static String realpath(File path) throws IOException {
try {
return Libcore.os.realpath(path.getAbsolutePath());
} catch (ErrnoException ee) {
throw ee.rethrowAsIOException();
}
}
}