diff options
author | Elliott Hughes <enh@google.com> | 2015-02-03 17:12:07 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2015-02-04 08:59:10 -0800 |
commit | f3cf438714aa1284d8a58e2f3b108ba93f6d3abb (patch) | |
tree | 3a1b726c6805315c280d745e8b742ec9542d58e9 | |
parent | 5204b1580e0d0f38272c7da166eee9b88c14dc50 (diff) | |
download | system_core-f3cf438714aa1284d8a58e2f3b108ba93f6d3abb.zip system_core-f3cf438714aa1284d8a58e2f3b108ba93f6d3abb.tar.gz system_core-f3cf438714aa1284d8a58e2f3b108ba93f6d3abb.tar.bz2 |
Build init as C++.
This is just the minimal change to keep it building.
Change-Id: I245c5b8413a1db114576c81462eb5737f5ffcef2
-rw-r--r-- | init/Android.mk | 37 | ||||
-rw-r--r-- | init/bootchart.cpp (renamed from init/bootchart.c) | 1 | ||||
-rw-r--r-- | init/builtins.cpp (renamed from init/builtins.c) | 7 | ||||
-rw-r--r-- | init/devices.cpp (renamed from init/devices.c) | 10 | ||||
-rw-r--r-- | init/devices.h | 1 | ||||
-rw-r--r-- | init/init.cpp (renamed from init/init.c) | 5 | ||||
-rw-r--r-- | init/init.h | 3 | ||||
-rw-r--r-- | init/init_parser.cpp (renamed from init/init_parser.c) | 49 | ||||
-rw-r--r-- | init/init_parser.h | 2 | ||||
-rw-r--r-- | init/keychords.cpp (renamed from init/keychords.c) | 2 | ||||
-rw-r--r-- | init/keywords.h | 2 | ||||
-rw-r--r-- | init/parser.cpp (renamed from init/parser.c) | 0 | ||||
-rw-r--r-- | init/property_service.cpp (renamed from init/property_service.c) | 4 | ||||
-rw-r--r-- | init/signal_handler.cpp (renamed from init/signal_handler.c) | 0 | ||||
-rw-r--r-- | init/ueventd.cpp (renamed from init/ueventd.c) | 0 | ||||
-rw-r--r-- | init/ueventd.h | 12 | ||||
-rw-r--r-- | init/ueventd_parser.cpp (renamed from init/ueventd_parser.c) | 8 | ||||
-rw-r--r-- | init/util.cpp (renamed from init/util.c) | 102 | ||||
-rw-r--r-- | init/util.h | 2 | ||||
-rw-r--r-- | init/watchdogd.cpp (renamed from init/watchdogd.c) | 0 |
20 files changed, 101 insertions, 146 deletions
diff --git a/init/Android.mk b/init/Android.mk index 606c199..01ce4da 100644 --- a/init/Android.mk +++ b/init/Android.mk @@ -4,36 +4,35 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - builtins.c \ - init.c \ - devices.c \ - property_service.c \ - util.c \ - parser.c \ - keychords.c \ - signal_handler.c \ - init_parser.c \ - ueventd.c \ - ueventd_parser.c \ - watchdogd.c - -LOCAL_CFLAGS += \ - -std=gnu11 \ + builtins.cpp \ + devices.cpp \ + init.cpp \ + init_parser.cpp \ + keychords.cpp \ + parser.cpp \ + property_service.cpp \ + signal_handler.cpp \ + ueventd.cpp \ + ueventd_parser.cpp \ + util.cpp \ + watchdogd.cpp \ + +LOCAL_CPPFLAGS += \ -Wall \ -Werror -Wno-error=deprecated-declarations \ -Wno-unused-parameter \ ifeq ($(strip $(INIT_BOOTCHART)),true) -LOCAL_SRC_FILES += bootchart.c -LOCAL_CFLAGS += -DBOOTCHART=1 +LOCAL_SRC_FILES += bootchart.cpp +LOCAL_CPPFLAGS += -DBOOTCHART=1 endif ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) -LOCAL_CFLAGS += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_DISABLE_SELINUX=1 +LOCAL_CPPFLAGS += -DALLOW_LOCAL_PROP_OVERRIDE=1 -DALLOW_DISABLE_SELINUX=1 endif # Enable ueventd logging -#LOCAL_CFLAGS += -DLOG_UEVENTS=1 +#LOCAL_CPPFLAGS += -DLOG_UEVENTS=1 LOCAL_MODULE:= init diff --git a/init/bootchart.c b/init/bootchart.cpp index 27c7f65..44a2437 100644 --- a/init/bootchart.c +++ b/init/bootchart.cpp @@ -31,6 +31,7 @@ #include <fcntl.h> #include <errno.h> #include <stdlib.h> +#include <string.h> #include <sys/stat.h> #include "bootchart.h" diff --git a/init/builtins.c b/init/builtins.cpp index 2521daf..6c4d9c4 100644 --- a/init/builtins.c +++ b/init/builtins.cpp @@ -53,7 +53,8 @@ int add_environment(const char *name, const char *value); -extern int init_module(void *, unsigned long, const char *); +// System call provided by bionic but not in any header file. +extern "C" int init_module(void *, unsigned long, const char *); static int write_file(const char *path, const char *value) { @@ -674,7 +675,7 @@ int do_powerctl(int nargs, char **args) int res; int len = 0; int cmd = 0; - char *reboot_target; + const char *reboot_target; res = expand_props(command, args[1], sizeof(command)); if (res) { @@ -776,7 +777,7 @@ int do_copy(int nargs, char **args) if ((fd2 = open(args[2], O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0660)) < 0) goto out_err; - if (!(buffer = malloc(info.st_size))) + if (!(buffer = (char*) malloc(info.st_size))) goto out_err; p = buffer; diff --git a/init/devices.c b/init/devices.cpp index 0de92f5..28f2ec0 100644 --- a/init/devices.c +++ b/init/devices.cpp @@ -101,7 +101,7 @@ int add_dev_perms(const char *name, const char *attr, mode_t perm, unsigned int uid, unsigned int gid, unsigned short prefix, unsigned short wildcard) { - struct perm_node *node = calloc(1, sizeof(*node)); + struct perm_node *node = (perm_node*) calloc(1, sizeof(*node)); if (!node) return -ENOMEM; @@ -289,7 +289,7 @@ static void add_platform_device(const char *path) INFO("adding platform device %s (%s)\n", name, path); - bus = calloc(1, sizeof(struct platform_node)); + bus = (platform_node*) calloc(1, sizeof(struct platform_node)); bus->path = strdup(path); bus->path_len = path_len; bus->name = bus->path + (name - path); @@ -450,7 +450,7 @@ static char **get_character_device_symlinks(struct uevent *uevent) if (!pdev) return NULL; - links = malloc(sizeof(char *) * 2); + links = (char**) malloc(sizeof(char *) * 2); if (!links) return NULL; memset(links, 0, sizeof(char *) * 2); @@ -512,7 +512,7 @@ static char **get_block_device_symlinks(struct uevent *uevent) return NULL; } - char **links = malloc(sizeof(char *) * 4); + char **links = (char**) malloc(sizeof(char *) * 4); if (!links) return NULL; memset(links, 0, sizeof(char *) * 4); @@ -668,7 +668,7 @@ static inline void __attribute__((__deprecated__)) kernel_logger() static void handle_generic_device_event(struct uevent *uevent) { - char *base; + const char *base; const char *name; char devpath[DEVPATH_LEN] = {0}; char **links = NULL; diff --git a/init/devices.h b/init/devices.h index 5d0fe88..6cb0a77 100644 --- a/init/devices.h +++ b/init/devices.h @@ -26,4 +26,5 @@ extern int add_dev_perms(const char *name, const char *attr, unsigned int gid, unsigned short prefix, unsigned short wildcard); int get_device_fd(); + #endif /* _INIT_DEVICES_H */ diff --git a/init/init.c b/init/init.cpp index 8bb6da0..06a7326 100644 --- a/init/init.c +++ b/init/init.cpp @@ -113,9 +113,8 @@ int add_environment(const char *key, const char *val) /* Add entry if a free slot is available */ if (ENV[n] == NULL) { - size_t len = key_len + strlen(val) + 2; - char *entry = malloc(len); - snprintf(entry, len, "%s=%s", key, val); + char* entry; + asprintf(&entry, "%s=%s", key, val); ENV[n] = entry; return 0; } diff --git a/init/init.h b/init/init.h index 654a80b..eedec27 100644 --- a/init/init.h +++ b/init/init.h @@ -18,6 +18,7 @@ #define _INIT_INIT_H #include <cutils/list.h> +#include <cutils/iosched_policy.h> #include <sys/stat.h> @@ -122,7 +123,7 @@ struct service { int nkeycodes; int keychord_id; - int ioprio_class; + IoSchedClass ioprio_class; int ioprio_pri; int nargs; diff --git a/init/init_parser.c b/init/init_parser.cpp index 02cbf3d..c8f2ea7 100644 --- a/init/init_parser.c +++ b/init/init_parser.cpp @@ -290,8 +290,7 @@ err: static void parse_import(struct parse_state *state, int nargs, char **args) { - struct listnode *import_list = state->priv; - struct import *import; + struct listnode *import_list = (listnode*) state->priv; char conf_file[PATH_MAX]; int ret; @@ -307,7 +306,7 @@ static void parse_import(struct parse_state *state, int nargs, char **args) return; } - import = calloc(1, sizeof(struct import)); + struct import* import = (struct import*) calloc(1, sizeof(struct import)); import->filename = strdup(conf_file); list_add_tail(import_list, &import->list); INFO("found import '%s', adding to import list", import->filename); @@ -575,23 +574,19 @@ void queue_all_property_triggers() queue_property_triggers(NULL, NULL); } -void queue_builtin_action(int (*func)(int nargs, char **args), char *name) +void queue_builtin_action(int (*func)(int nargs, char **args), const char *name) { - struct action *act; - struct command *cmd; - struct trigger *cur_trigger; - - act = calloc(1, sizeof(*act)); - cur_trigger = calloc(1, sizeof(*cur_trigger)); + action* act = (action*) calloc(1, sizeof(*act)); + trigger* cur_trigger = (trigger*) calloc(1, sizeof(*cur_trigger)); cur_trigger->name = name; list_init(&act->triggers); list_add_tail(&act->triggers, &cur_trigger->nlist); list_init(&act->commands); list_init(&act->qlist); - cmd = calloc(1, sizeof(*cmd)); + command* cmd = (command*) calloc(1, sizeof(*cmd)); cmd->func = func; - cmd->args[0] = name; + cmd->args[0] = const_cast<char*>(name); cmd->nargs = 1; list_add_tail(&act->commands, &cmd->clist); @@ -626,8 +621,6 @@ int action_queue_empty() static void *parse_service(struct parse_state *state, int nargs, char **args) { - struct service *svc; - struct trigger *cur_trigger; if (nargs < 3) { parse_error(state, "services must have a name and a program\n"); return 0; @@ -637,14 +630,14 @@ static void *parse_service(struct parse_state *state, int nargs, char **args) return 0; } - svc = service_find_by_name(args[1]); + service* svc = (service*) service_find_by_name(args[1]); if (svc) { parse_error(state, "ignored duplicate definition of service '%s'\n", args[1]); return 0; } nargs -= 2; - svc = calloc(1, sizeof(*svc) + sizeof(char*) * nargs); + svc = (service*) calloc(1, sizeof(*svc) + sizeof(char*) * nargs); if (!svc) { parse_error(state, "out of memory\n"); return 0; @@ -652,7 +645,7 @@ static void *parse_service(struct parse_state *state, int nargs, char **args) svc->name = args[1]; svc->classname = "default"; memcpy(svc->args, args + 2, sizeof(char*) * nargs); - cur_trigger = calloc(1, sizeof(*cur_trigger)); + trigger* cur_trigger = (trigger*) calloc(1, sizeof(*cur_trigger)); svc->args[nargs] = 0; svc->nargs = nargs; list_init(&svc->onrestart.triggers); @@ -665,7 +658,7 @@ static void *parse_service(struct parse_state *state, int nargs, char **args) static void parse_line_service(struct parse_state *state, int nargs, char **args) { - struct service *svc = state->context; + struct service *svc = (service*) state->context; struct command *cmd; int i, kw, kw_nargs; @@ -734,7 +727,7 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args if (nargs < 2) { parse_error(state, "keycodes option requires atleast one keycode\n"); } else { - svc->keycodes = malloc((nargs - 1) * sizeof(svc->keycodes[0])); + svc->keycodes = (int*) malloc((nargs - 1) * sizeof(svc->keycodes[0])); if (!svc->keycodes) { parse_error(state, "could not allocate keycodes\n"); } else { @@ -763,7 +756,7 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args break; } - cmd = malloc(sizeof(*cmd) + sizeof(char*) * nargs); + cmd = (command*) malloc(sizeof(*cmd) + sizeof(char*) * nargs); cmd->func = kw_func(kw); cmd->nargs = nargs; memcpy(cmd->args, args, sizeof(char*) * nargs); @@ -773,12 +766,11 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args svc->flags |= SVC_CRITICAL; break; case K_setenv: { /* name value */ - struct svcenvinfo *ei; if (nargs < 3) { parse_error(state, "setenv option requires name and value arguments\n"); break; } - ei = calloc(1, sizeof(*ei)); + svcenvinfo* ei = (svcenvinfo*) calloc(1, sizeof(*ei)); if (!ei) { parse_error(state, "out of memory\n"); break; @@ -790,7 +782,6 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args break; } case K_socket: {/* name type perm [ uid gid context ] */ - struct socketinfo *si; if (nargs < 4) { parse_error(state, "socket option requires name, type, perm arguments\n"); break; @@ -800,7 +791,7 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args parse_error(state, "socket type must be 'dgram', 'stream' or 'seqpacket'\n"); break; } - si = calloc(1, sizeof(*si)); + socketinfo* si = (socketinfo*) calloc(1, sizeof(*si)); if (!si) { parse_error(state, "out of memory\n"); break; @@ -840,7 +831,6 @@ static void parse_line_service(struct parse_state *state, int nargs, char **args static void *parse_action(struct parse_state *state, int nargs, char **args) { - struct action *act; struct trigger *cur_trigger; int i; if (nargs < 2) { @@ -848,7 +838,7 @@ static void *parse_action(struct parse_state *state, int nargs, char **args) return 0; } - act = calloc(1, sizeof(*act)); + action* act = (action*) calloc(1, sizeof(*act)); list_init(&act->triggers); for (i = 1; i < nargs; i++) { @@ -859,7 +849,7 @@ static void *parse_action(struct parse_state *state, int nargs, char **args) } else continue; } - cur_trigger = calloc(1, sizeof(*cur_trigger)); + cur_trigger = (trigger*) calloc(1, sizeof(*cur_trigger)); cur_trigger->name = args[i]; list_add_tail(&act->triggers, &cur_trigger->nlist); } @@ -873,8 +863,7 @@ static void *parse_action(struct parse_state *state, int nargs, char **args) static void parse_line_action(struct parse_state* state, int nargs, char **args) { - struct command *cmd; - struct action *act = state->context; + struct action *act = (action*) state->context; int kw, n; if (nargs == 0) { @@ -893,7 +882,7 @@ static void parse_line_action(struct parse_state* state, int nargs, char **args) n > 2 ? "arguments" : "argument"); return; } - cmd = malloc(sizeof(*cmd) + sizeof(char*) * nargs); + command* cmd = (command*) malloc(sizeof(*cmd) + sizeof(char*) * nargs); cmd->func = kw_func(kw); cmd->line = state->line; cmd->filename = state->filename; diff --git a/init/init_parser.h b/init/init_parser.h index b078cad..0047da7 100644 --- a/init/init_parser.h +++ b/init/init_parser.h @@ -28,7 +28,7 @@ void action_for_each_trigger(const char *trigger, int action_queue_empty(void); void queue_property_triggers(const char *name, const char *value); void queue_all_property_triggers(); -void queue_builtin_action(int (*func)(int nargs, char **args), char *name); +void queue_builtin_action(int (*func)(int nargs, char **args), const char *name); int init_parse_config_file(const char *fn); int expand_props(char *dst, const char *src, int len); diff --git a/init/keychords.c b/init/keychords.cpp index 5a9e45f..d6464bd 100644 --- a/init/keychords.c +++ b/init/keychords.cpp @@ -40,7 +40,7 @@ void add_service_keycodes(struct service *svc) if (svc->keycodes) { /* add a new keychord to the list */ size = sizeof(*keychord) + svc->nkeycodes * sizeof(keychord->keycodes[0]); - keychords = realloc(keychords, keychords_length + size); + keychords = (input_keychord*) realloc(keychords, keychords_length + size); if (!keychords) { ERROR("could not allocate keychords\n"); keychords_length = 0; diff --git a/init/keywords.h b/init/keywords.h index 7473586..0805cdd 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -1,4 +1,3 @@ - #ifndef KEYWORD int do_chroot(int nargs, char **args); int do_chdir(int nargs, char **args); @@ -112,4 +111,3 @@ enum { #undef __MAKE_KEYWORD_ENUM__ #undef KEYWORD #endif - diff --git a/init/parser.c b/init/parser.cpp index 80bfb09..80bfb09 100644 --- a/init/parser.c +++ b/init/parser.cpp diff --git a/init/property_service.c b/init/property_service.cpp index 7dd9ef9..4f0a46c 100644 --- a/init/property_service.c +++ b/init/property_service.cpp @@ -97,8 +97,6 @@ static int check_mac_perms(const char *name, char *sctx) return 1; char *tctx = NULL; - const char *class = "property_service"; - const char *perm = "set"; int result = 0; if (!sctx) @@ -110,7 +108,7 @@ static int check_mac_perms(const char *name, char *sctx) if (selabel_lookup(sehandle_prop, &tctx, name, 1) != 0) goto err; - if (selinux_check_access(sctx, tctx, class, perm, (void*) name) == 0) + if (selinux_check_access(sctx, tctx, "property_service", "set", (void*) name) == 0) result = 1; freecon(tctx); diff --git a/init/signal_handler.c b/init/signal_handler.cpp index 952f970..952f970 100644 --- a/init/signal_handler.c +++ b/init/signal_handler.cpp diff --git a/init/ueventd.c b/init/ueventd.cpp index 833e4fd..833e4fd 100644 --- a/init/ueventd.c +++ b/init/ueventd.cpp diff --git a/init/ueventd.h b/init/ueventd.h index 0a454c5..d12d7fe 100644 --- a/init/ueventd.h +++ b/init/ueventd.h @@ -20,16 +20,18 @@ #include <cutils/list.h> #include <sys/types.h> +enum devname_src_t { + DEVNAME_UNKNOWN = 0, + DEVNAME_UEVENT_DEVNAME, + DEVNAME_UEVENT_DEVPATH, +}; + struct ueventd_subsystem { struct listnode slist; const char *name; - enum { - DEVNAME_UNKNOWN = 0, - DEVNAME_UEVENT_DEVNAME, - DEVNAME_UEVENT_DEVPATH, - } devname_src; const char *dirname; + devname_src_t devname_src; }; int ueventd_main(int argc, char **argv); diff --git a/init/ueventd_parser.c b/init/ueventd_parser.cpp index e447006..f54a90b 100644 --- a/init/ueventd_parser.c +++ b/init/ueventd_parser.cpp @@ -100,21 +100,19 @@ struct ueventd_subsystem *ueventd_subsystem_find_by_name(const char *name) static void *parse_subsystem(struct parse_state *state, int nargs __attribute__((unused)), char **args) { - struct ueventd_subsystem *s; - if (!valid_name(args[1])) { parse_error(state, "invalid subsystem name '%s'\n", args[1]); return 0; } - s = ueventd_subsystem_find_by_name(args[1]); + ueventd_subsystem* s = ueventd_subsystem_find_by_name(args[1]); if (s) { parse_error(state, "ignored duplicate definition of subsystem '%s'\n", args[1]); return 0; } - s = calloc(1, sizeof(*s)); + s = (ueventd_subsystem*) calloc(1, sizeof(*s)); if (!s) { parse_error(state, "out of memory\n"); return 0; @@ -128,7 +126,7 @@ static void *parse_subsystem(struct parse_state *state, static void parse_line_subsystem(struct parse_state *state, int nargs, char **args) { - struct ueventd_subsystem *s = state->context; + struct ueventd_subsystem *s = (ueventd_subsystem*) state->context; int kw; if (nargs == 0) { diff --git a/init/util.c b/init/util.cpp index 8f27ee9..c484168 100644 --- a/init/util.c +++ b/init/util.cpp @@ -147,9 +147,9 @@ out_close: } /* reads a file, making sure it is terminated with \n \0 */ -void *read_file(const char *fn, unsigned *_sz) +char *read_file(const char *fn, unsigned *_sz) { - char *data; + char *data = NULL; int sz; int fd; struct stat sb; @@ -186,7 +186,7 @@ void *read_file(const char *fn, unsigned *_sz) oops: close(fd); - if(data != 0) free(data); + free(data); return 0; } @@ -404,72 +404,40 @@ void open_devnull_stdio(void) exit(1); } -void get_hardware_name(char *hardware, unsigned int *revision) -{ - const char *cpuinfo = "/proc/cpuinfo"; - char *data = NULL; - size_t len = 0, limit = 1024; - int fd, n; - char *x, *hw, *rev; - - /* Hardware string was provided on kernel command line */ - if (hardware[0]) - return; - - fd = open(cpuinfo, O_RDONLY | O_CLOEXEC); - if (fd < 0) return; - - for (;;) { - x = realloc(data, limit); - if (!x) { - ERROR("Failed to allocate memory to read %s\n", cpuinfo); - goto done; - } - data = x; - - n = read(fd, data + len, limit - len); - if (n < 0) { - ERROR("Failed reading %s: %s (%d)\n", cpuinfo, strerror(errno), errno); - goto done; - } - len += n; - - if (len < limit) - break; - - /* We filled the buffer, so increase size and loop to read more */ - limit *= 2; - } - - data[len] = 0; - hw = strstr(data, "\nHardware"); - rev = strstr(data, "\nRevision"); - - if (hw) { - x = strstr(hw, ": "); - if (x) { - x += 2; - n = 0; - while (*x && *x != '\n') { - if (!isspace(*x)) - hardware[n++] = tolower(*x); - x++; - if (n == 31) break; - } - hardware[n] = 0; +void get_hardware_name(char *hardware, unsigned int *revision) { + // Hardware string was provided on kernel command line. + if (hardware[0]) { + return; + } + + FILE* fp = fopen("/proc/cpuinfo", "re"); + if (fp == NULL) { + return; + } + char buf[1024]; + while (fgets(buf, sizeof(buf), fp) != NULL) { + if (strncmp(buf, "Hardware", 8) == 0) { + const char* hw = strstr(buf, ": "); + if (hw) { + hw += 2; + size_t n = 0; + while (*hw) { + if (!isspace(*hw)) { + hardware[n++] = tolower(*hw); + } + hw++; + if (n == 31) break; } + hardware[n] = 0; + } + } else if (strncmp(buf, "Revision", 8) == 0) { + const char* rev = strstr(buf, ": "); + if (rev) { + *revision = strtoul(rev + 2, 0, 16); + } } - - if (rev) { - x = strstr(rev, ": "); - if (x) { - *revision = strtoul(x + 2, 0, 16); - } - } - -done: - close(fd); - free(data); + } + fclose(fp); } void import_kernel_cmdline(int in_qemu, diff --git a/init/util.h b/init/util.h index 4cfe99d..1f9ecbe 100644 --- a/init/util.h +++ b/init/util.h @@ -27,7 +27,7 @@ int mtd_name_to_number(const char *name); int create_socket(const char *name, int type, mode_t perm, uid_t uid, gid_t gid, const char *socketcon); -void *read_file(const char *fn, unsigned *_sz); +char *read_file(const char *fn, unsigned *_sz); time_t gettime(void); unsigned int decode_uid(const char *s); diff --git a/init/watchdogd.c b/init/watchdogd.cpp index 0790811..0790811 100644 --- a/init/watchdogd.c +++ b/init/watchdogd.cpp |