From e8ffa449fdeb7a97131805c96a7acb35957242af Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 23 Sep 2016 10:06:28 -0700 Subject: [PATCH] Move android_get_control_socket out of line android_get_control_socket has a warning from the implicit cast from long to int. The warning was being hidden because cutils/sockets.h was included with -isystem. Move android_get_control_socket to sockets.cpp, since we don't want header only dependencies anyways, and fix the warning with a range check and a static_cast. Bug: 31492149 Test: m -j Change-Id: I1f394ab26d4ec8a7dd0e7907c10416d7f8647624 --- include/cutils/sockets.h | 23 ++--------------------- libcutils/sockets.cpp | 21 +++++++++++++++++++++ lmkd/Android.mk | 2 +- 3 files changed, 24 insertions(+), 22 deletions(-) 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