#include <limits.h>
#include <stdlib.h>
-#include "private/android_filesystem_config.h"
-
#include "canned_fs_config.h"
typedef struct {
canned_data = (Path*) realloc(canned_data, canned_alloc * sizeof(Path));
}
Path* p = canned_data + canned_used;
- p->path = strdup(strtok(line, " "));
- p->uid = atoi(strtok(NULL, " "));
- p->gid = atoi(strtok(NULL, " "));
- p->mode = strtol(strtok(NULL, " "), NULL, 8); // mode is in octal
+ p->path = strdup(strtok(line, " \t"));
+
+ if (!p->path || !*p->path || *p->path == '#')
+ continue;
+
+ p->uid = atoi(strtok(NULL, " \t"));
+ p->gid = atoi(strtok(NULL, " \t"));
+ p->mode = strtol(strtok(NULL, " \t"), NULL, 8); // mode is in octal
p->capabilities = 0;
char* token = NULL;
do {
- token = strtok(NULL, " ");
+ token = strtok(NULL, " \t");
if (token && strncmp(token, "capabilities=", 13) == 0) {
p->capabilities = strtoll(token+13, NULL, 0);
break;
return 0;
}
-void canned_fs_config(const char* path, int dir,
+int canned_fs_config(const char* path, int dir,
unsigned* uid, unsigned* gid, unsigned* mode, uint64_t* capabilities) {
Path key;
- key.path = path+1; // canned paths lack the leading '/'
+ key.path = path;
Path* p = (Path*) bsearch(&key, canned_data, canned_used, sizeof(Path), path_compare);
if (p == NULL) {
- fprintf(stderr, "failed to find [%s] in canned fs_config\n", path);
- exit(1);
+ return 0;
}
*uid = p->uid;
*gid = p->gid;
if (c_mode != *mode) printf("%s mode 0%o 0%o\n", path, *mode, c_mode);
if (c_capabilities != *capabilities) printf("%s capabilities %llx %llx\n", path, *capabilities, c_capabilities);
#endif
+
+ return 1;
}