Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54289b8b authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Fix cache deletion for secondary users

Bug: 7249419

Change-Id: Idbc0f9994508059ebf5055aea961b87e08b3673a
parent c56e5600
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -271,11 +271,11 @@ int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy)
    return 0;
}

int delete_cache(const char *pkgname)
int delete_cache(const char *pkgname, uid_t persona)
{
    char cachedir[PKG_PATH_MAX];

    if (create_pkg_path(cachedir, pkgname, CACHE_DIR_POSTFIX, 0))
    if (create_pkg_path(cachedir, pkgname, CACHE_DIR_POSTFIX, persona))
        return -1;

        /* delete contents, not the directory, no exceptions */
+2 −2
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static int do_free_cache(char **arg, char reply[REPLY_MAX]) /* TODO int:free_siz

static int do_rm_cache(char **arg, char reply[REPLY_MAX])
{
    return delete_cache(arg[0]); /* pkgname */
    return delete_cache(arg[0], atoi(arg[1])); /* pkgname, userid */
}

static int do_get_size(char **arg, char reply[REPLY_MAX])
@@ -142,7 +142,7 @@ struct cmdinfo cmds[] = {
    { "rename",               2, do_rename },
    { "fixuid",               3, do_fixuid },
    { "freecache",            1, do_free_cache },
    { "rmcache",              1, do_rm_cache },
    { "rmcache",              2, do_rm_cache },
    { "getsize",              5, do_get_size },
    { "rmuserdata",           2, do_rm_user_data },
    { "movefiles",            0, do_movefiles },
+1 −1
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ int delete_user_data(const char *pkgname, uid_t persona);
int make_user_data(const char *pkgname, uid_t uid, uid_t persona);
int delete_persona(uid_t persona);
int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy);
int delete_cache(const char *pkgname);
int delete_cache(const char *pkgname, uid_t persona);
int move_dex(const char *src, const char *dst);
int rm_dex(const char *path);
int protect(char *pkgname, gid_t gid);
+3 −1
Original line number Diff line number Diff line
@@ -254,10 +254,12 @@ public final class Installer {
        return execute(builder.toString());
    }

    public int deleteCacheFiles(String name) {
    public int deleteCacheFiles(String name, int userId) {
        StringBuilder builder = new StringBuilder("rmcache");
        builder.append(' ');
        builder.append(name);
        builder.append(' ');
        builder.append(userId);
        return execute(builder.toString());
    }

+2 −3
Original line number Diff line number Diff line
@@ -8540,11 +8540,10 @@ public class PackageManagerService extends IPackageManager.Stub {
            Slog.w(TAG, "Package " + packageName + " has no applicationInfo.");
            return false;
        }
        // TODO: Pass userId to deleteCacheFiles
        int retCode = mInstaller.deleteCacheFiles(packageName);
        int retCode = mInstaller.deleteCacheFiles(packageName, userId);
        if (retCode < 0) {
            Slog.w(TAG, "Couldn't remove cache files for package: "
                       + packageName);
                       + packageName + " u" + userId);
            return false;
        }
        return true;