Loading init/init.c +5 −0 Original line number Original line Diff line number Diff line Loading @@ -233,6 +233,11 @@ void service_start(struct service *svc, const char *dynamic_args) int fd, sz; int fd, sz; umask(077); umask(077); if (properties_inited()) { get_property_workspace(&fd, &sz); sprintf(tmp, "%d,%d", dup(fd), sz); add_environment("ANDROID_PROPERTY_WORKSPACE", tmp); } for (ei = svc->envvars; ei; ei = ei->next) for (ei = svc->envvars; ei; ei = ei->next) add_environment(ei->name, ei->value); add_environment(ei->name, ei->value); Loading init/property_service.c +20 −4 Original line number Original line Diff line number Diff line Loading @@ -112,6 +112,7 @@ struct { typedef struct { typedef struct { void *data; void *data; size_t size; size_t size; int fd; } workspace; } workspace; static int init_workspace(workspace *w, size_t size) static int init_workspace(workspace *w, size_t size) Loading @@ -122,7 +123,7 @@ static int init_workspace(workspace *w, size_t size) /* dev is a tmpfs that we can use to carve a shared workspace /* dev is a tmpfs that we can use to carve a shared workspace * out of, so let's do that... * out of, so let's do that... */ */ fd = open(PROP_FILENAME, O_RDWR | O_CREAT | O_NOFOLLOW, 0644); fd = open("/dev/__properties__", O_RDWR | O_CREAT | O_NOFOLLOW, 0600); if (fd < 0) if (fd < 0) return -1; return -1; Loading @@ -135,8 +136,15 @@ static int init_workspace(workspace *w, size_t size) close(fd); close(fd); fd = open("/dev/__properties__", O_RDONLY | O_NOFOLLOW); if (fd < 0) return -1; unlink("/dev/__properties__"); w->data = data; w->data = data; w->size = size; w->size = size; w->fd = fd; return 0; return 0; out: out: Loading Loading @@ -166,6 +174,8 @@ static int init_property_area(void) if(init_workspace(&pa_workspace, PA_SIZE)) if(init_workspace(&pa_workspace, PA_SIZE)) return -1; return -1; fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC); pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START); pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START); pa = pa_workspace.data; pa = pa_workspace.data; Loading Loading @@ -453,6 +463,12 @@ void handle_property_set_fd() } } } } void get_property_workspace(int *fd, int *sz) { *fd = pa_workspace.fd; *sz = pa_workspace.size; } static void load_properties(char *data) static void load_properties(char *data) { { char *key, *value, *eol, *sol, *tmp; char *key, *value, *eol, *sol, *tmp; Loading init/property_service.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ extern void property_init(void); extern void property_load_boot_defaults(void); extern void property_load_boot_defaults(void); extern void load_persist_props(void); extern void load_persist_props(void); extern void start_property_service(void); extern void start_property_service(void); void get_property_workspace(int *fd, int *sz); extern const char* property_get(const char *name); extern const char* property_get(const char *name); extern int property_set(const char *name, const char *value); extern int property_set(const char *name, const char *value); extern int properties_inited(); extern int properties_inited(); Loading Loading
init/init.c +5 −0 Original line number Original line Diff line number Diff line Loading @@ -233,6 +233,11 @@ void service_start(struct service *svc, const char *dynamic_args) int fd, sz; int fd, sz; umask(077); umask(077); if (properties_inited()) { get_property_workspace(&fd, &sz); sprintf(tmp, "%d,%d", dup(fd), sz); add_environment("ANDROID_PROPERTY_WORKSPACE", tmp); } for (ei = svc->envvars; ei; ei = ei->next) for (ei = svc->envvars; ei; ei = ei->next) add_environment(ei->name, ei->value); add_environment(ei->name, ei->value); Loading
init/property_service.c +20 −4 Original line number Original line Diff line number Diff line Loading @@ -112,6 +112,7 @@ struct { typedef struct { typedef struct { void *data; void *data; size_t size; size_t size; int fd; } workspace; } workspace; static int init_workspace(workspace *w, size_t size) static int init_workspace(workspace *w, size_t size) Loading @@ -122,7 +123,7 @@ static int init_workspace(workspace *w, size_t size) /* dev is a tmpfs that we can use to carve a shared workspace /* dev is a tmpfs that we can use to carve a shared workspace * out of, so let's do that... * out of, so let's do that... */ */ fd = open(PROP_FILENAME, O_RDWR | O_CREAT | O_NOFOLLOW, 0644); fd = open("/dev/__properties__", O_RDWR | O_CREAT | O_NOFOLLOW, 0600); if (fd < 0) if (fd < 0) return -1; return -1; Loading @@ -135,8 +136,15 @@ static int init_workspace(workspace *w, size_t size) close(fd); close(fd); fd = open("/dev/__properties__", O_RDONLY | O_NOFOLLOW); if (fd < 0) return -1; unlink("/dev/__properties__"); w->data = data; w->data = data; w->size = size; w->size = size; w->fd = fd; return 0; return 0; out: out: Loading Loading @@ -166,6 +174,8 @@ static int init_property_area(void) if(init_workspace(&pa_workspace, PA_SIZE)) if(init_workspace(&pa_workspace, PA_SIZE)) return -1; return -1; fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC); pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START); pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START); pa = pa_workspace.data; pa = pa_workspace.data; Loading Loading @@ -453,6 +463,12 @@ void handle_property_set_fd() } } } } void get_property_workspace(int *fd, int *sz) { *fd = pa_workspace.fd; *sz = pa_workspace.size; } static void load_properties(char *data) static void load_properties(char *data) { { char *key, *value, *eol, *sol, *tmp; char *key, *value, *eol, *sol, *tmp; Loading
init/property_service.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ extern void property_init(void); extern void property_load_boot_defaults(void); extern void property_load_boot_defaults(void); extern void load_persist_props(void); extern void load_persist_props(void); extern void start_property_service(void); extern void start_property_service(void); void get_property_workspace(int *fd, int *sz); extern const char* property_get(const char *name); extern const char* property_get(const char *name); extern int property_set(const char *name, const char *value); extern int property_set(const char *name, const char *value); extern int properties_inited(); extern int properties_inited(); Loading