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 @@
 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
+    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_CFLAGS += \
-    -std=gnu11 \
+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
similarity index 99%
rename from init/bootchart.c
rename to 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
similarity index 98%
rename from init/builtins.c
rename to 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 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 @@
     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
similarity index 98%
rename from init/devices.c
rename to init/devices.cpp
index 0de92f5..28f2ec0 100644
--- a/init/devices.c
+++ b/init/devices.cpp
@@ -101,7 +101,7 @@
                   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 @@
 
     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 @@
     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 @@
         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 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 @@
                          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
similarity index 99%
rename from init/init.c
rename to init/init.cpp
index 8bb6da0..06a7326 100644
--- a/init/init.c
+++ b/init/init.cpp
@@ -113,9 +113,8 @@
 
         /* 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 @@
     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
similarity index 95%
rename from init/init_parser.c
rename to init/init_parser.cpp
index 02cbf3d..c8f2ea7 100644
--- a/init/init_parser.c
+++ b/init/init_parser.cpp
@@ -290,8 +290,7 @@
 
 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 @@
         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 @@
     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 @@
 
 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 @@
         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 @@
     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_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 @@
         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 @@
             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 @@
         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 @@
         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 @@
             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_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 @@
         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 @@
             } 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_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 @@
             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 @@
 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
similarity index 96%
rename from init/keychords.c
rename to init/keychords.cpp
index 5a9e45f..d6464bd 100644
--- a/init/keychords.c
+++ b/init/keychords.cpp
@@ -40,7 +40,7 @@
     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 @@
 #undef __MAKE_KEYWORD_ENUM__
 #undef KEYWORD
 #endif
-
diff --git a/init/parser.c b/init/parser.cpp
similarity index 100%
rename from init/parser.c
rename to init/parser.cpp
diff --git a/init/property_service.c b/init/property_service.cpp
similarity index 98%
rename from init/property_service.c
rename to init/property_service.cpp
index 7dd9ef9..4f0a46c 100644
--- a/init/property_service.c
+++ b/init/property_service.cpp
@@ -97,8 +97,6 @@
         return 1;
 
     char *tctx = NULL;
-    const char *class = "property_service";
-    const char *perm = "set";
     int result = 0;
 
     if (!sctx)
@@ -110,7 +108,7 @@
     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
similarity index 100%
rename from init/signal_handler.c
rename to init/signal_handler.cpp
diff --git a/init/ueventd.c b/init/ueventd.cpp
similarity index 100%
rename from init/ueventd.c
rename to 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
similarity index 96%
rename from init/ueventd_parser.c
rename to init/ueventd_parser.cpp
index e447006..f54a90b 100644
--- a/init/ueventd_parser.c
+++ b/init/ueventd_parser.cpp
@@ -100,21 +100,19 @@
 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_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
similarity index 87%
rename from init/util.c
rename to init/util.cpp
index 8f27ee9..c484168 100644
--- a/init/util.c
+++ b/init/util.cpp
@@ -147,9 +147,9 @@
 }
 
 /* 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 @@
 
 oops:
     close(fd);
-    if(data != 0) free(data);
+    free(data);
     return 0;
 }
 
@@ -404,72 +404,40 @@
     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;
+void get_hardware_name(char *hardware, unsigned int *revision) {
+  // Hardware string was provided on kernel command line.
+  if (hardware[0]) {
+    return;
+  }
 
-    /* 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;
+  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;
         }
-        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;
+        hardware[n] = 0;
+      }
+    } else if (strncmp(buf, "Revision", 8) == 0) {
+      const char* rev = strstr(buf, ": ");
+      if (rev) {
+        *revision = strtoul(rev + 2, 0, 16);
+      }
     }
-
-    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;
-        }
-    }
-
-    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
similarity index 100%
rename from init/watchdogd.c
rename to init/watchdogd.cpp
