Loading include/private/android_filesystem_config.h +2 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,8 @@ __BEGIN_DECLS void fs_config(const char *path, int dir, unsigned *uid, unsigned *gid, unsigned *mode, uint64_t *capabilities); ssize_t fs_config_generate(char *buffer, size_t length, const struct fs_path_config *pc); __END_DECLS #endif Loading libcutils/fs_config.c +21 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ static inline uint64_t get8LE(const uint8_t* src) return ((uint64_t) high << 32) | (uint64_t) low; } #define ALIGN(x, alignment) ( ((x) + ((alignment) - 1)) & ~((alignment) - 1) ) /* Rules for directories. ** These rules are applied based on "first match", so they ** should start with the most specific path and work their Loading Loading @@ -261,3 +263,22 @@ void fs_config(const char *path, int dir, *mode = (*mode & (~07777)) | pc->mode; *capabilities = pc->capabilities; } ssize_t fs_config_generate(char *buffer, size_t length, const struct fs_path_config *pc) { struct fs_path_config_from_file *p = (struct fs_path_config_from_file *)buffer; size_t len = ALIGN(sizeof(*p) + strlen(pc->prefix) + 1, sizeof(uint64_t)); if ((length < len) || (len > UINT16_MAX)) { return -ENOSPC; } memset(p, 0, len); uint16_t host_len = len; p->len = get2LE((const uint8_t *)&host_len); p->mode = get2LE((const uint8_t *)&(pc->mode)); p->uid = get2LE((const uint8_t *)&(pc->uid)); p->gid = get2LE((const uint8_t *)&(pc->gid)); p->capabilities = get8LE((const uint8_t *)&(pc->capabilities)); strcpy(p->prefix, pc->prefix); return len; } Loading
include/private/android_filesystem_config.h +2 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,8 @@ __BEGIN_DECLS void fs_config(const char *path, int dir, unsigned *uid, unsigned *gid, unsigned *mode, uint64_t *capabilities); ssize_t fs_config_generate(char *buffer, size_t length, const struct fs_path_config *pc); __END_DECLS #endif Loading
libcutils/fs_config.c +21 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ static inline uint64_t get8LE(const uint8_t* src) return ((uint64_t) high << 32) | (uint64_t) low; } #define ALIGN(x, alignment) ( ((x) + ((alignment) - 1)) & ~((alignment) - 1) ) /* Rules for directories. ** These rules are applied based on "first match", so they ** should start with the most specific path and work their Loading Loading @@ -261,3 +263,22 @@ void fs_config(const char *path, int dir, *mode = (*mode & (~07777)) | pc->mode; *capabilities = pc->capabilities; } ssize_t fs_config_generate(char *buffer, size_t length, const struct fs_path_config *pc) { struct fs_path_config_from_file *p = (struct fs_path_config_from_file *)buffer; size_t len = ALIGN(sizeof(*p) + strlen(pc->prefix) + 1, sizeof(uint64_t)); if ((length < len) || (len > UINT16_MAX)) { return -ENOSPC; } memset(p, 0, len); uint16_t host_len = len; p->len = get2LE((const uint8_t *)&host_len); p->mode = get2LE((const uint8_t *)&(pc->mode)); p->uid = get2LE((const uint8_t *)&(pc->uid)); p->gid = get2LE((const uint8_t *)&(pc->gid)); p->capabilities = get8LE((const uint8_t *)&(pc->capabilities)); strcpy(p->prefix, pc->prefix); return len; }