diff options
| author | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-11-19 12:54:24 +0000 |
|---|---|---|
| committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-11-19 12:54:24 +0000 |
| commit | 5827cc4bd7b381f2734d0b958f96f4cf81090f42 (patch) | |
| tree | f7676a915b0286b24182622ca26c642e45f48c91 | |
| parent | 39d33d8d54ba55e49f9b430f842647a84751cb85 (diff) | |
| download | system_core-5827cc4bd7b381f2734d0b958f96f4cf81090f42.tar.gz system_core-5827cc4bd7b381f2734d0b958f96f4cf81090f42.tar.bz2 system_core-5827cc4bd7b381f2734d0b958f96f4cf81090f42.zip | |
Revert "libcutils: Fix aliasing violations"
This reverts commit 826d75fb6dcefe8a6c6d4d54a7d215553945812a.
Breaking build with 4.2
bionic/libc/include/string.h:105:33: error: call to '__memcpy_dest_size_error' declared with attribute error: memcpy called with size bigger than destination
bionic/libc/include/string.h:109:32: error: call to '__memcpy_src_size_error' declared with attribute error: memcpy called with size bigger than source
Change-Id: I777e5f5cd87fb972c833ef6bd81b23cd29878e9b
| -rw-r--r-- | adb/Android.mk | 35 | ||||
| -rw-r--r-- | include/cutils/jstring.h | 2 | ||||
| -rw-r--r-- | libcutils/properties.c | 11 | ||||
| -rw-r--r-- | libcutils/socket_inaddr_any_server.c | 13 | ||||
| -rw-r--r-- | libcutils/socket_local_client.c | 9 | ||||
| -rw-r--r-- | libcutils/socket_local_server.c | 11 | ||||
| -rw-r--r-- | libcutils/socket_loopback_client.c | 15 | ||||
| -rw-r--r-- | libcutils/socket_loopback_server.c | 15 | ||||
| -rw-r--r-- | libcutils/socket_network_client.c | 15 | ||||
| -rw-r--r-- | libcutils/uevent.c | 15 | ||||
| -rw-r--r-- | libnetutils/ifc_utils.c | 50 | ||||
| -rw-r--r-- | libnetutils/packet.c | 17 | ||||
| -rw-r--r-- | logcat/logcat.cpp | 6 |
13 files changed, 73 insertions, 141 deletions
diff --git a/adb/Android.mk b/adb/Android.mk index b62e856b..0a7591e3 100644 --- a/adb/Android.mk +++ b/adb/Android.mk @@ -74,16 +74,7 @@ else LOCAL_SRC_FILES += fdevent.c endif -LOCAL_CFLAGS += -g -DADB_HOST=1 -Wall -Wno-unused-parameter -# adb can't be built without optimizations, so we enforce -O2 if no -# other optimization flag is set - but we don't override what the global -# flags are saying if something else is given (-Os or -O3 are useful) -ifeq ($(findstring -O, $(HOST_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif -ifneq ($(findstring -O0, $(HOST_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif +LOCAL_CFLAGS += -O2 -g -DADB_HOST=1 -Wall -Wno-unused-parameter LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE LOCAL_MODULE := adb @@ -126,16 +117,7 @@ LOCAL_SRC_FILES := \ log_service.c \ utils.c -LOCAL_CFLAGS := -g -DADB_HOST=0 -Wall -Wno-unused-parameter -# adb can't be built without optimizations, so we enforce -O2 if no -# other optimization flag is set - but we don't override what the global -# flags are saying if something else is given (-Os or -O3 are useful) -ifeq ($(findstring -O, $(TARGET_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif -ifneq ($(findstring -O0, $(TARGET_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif +LOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameter LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) @@ -182,6 +164,7 @@ LOCAL_SRC_FILES := \ fdevent.c LOCAL_CFLAGS := \ + -O2 \ -g \ -DADB_HOST=1 \ -DADB_HOST_ON_TARGET=1 \ @@ -190,18 +173,6 @@ LOCAL_CFLAGS := \ -D_XOPEN_SOURCE \ -D_GNU_SOURCE -# adb can't be built without optimizations, so we enforce -O2 if no -# other optimization flag is set - but we don't override what the global -# flags are saying if something else is given (-Os or -O3 are useful) -ifeq ($(findstring -O, $(TARGET_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif -ifneq ($(findstring -O0, $(TARGET_GLOBAL_CFLAGS)),) -LOCAL_CFLAGS += -O2 -endif - -LOCAL_C_INCLUDES += external/openssl/include - LOCAL_MODULE := adb LOCAL_STATIC_LIBRARIES := libzipfile libunz libcutils diff --git a/include/cutils/jstring.h b/include/cutils/jstring.h index bf729731..ee0018fc 100644 --- a/include/cutils/jstring.h +++ b/include/cutils/jstring.h @@ -24,9 +24,7 @@ extern "C" { #endif -#if __cplusplus < 201103L && !defined(__GXX_EXPERIMENTAL_CXX0X__) typedef uint16_t char16_t; -#endif extern char * strndup16to8 (const char16_t* s, size_t n); extern size_t strnlen16to8 (const char16_t* s, size_t n); diff --git a/libcutils/properties.c b/libcutils/properties.c index 6c3aab88..9c46b795 100644 --- a/libcutils/properties.c +++ b/libcutils/properties.c @@ -100,10 +100,7 @@ static int connectToServer(const char* fileName) int sock = -1; int cc; - union { - struct sockaddr_un un; - struct sockaddr generic; - } addr; + struct sockaddr_un addr; sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { @@ -112,9 +109,9 @@ static int connectToServer(const char* fileName) } /* connect to socket; fails if file doesn't exist */ - strcpy(addr.un.sun_path, fileName); // max 108 bytes - addr.un.sun_family = AF_UNIX; - cc = connect(sock, &addr.generic, SUN_LEN(&addr.un)); + strcpy(addr.sun_path, fileName); // max 108 bytes + addr.sun_family = AF_UNIX; + cc = connect(sock, (struct sockaddr*) &addr, SUN_LEN(&addr)); if (cc < 0) { // ENOENT means socket file doesn't exist // ECONNREFUSED means socket exists but nobody is listening diff --git a/libcutils/socket_inaddr_any_server.c b/libcutils/socket_inaddr_any_server.c index d57db118..7d5dab4c 100644 --- a/libcutils/socket_inaddr_any_server.c +++ b/libcutils/socket_inaddr_any_server.c @@ -35,17 +35,14 @@ /* open listen() port on any interface */ int socket_inaddr_any_server(int port, int type) { - union { - struct sockaddr_in in; - struct sockaddr generic; - } addr; + struct sockaddr_in addr; size_t alen; int s, n; memset(&addr, 0, sizeof(addr)); - addr.in.sin_family = AF_INET; - addr.in.sin_port = htons(port); - addr.in.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = htonl(INADDR_ANY); s = socket(AF_INET, type, 0); if(s < 0) return -1; @@ -53,7 +50,7 @@ int socket_inaddr_any_server(int port, int type) n = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)); - if(bind(s, &addr.generic, sizeof(addr.in)) < 0) { + if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { close(s); return -1; } diff --git a/libcutils/socket_local_client.c b/libcutils/socket_local_client.c index 45466a17..036ce2ef 100644 --- a/libcutils/socket_local_client.c +++ b/libcutils/socket_local_client.c @@ -124,21 +124,18 @@ error: int socket_local_client_connect(int fd, const char *name, int namespaceId, int type) { - union { - struct sockaddr_un un; - struct sockaddr generic; - } addr; + struct sockaddr_un addr; socklen_t alen; size_t namelen; int err; - err = socket_make_sockaddr_un(name, namespaceId, &addr.un, &alen); + err = socket_make_sockaddr_un(name, namespaceId, &addr, &alen); if (err < 0) { goto error; } - if(connect(fd, &addr.generic, alen) < 0) { + if(connect(fd, (struct sockaddr *) &addr, alen) < 0) { goto error; } diff --git a/libcutils/socket_local_server.c b/libcutils/socket_local_server.c index 830fd0f0..4971b1b1 100644 --- a/libcutils/socket_local_server.c +++ b/libcutils/socket_local_server.c @@ -52,15 +52,12 @@ int socket_local_server(const char *name, int namespaceId, int type) */ int socket_local_server_bind(int s, const char *name, int namespaceId) { - union { - struct sockaddr_un un; - struct sockaddr generic; - } addr; + struct sockaddr_un addr; socklen_t alen; int n; int err; - err = socket_make_sockaddr_un(name, namespaceId, &addr.un, &alen); + err = socket_make_sockaddr_un(name, namespaceId, &addr, &alen); if (err < 0) { return -1; @@ -74,13 +71,13 @@ int socket_local_server_bind(int s, const char *name, int namespaceId) || namespaceId == ANDROID_SOCKET_NAMESPACE_FILESYSTEM) { #endif /*ignore ENOENT*/ - unlink(addr.un.sun_path); + unlink(addr.sun_path); } n = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)); - if(bind(s, &addr.generic, alen) < 0) { + if(bind(s, (struct sockaddr *) &addr, alen) < 0) { return -1; } diff --git a/libcutils/socket_loopback_client.c b/libcutils/socket_loopback_client.c index f7c749c5..cb82c5ed 100644 --- a/libcutils/socket_loopback_client.c +++ b/libcutils/socket_loopback_client.c @@ -36,22 +36,19 @@ */ int socket_loopback_client(int port, int type) { - union { - struct sockaddr_in in; - struct sockaddr generic; - } addr; + struct sockaddr_in addr; socklen_t alen; int s; - memset(&addr.in, 0, sizeof(addr.in)); - addr.in.sin_family = AF_INET; - addr.in.sin_port = htons(port); - addr.in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); s = socket(AF_INET, type, 0); if(s < 0) return -1; - if(connect(s, &addr.generic, sizeof(addr.in)) < 0) { + if(connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { close(s); return -1; } diff --git a/libcutils/socket_loopback_server.c b/libcutils/socket_loopback_server.c index bed6f94b..3208488a 100644 --- a/libcutils/socket_loopback_server.c +++ b/libcutils/socket_loopback_server.c @@ -35,17 +35,14 @@ /* open listen() port on loopback interface */ int socket_loopback_server(int port, int type) { - union { - struct sockaddr_in in; - struct sockaddr generic; - } addr; + struct sockaddr_in addr; size_t alen; int s, n; - memset(&addr.in, 0, sizeof(addr.in)); - addr.in.sin_family = AF_INET; - addr.in.sin_port = htons(port); - addr.in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); s = socket(AF_INET, type, 0); if(s < 0) return -1; @@ -53,7 +50,7 @@ int socket_loopback_server(int port, int type) n = 1; setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)); - if(bind(s, &addr.generic, sizeof(addr.in)) < 0) { + if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { close(s); return -1; } diff --git a/libcutils/socket_network_client.c b/libcutils/socket_network_client.c index 37e1c6cc..a64006cd 100644 --- a/libcutils/socket_network_client.c +++ b/libcutils/socket_network_client.c @@ -39,25 +39,22 @@ int socket_network_client(const char *host, int port, int type) { struct hostent *hp; - union { - struct sockaddr_in in; - struct sockaddr generic; - } addr; + struct sockaddr_in addr; socklen_t alen; int s; hp = gethostbyname(host); if(hp == 0) return -1; - memset(&addr.in, 0, sizeof(addr.in)); - addr.in.sin_family = hp->h_addrtype; - addr.in.sin_port = htons(port); - memcpy(&addr.in.sin_addr, hp->h_addr, hp->h_length); + memset(&addr, 0, sizeof(addr)); + addr.sin_family = hp->h_addrtype; + addr.sin_port = htons(port); + memcpy(&addr.sin_addr, hp->h_addr, hp->h_length); s = socket(hp->h_addrtype, type, 0); if(s < 0) return -1; - if(connect(s, &addr.generic, sizeof(addr.in)) < 0) { + if(connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { close(s); return -1; } diff --git a/libcutils/uevent.c b/libcutils/uevent.c index 42d9d901..97a81e30 100644 --- a/libcutils/uevent.c +++ b/libcutils/uevent.c @@ -95,17 +95,14 @@ out: int uevent_open_socket(int buf_sz, bool passcred) { - union { - struct sockaddr_nl nl; - struct sockaddr generic; - } addr; + struct sockaddr_nl addr; int on = passcred; int s; - memset(&addr.nl, 0, sizeof(addr.nl)); - addr.nl.nl_family = AF_NETLINK; - addr.nl.nl_pid = getpid(); - addr.nl.nl_groups = 0xffffffff; + memset(&addr, 0, sizeof(addr)); + addr.nl_family = AF_NETLINK; + addr.nl_pid = getpid(); + addr.nl_groups = 0xffffffff; s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); if(s < 0) @@ -114,7 +111,7 @@ int uevent_open_socket(int buf_sz, bool passcred) setsockopt(s, SOL_SOCKET, SO_RCVBUFFORCE, &buf_sz, sizeof(buf_sz)); setsockopt(s, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); - if(bind(s, &addr.generic, sizeof(addr.nl)) < 0) { + if(bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { close(s); return -1; } diff --git a/libnetutils/ifc_utils.c b/libnetutils/ifc_utils.c index ca7d6b22..240b5f30 100644 --- a/libnetutils/ifc_utils.c +++ b/libnetutils/ifc_utils.c @@ -248,11 +248,7 @@ int ifc_set_addr(const char *name, in_addr_t addr) int ifc_act_on_address(int action, const char *name, const char *address, int prefixlen) { int ifindex, s, len, ret; - union { - struct sockaddr_storage ss; - struct sockaddr_in sin; - struct sockaddr_in6 sin6; - } sa; + struct sockaddr_storage ss; void *addr; size_t addrlen; struct { @@ -264,13 +260,11 @@ int ifc_act_on_address(int action, const char *name, const char *address, NLMSG_ALIGN(INET6_ADDRLEN)]; } req; struct rtattr *rta; + struct nlmsghdr *nh; struct nlmsgerr *err; - union { - struct nlmsghdr nh; - char buf[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + - NLMSG_ALIGN(sizeof(struct nlmsgerr)) + - NLMSG_ALIGN(sizeof(struct nlmsghdr))]; - } buf; + char buf[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + + NLMSG_ALIGN(sizeof(struct nlmsgerr)) + + NLMSG_ALIGN(sizeof(struct nlmsghdr))]; // Get interface ID. ifindex = if_nametoindex(name); @@ -279,17 +273,19 @@ int ifc_act_on_address(int action, const char *name, const char *address, } // Convert string representation to sockaddr_storage. - ret = string_to_ip(address, &sa.ss); + ret = string_to_ip(address, &ss); if (ret) { return ret; } // Determine address type and length. - if (sa.ss.ss_family == AF_INET) { - addr = &sa.sin.sin_addr; + if (ss.ss_family == AF_INET) { + struct sockaddr_in *sin = (struct sockaddr_in *) &ss; + addr = &sin->sin_addr; addrlen = INET_ADDRLEN; - } else if (sa.ss.ss_family == AF_INET6) { - addr = &sa.sin6.sin6_addr; + } else if (ss.ss_family == AF_INET6) { + struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &ss; + addr = &sin6->sin6_addr; addrlen = INET6_ADDRLEN; } else { return -EAFNOSUPPORT; @@ -305,7 +301,7 @@ int ifc_act_on_address(int action, const char *name, const char *address, req.n.nlmsg_pid = getpid(); // Interface address message header. - req.r.ifa_family = sa.ss.ss_family; + req.r.ifa_family = ss.ss_family; req.r.ifa_prefixlen = prefixlen; req.r.ifa_index = ifindex; @@ -322,17 +318,18 @@ int ifc_act_on_address(int action, const char *name, const char *address, return -errno; } - len = recv(s, buf.buf, sizeof(buf.buf), 0); + len = recv(s, buf, sizeof(buf), 0); close(s); if (len < 0) { return -errno; } // Parse the acknowledgement to find the return code. - if (!NLMSG_OK(&buf.nh, (unsigned) len) || buf.nh.nlmsg_type != NLMSG_ERROR) { + nh = (struct nlmsghdr *) buf; + if (!NLMSG_OK(nh, (unsigned) len) || nh->nlmsg_type != NLMSG_ERROR) { return -EINVAL; } - err = NLMSG_DATA(&buf.nh); + err = NLMSG_DATA(nh); // Return code is negative errno. return err->error; @@ -466,10 +463,7 @@ int ifc_get_addr(const char *name, in_addr_t *addr) if (ret < 0) { *addr = 0; } else { - struct sockaddr_in in; - memcpy(&in, &ifr.ifr_addr, sizeof(ifr.ifr_addr)); - memcpy(&addr, &in.sin_addr.s_addr, sizeof(struct sockaddr_in)); - //*addr = ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr; + *addr = ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr; } } return ret; @@ -484,9 +478,7 @@ int ifc_get_info(const char *name, in_addr_t *addr, int *prefixLength, unsigned if(ioctl(ifc_ctl_sock, SIOCGIFADDR, &ifr) < 0) { *addr = 0; } else { - struct sockaddr_in in; - memcpy(&in, &ifr.ifr_addr, sizeof(in)); - *addr = in.sin_addr.s_addr; + *addr = ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr; } } @@ -494,10 +486,8 @@ int ifc_get_info(const char *name, in_addr_t *addr, int *prefixLength, unsigned if(ioctl(ifc_ctl_sock, SIOCGIFNETMASK, &ifr) < 0) { *prefixLength = 0; } else { - struct sockaddr_in in; - memcpy(&in, &ifr.ifr_addr, sizeof(in)); *prefixLength = ipv4NetmaskToPrefixLength((int) - in.sin_addr.s_addr); + ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr); } } diff --git a/libnetutils/packet.c b/libnetutils/packet.c index 36a11ba2..be4e0db4 100644 --- a/libnetutils/packet.c +++ b/libnetutils/packet.c @@ -42,23 +42,20 @@ int fatal(); int open_raw_socket(const char *ifname __attribute__((unused)), uint8_t *hwaddr, int if_index) { int s, flag; - union { - struct sockaddr_ll ll; - struct sockaddr generic; - } bindaddr; + struct sockaddr_ll bindaddr; if((s = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) < 0) { return fatal("socket(PF_PACKET)"); } memset(&bindaddr, 0, sizeof(bindaddr)); - bindaddr.ll.sll_family = AF_PACKET; - bindaddr.ll.sll_protocol = htons(ETH_P_IP); - bindaddr.ll.sll_halen = ETH_ALEN; - memcpy(bindaddr.ll.sll_addr, hwaddr, ETH_ALEN); - bindaddr.ll.sll_ifindex = if_index; + bindaddr.sll_family = AF_PACKET; + bindaddr.sll_protocol = htons(ETH_P_IP); + bindaddr.sll_halen = ETH_ALEN; + memcpy(bindaddr.sll_addr, hwaddr, ETH_ALEN); + bindaddr.sll_ifindex = if_index; - if (bind(s, &bindaddr.generic, sizeof(bindaddr.ll)) < 0) { + if (bind(s, (struct sockaddr *)&bindaddr, sizeof(bindaddr)) < 0) { return fatal("Cannot bind raw socket to interface"); } diff --git a/logcat/logcat.cpp b/logcat/logcat.cpp index 8938e3a0..f9c77eaf 100644 --- a/logcat/logcat.cpp +++ b/logcat/logcat.cpp @@ -669,14 +669,14 @@ int main(int argc, char **argv) } if (!devices) { - devices = new log_device_t(strdup("/dev/" LOGGER_LOG_MAIN), false, 'm'); + devices = new log_device_t(strdup("/dev/"LOGGER_LOG_MAIN), false, 'm'); android::g_devCount = 1; int accessmode = (mode & O_RDONLY) ? R_OK : 0 | (mode & O_WRONLY) ? W_OK : 0; // only add this if it's available - if (0 == access("/dev/" LOGGER_LOG_SYSTEM, accessmode)) { - devices->next = new log_device_t(strdup("/dev/" LOGGER_LOG_SYSTEM), false, 's'); + if (0 == access("/dev/"LOGGER_LOG_SYSTEM, accessmode)) { + devices->next = new log_device_t(strdup("/dev/"LOGGER_LOG_SYSTEM), false, 's'); android::g_devCount++; } } |
