diff --git a/include/cutils/sockets.h b/include/cutils/sockets.h index 783bd0bea..a93c8eaa4 100644 --- a/include/cutils/sockets.h +++ b/include/cutils/sockets.h @@ -18,6 +18,7 @@ #define __CUTILS_SOCKETS_H #include +#include #include #include #include @@ -51,28 +52,8 @@ extern "C" { * android_get_control_socket - simple helper function to get the file * descriptor of our init-managed Unix domain socket. `name' is the name of the * socket, as given in init.rc. Returns -1 on error. - * - * This is inline and not in libcutils proper because we want to use this in - * third-party daemons with minimal modification. */ -static inline int android_get_control_socket(const char* name) -{ - char key[64]; - snprintf(key, sizeof(key), ANDROID_SOCKET_ENV_PREFIX "%s", name); - - const char* val = getenv(key); - if (!val) { - return -1; - } - - errno = 0; - int fd = strtol(val, NULL, 10); - if (errno) { - return -1; - } - - return fd; -} +int android_get_control_socket(const char* name); /* * See also android.os.LocalSocketAddress.Namespace diff --git a/libcutils/sockets.cpp b/libcutils/sockets.cpp index d9ab14611..bba63ac16 100644 --- a/libcutils/sockets.cpp +++ b/libcutils/sockets.cpp @@ -45,3 +45,24 @@ int socket_get_local_port(cutils_socket_t sock) { } return -1; } + +int android_get_control_socket(const char* name) { + char key[64]; + snprintf(key, sizeof(key), ANDROID_SOCKET_ENV_PREFIX "%s", name); + + const char* val = getenv(key); + if (!val) { + return -1; + } + + errno = 0; + long ret = strtol(val, NULL, 10); + if (errno) { + return -1; + } + if (ret < 0 || ret > INT_MAX) { + return -1; + } + + return static_cast(ret); +} diff --git a/lmkd/Android.mk b/lmkd/Android.mk index 8c886613d..8980d1c84 100644 --- a/lmkd/Android.mk +++ b/lmkd/Android.mk @@ -2,7 +2,7 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := lmkd.c -LOCAL_SHARED_LIBRARIES := liblog libm libc libprocessgroup +LOCAL_SHARED_LIBRARIES := liblog libm libc libprocessgroup libcutils LOCAL_CFLAGS := -Werror LOCAL_MODULE := lmkd