Merge "adb: add "adb unroot" to restart adb in non-root mode"
diff --git a/adb/Android.mk b/adb/Android.mk
index 415952d..ba20bbe 100644
--- a/adb/Android.mk
+++ b/adb/Android.mk
@@ -14,13 +14,22 @@
 # divergence makes this difficult to do all at once. For now, we will start
 # small by moving common files into a static library. Hopefully some day we can
 # get enough of adb in here that we no longer need minadb. https://b/17626262
-LIBADB_SRC_FILES :=
+LIBADB_SRC_FILES := transport.c transport_usb.c
 LIBADB_C_FLAGS := -Wall -Werror -D_XOPEN_SOURCE -D_GNU_SOURCE
 
+LIBADB_LINUX_SRC_FILES := fdevent.cpp
+LIBADB_WINDOWS_SRC_FILES := sysdeps_win32.c
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libadbd
+LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0
+LOCAL_SRC_FILES := $(LIBADB_SRC_FILES) $(LIBADB_LINUX_SRC_FILES) usb_linux_client.c
+include $(BUILD_STATIC_LIBRARY)
+
 include $(CLEAR_VARS)
 LOCAL_MODULE := libadb
-LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0
-LOCAL_SRC_FILES := $(LIBADB_SRC_FILES) fdevent.cpp
+LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=1
+LOCAL_SRC_FILES := $(LIBADB_SRC_FILES) $(LIBADB_LINUX_SRC_FILES)
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
@@ -28,9 +37,9 @@
 LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=1
 LOCAL_SRC_FILES := $(LIBADB_SRC_FILES)
 ifeq ($(HOST_OS),windows)
-    LOCAL_SRC_FILES += sysdeps_win32.c
+    LOCAL_SRC_FILES += $(LIBADB_WINDOWS_SRC_FILES)
 else
-    LOCAL_SRC_FILES += fdevent.cpp
+    LOCAL_SRC_FILES += $(LIBADB_LINUX_SRC_FILES)
 endif
 include $(BUILD_HOST_STATIC_LIBRARY)
 
@@ -71,9 +80,7 @@
 LOCAL_SRC_FILES := \
 	adb.c \
 	console.c \
-	transport.c \
 	transport_local.c \
-	transport_usb.c \
 	commandline.c \
 	adb_client.c \
 	adb_auth_host.c \
@@ -121,9 +128,7 @@
 
 LOCAL_SRC_FILES := \
 	adb.c \
-	transport.c \
 	transport_local.c \
-	transport_usb.c \
 	adb_auth_client.c \
 	sockets.c \
 	services.c \
@@ -158,7 +163,7 @@
 LOCAL_C_INCLUDES += system/extras/ext4_utils system/core/fs_mgr/include
 
 LOCAL_STATIC_LIBRARIES := \
-    libadb \
+    libadbd \
     libfs_mgr \
     liblog \
     libcutils \
diff --git a/fs_mgr/fs_mgr_verity.c b/fs_mgr/fs_mgr_verity.c
index ef7cf6e..4683acb 100644
--- a/fs_mgr/fs_mgr_verity.c
+++ b/fs_mgr/fs_mgr_verity.c
@@ -317,9 +317,7 @@
 
     // build the verity params here
     verity_params = buffer + sizeof(struct dm_ioctl) + sizeof(struct dm_target_spec);
-    if (sprintf(verity_params, "%s", table) < 0) {
-        return -1;
-    }
+    strcpy(verity_params, table);
 
     // set next target boundary
     verity_params += strlen(verity_params) + 1;
diff --git a/init/builtins.cpp b/init/builtins.cpp
index 42cfa43..9f3dcc1 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -389,7 +389,7 @@
             return -1;
         }
 
-        sprintf(tmp, "/dev/block/mtdblock%d", n);
+        snprintf(tmp, sizeof(tmp), "/dev/block/mtdblock%d", n);
 
         if (wait)
             wait_for_file(tmp, COMMAND_RETRY_TIMEOUT);
@@ -409,7 +409,7 @@
         }
 
         for (n = 0; ; n++) {
-            sprintf(tmp, "/dev/block/loop%d", n);
+            snprintf(tmp, sizeof(tmp), "/dev/block/loop%d", n);
             loop = open(tmp, mode | O_CLOEXEC);
             if (loop < 0) {
                 close(fd);
diff --git a/init/devices.cpp b/init/devices.cpp
index 9275439..3a9b753 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -152,7 +152,7 @@
         if ((strlen(upath) + strlen(dp->attr) + 6) > sizeof(buf))
             break;
 
-        sprintf(buf,"/sys%s/%s", upath, dp->attr);
+        snprintf(buf, sizeof(buf), "/sys%s/%s", upath, dp->attr);
         INFO("fixup %s %d %d 0%o\n", buf, dp->uid, dp->gid, dp->perm);
         chown(buf, dp->uid, dp->gid);
         chmod(buf, dp->perm);
diff --git a/init/init.cpp b/init/init.cpp
index 8647496..41ceb0a 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -252,7 +252,7 @@
         umask(077);
         if (properties_inited()) {
             get_property_workspace(&fd, &sz);
-            sprintf(tmp, "%d,%d", dup(fd), sz);
+            snprintf(tmp, sizeof(tmp), "%d,%d", dup(fd), sz);
             add_environment("ANDROID_PROPERTY_WORKSPACE", tmp);
         }
 
diff --git a/libnetutils/dhcpclient.c b/libnetutils/dhcpclient.c
index a05b7cb..240a789 100644
--- a/libnetutils/dhcpclient.c
+++ b/libnetutils/dhcpclient.c
@@ -236,13 +236,13 @@
 
 #if VERBOSE
 
-static void hex2str(char *buf, const unsigned char *array, int len)
+static void hex2str(char *buf, size_t buf_size, const unsigned char *array, int len)
 {
     int i;
     char *cp = buf;
-
+    char *buf_end = buf + buf_size;
     for (i = 0; i < len; i++) {
-        cp += sprintf(cp, " %02x ", array[i]);
+        cp += snprintf(cp, buf_end - cp, " %02x ", array[i]);
     }
 }
 
@@ -278,7 +278,7 @@
     ALOGD("giaddr = %s", ipaddr(msg->giaddr));
 
     c = msg->hlen > 16 ? 16 : msg->hlen;
-    hex2str(buf, msg->chaddr, c);
+    hex2str(buf, sizeof(buf), msg->chaddr, c);
     ALOGD("chaddr = {%s}", buf);
 
     for (n = 0; n < 64; n++) {
@@ -327,7 +327,7 @@
             memcpy(buf, &x[2], n);
             buf[n] = '\0';
         } else {
-            hex2str(buf, &x[2], optsz);
+            hex2str(buf, sizeof(buf), &x[2], optsz);
         }
         if (x[0] == OPT_MESSAGE_TYPE)
             name = dhcp_type_to_name(x[2]);