diff --git a/adb/Android.mk b/adb/Android.mk index 8ebcbf0d2..cbb49f483 100644 --- a/adb/Android.mk +++ b/adb/Android.mk @@ -5,6 +5,35 @@ LOCAL_PATH:= $(call my-dir) +# libadb +# ========================================================= + +# Much of adb is duplicated in bootable/recovery/minadb and fastboot. Changes +# made to adb rarely get ported to the other two, so the trees have diverged a +# bit. We'd like to stop this because it is a maintenance nightmare, but the +# 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_C_FLAGS := -Wall -Werror -D_XOPEN_SOURCE -D_GNU_SOURCE + +include $(CLEAR_VARS) +LOCAL_MODULE := libadb +LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=0 +LOCAL_SRC_FILES := $(LIBADB_SRC_FILES) fdevent.cpp +include $(BUILD_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libadb +LOCAL_CFLAGS := $(LIBADB_CFLAGS) -DADB_HOST=1 +LOCAL_SRC_FILES := $(LIBADB_SRC_FILES) +ifeq ($(HOST_OS),windows) + LOCAL_SRC_FILES += sysdeps_wind32.c +else + LOCAL_SRC_FILES += fdevent.cpp +endif +include $(BUILD_HOST_STATIC_LIBRARY) + # adb host tool # ========================================================= include $(CLEAR_VARS) @@ -37,10 +66,6 @@ ifeq ($(HOST_OS),windows) USB_SRCS := usb_windows.c EXTRA_SRCS := get_my_path_windows.c EXTRA_STATIC_LIBS := AdbWinApi - ifneq ($(strip $(USE_CYGWIN)),) - # Pure cygwin case - LOCAL_LDLIBS += -lpthread -lgdi32 - endif ifneq ($(strip $(USE_MINGW)),) # MinGW under Linux case LOCAL_LDLIBS += -lws2_32 -lgdi32 @@ -66,8 +91,6 @@ LOCAL_SRC_FILES := \ ifneq ($(USE_SYSDEPS_WIN32),) LOCAL_SRC_FILES += sysdeps_win32.c -else - LOCAL_SRC_FILES += fdevent.c endif LOCAL_CFLAGS += -O2 -g -DADB_HOST=1 -Wall -Wno-unused-parameter -Werror @@ -75,7 +98,13 @@ LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE LOCAL_MODULE := adb LOCAL_MODULE_TAGS := debug -LOCAL_STATIC_LIBRARIES := libzipfile libz libcrypto_static $(EXTRA_STATIC_LIBS) +LOCAL_STATIC_LIBRARIES := \ + libadb \ + libzipfile \ + libz \ + libcrypto_static \ + $(EXTRA_STATIC_LIBS) \ + ifeq ($(USE_SYSDEPS_WIN32),) LOCAL_STATIC_LIBRARIES += libcutils endif @@ -99,7 +128,6 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ adb.c \ - fdevent.c \ transport.c \ transport_local.c \ transport_usb.c \ @@ -134,15 +162,14 @@ LOCAL_MODULE := adbd LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN) LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED) -LOCAL_C_INCLUDES += system/extras/ext4_utils system/core/fs_mgr/include -LOCAL_STATIC_LIBRARIES := liblog \ - libfs_mgr \ - libcutils \ - libc \ - libmincrypt \ - libselinux \ - libext4_utils_static +LOCAL_STATIC_LIBRARIES := \ + libadb \ + liblog \ + libcutils \ + libc \ + libmincrypt \ + libselinux \ LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk @@ -168,7 +195,6 @@ LOCAL_SRC_FILES := \ file_sync_client.c \ get_my_path_linux.c \ usb_linux.c \ - fdevent.c LOCAL_CFLAGS := \ -O2 \ @@ -181,7 +207,7 @@ LOCAL_CFLAGS := \ LOCAL_MODULE := adb -LOCAL_STATIC_LIBRARIES := libzipfile libz libcutils liblog +LOCAL_STATIC_LIBRARIES := libadb libzipfile libz libcutils liblog LOCAL_SHARED_LIBRARIES := libcrypto diff --git a/adb/adb.h b/adb/adb.h index a37fd5b7a..6ac47312a 100644 --- a/adb/adb.h +++ b/adb/adb.h @@ -20,6 +20,7 @@ #include #include "adb_trace.h" +#include "fdevent.h" #include "transport.h" /* readx(), writex() */ #define MAX_PAYLOAD 4096 diff --git a/adb/fdevent.c b/adb/fdevent.cpp similarity index 97% rename from adb/fdevent.c rename to adb/fdevent.cpp index f5ecd14f4..bd0f3b26e 100644 --- a/adb/fdevent.c +++ b/adb/fdevent.cpp @@ -88,6 +88,12 @@ static void fdevent_subproc_event_func(int fd, unsigned events, void *userdata); static fdevent list_pending = { .next = &list_pending, .prev = &list_pending, + .fd = -1, + .force_eof = 0, + .state = 0, + .events = 0, + .func = nullptr, + .arg = nullptr, }; static fdevent **fd_table = 0; @@ -312,7 +318,7 @@ static int fdevent_fd_check(fd_set *fds) } #if !DEBUG -static inline void dump_all_fds(const char *extra_msg) {} +static inline void dump_all_fds(const char* /* extra_msg */) {} #else static void dump_all_fds(const char *extra_msg) { @@ -434,7 +440,8 @@ static void fdevent_register(fdevent *fde) while(fd_table_max <= fde->fd) { fd_table_max *= 2; } - fd_table = realloc(fd_table, sizeof(fdevent*) * fd_table_max); + fd_table = reinterpret_cast( + realloc(fd_table, sizeof(fdevent*) * fd_table_max)); if(fd_table == 0) { FATAL("could not expand fd_table to %d entries\n", fd_table_max); } @@ -505,7 +512,8 @@ static void fdevent_call_fdfunc(fdevent* fde) fde->func(fde->fd, events, fde->arg); } -static void fdevent_subproc_event_func(int fd, unsigned ev, void *userdata) +static void fdevent_subproc_event_func(int fd, unsigned ev, + void* /* userdata */) { D("subproc handling on fd=%d ev=%04x\n", fd, ev); diff --git a/adb/fdevent.h b/adb/fdevent.h index a0ebe2a7e..a8102caac 100644 --- a/adb/fdevent.h +++ b/adb/fdevent.h @@ -19,6 +19,10 @@ #include /* for int64_t */ +#ifdef __cplusplus +extern "C" { +#endif + /* events that may be observed */ #define FDE_READ 0x0001 #define FDE_WRITE 0x0002 @@ -64,20 +68,22 @@ void fdevent_set_timeout(fdevent *fde, int64_t timeout_ms); */ void fdevent_loop(); -struct fdevent -{ +struct fdevent { fdevent *next; fdevent *prev; int fd; int force_eof; - unsigned short state; - unsigned short events; + uint16_t state; + uint16_t events; fd_func func; void *arg; }; +#ifdef __cplusplus +} +#endif #endif diff --git a/adb/set_verity_enable_state_service.c b/adb/set_verity_enable_state_service.c index 2660ddd73..051b9a46a 100644 --- a/adb/set_verity_enable_state_service.c +++ b/adb/set_verity_enable_state_service.c @@ -26,8 +26,6 @@ #include #include "cutils/properties.h" -#include "ext4_sb.h" -#include #define FSTAB_PREFIX "/fstab." struct fstab *fstab; diff --git a/adb/sysdeps.h b/adb/sysdeps.h index 8d63d14b3..304a61327 100644 --- a/adb/sysdeps.h +++ b/adb/sysdeps.h @@ -26,16 +26,18 @@ #ifdef _WIN32 +#include +#include +#include +#include +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include -#include -#include + +#include "fdevent.h" #define OS_PATH_SEPARATOR '\\' #define OS_PATH_SEPARATOR_STR "\\" @@ -187,8 +189,6 @@ extern int socket_inaddr_any_server(int port, int type); #define FDE_ERROR 0x0004 #define FDE_DONT_CLOSE 0x0080 -typedef struct fdevent fdevent; - typedef void (*fd_func)(int fd, unsigned events, void *userdata); fdevent *fdevent_create(int fd, fd_func func, void *arg); @@ -200,20 +200,6 @@ void fdevent_add(fdevent *fde, unsigned events); void fdevent_del(fdevent *fde, unsigned events); void fdevent_loop(); -struct fdevent { - fdevent *next; - fdevent *prev; - - int fd; - int force_eof; - - unsigned short state; - unsigned short events; - - fd_func func; - void *arg; -}; - static __inline__ void adb_sleep_ms( int mseconds ) { Sleep( mseconds ); diff --git a/adb/transport.h b/adb/transport.h index 992e05285..c1b8ff34f 100644 --- a/adb/transport.h +++ b/adb/transport.h @@ -17,10 +17,19 @@ #ifndef __TRANSPORT_H #define __TRANSPORT_H +#ifdef __cplusplus +extern "C" { +#endif + /* convenience wrappers around read/write that will retry on ** EINTR and/or short read/write. Returns 0 on success, -1 ** on error or EOF. */ int readx(int fd, void *ptr, size_t len); int writex(int fd, const void *ptr, size_t len); + +#ifdef __cplusplus +} +#endif + #endif /* __TRANSPORT_H */