* commit 'e1b87e1a0ee5d9b774fde68df8593b2fdeca4bb2': libcutils: add fs_config_generate
This commit is contained in:
commit
c130d96e9c
2 changed files with 23 additions and 0 deletions
|
|
@ -215,6 +215,8 @@ __BEGIN_DECLS
|
||||||
void fs_config(const char *path, int dir,
|
void fs_config(const char *path, int dir,
|
||||||
unsigned *uid, unsigned *gid, unsigned *mode, uint64_t *capabilities);
|
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
|
__END_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@ static inline uint64_t get8LE(const uint8_t* src)
|
||||||
return ((uint64_t) high << 32) | (uint64_t) low;
|
return ((uint64_t) high << 32) | (uint64_t) low;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ALIGN(x, alignment) ( ((x) + ((alignment) - 1)) & ~((alignment) - 1) )
|
||||||
|
|
||||||
/* Rules for directories.
|
/* Rules for directories.
|
||||||
** These rules are applied based on "first match", so they
|
** These rules are applied based on "first match", so they
|
||||||
** should start with the most specific path and work their
|
** should start with the most specific path and work their
|
||||||
|
|
@ -261,3 +263,22 @@ void fs_config(const char *path, int dir,
|
||||||
*mode = (*mode & (~07777)) | pc->mode;
|
*mode = (*mode & (~07777)) | pc->mode;
|
||||||
*capabilities = pc->capabilities;
|
*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…
Add table
Reference in a new issue