summaryrefslogtreecommitdiffstats
path: root/sdcard
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-05-30 15:38:31 -0700
committerJeff Sharkey <jsharkey@android.com>2014-05-30 16:28:49 -0700
commit2e7d80d10acf95076dfb1f2727455432091de65f (patch)
tree70e382898ab60fb101bb82934662d1e3e1640e27 /sdcard
parentd502cb34834633d5d6de21620088d9ededa838f3 (diff)
downloadsystem_core-2e7d80d10acf95076dfb1f2727455432091de65f.zip
system_core-2e7d80d10acf95076dfb1f2727455432091de65f.tar.gz
system_core-2e7d80d10acf95076dfb1f2727455432091de65f.tar.bz2
Per-app media directories on external storage.
This change defines per-app directories on external storage that will be scanned and included in MediaStore. This gives apps a way to write content to secondary shared storage in a way that can easily be surfaced to other apps. Bug: 14382377 Change-Id: I6f03d8076a9391d8b9eb8421ec3fc93669b3ba0d
Diffstat (limited to 'sdcard')
-rw-r--r--sdcard/sdcard.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sdcard/sdcard.c b/sdcard/sdcard.c
index 7baad63..3a164ed 100644
--- a/sdcard/sdcard.c
+++ b/sdcard/sdcard.c
@@ -139,6 +139,8 @@ typedef enum {
PERM_ANDROID_DATA,
/* This node is "/Android/obb" */
PERM_ANDROID_OBB,
+ /* This node is "/Android/media" */
+ PERM_ANDROID_MEDIA,
/* This node is "/Android/user" */
PERM_ANDROID_USER,
} perm_t;
@@ -475,6 +477,10 @@ static void derive_permissions_locked(struct fuse* fuse, struct node *parent,
/* Single OBB directory is always shared */
node->graft_path = fuse->obbpath;
node->graft_pathlen = strlen(fuse->obbpath);
+ } else if (!strcasecmp(node->name, "media")) {
+ /* App-specific directories inside; let anyone traverse */
+ node->perm = PERM_ANDROID_MEDIA;
+ node->mode = 0771;
} else if (!strcasecmp(node->name, "user")) {
/* User directories must only be accessible to system, protected
* by sdcard_all. Zygote will bind mount the appropriate user-
@@ -486,6 +492,7 @@ static void derive_permissions_locked(struct fuse* fuse, struct node *parent,
break;
case PERM_ANDROID_DATA:
case PERM_ANDROID_OBB:
+ case PERM_ANDROID_MEDIA:
appid = (appid_t) (uintptr_t) hashmapGet(fuse->package_to_appid, node->name);
if (appid != 0) {
node->uid = multiuser_get_uid(parent->userid, appid);