commit 0c9c620f39e56c42802504003fd05664aba670a4 from: Russ Cox date: Wed Mar 10 22:50:33 2010 UTC fix type-punned pointer warnings from gcc R=rsc http://codereview.appspot.com/396042 commit - 2fe14f1315eb8d3235ea8f978e5bd9444f467c2b commit + 0c9c620f39e56c42802504003fd05664aba670a4 blob - 2330c43060052ee56cfcca88c014cd36a38b453c blob + 61d5951e26a0dd26094713835caf0f6ed74e49cc --- src/cmd/acid/expr.c +++ src/cmd/acid/expr.c @@ -855,11 +855,12 @@ ocand(Node *n, Node *res) { Node l, r; - res->store.fmt = l.store.fmt; + res->store.fmt = 'D'; res->op = OCONST; res->type = TINT; res->store.u.ival = 0; expr(n->left, &l); + res->store.fmt = l.store.fmt; if(bool(&l) == 0) return; expr(n->right, &r); blob - 08068e61ed7c39316e2218a86c3b2a25cc3d7431 blob + 7a93bc5ff515fe3443eba3fc9bd06235aab38acc --- src/cmd/db/format.c +++ src/cmd/db/format.c @@ -60,7 +60,7 @@ exform(int fcount, int prt, char *ifp, Map *map, int l char *fp; char c, modifier; int i; - ushort sh, *sp; + ushort sh; uchar ch, *cp; Symbol s; char buf[512]; @@ -205,7 +205,8 @@ exform(int fcount, int prt, char *ifp, Map *map, int l case 'R': if (literal) { - sp = (u16int*)(void*)˙ + u16int sp[2]; + memmove(&sp, &dot, 4); dprint("%C%C", sp[0], sp[1]); endline(); dotinc = 4; blob - cb9fdbf5673a68a1043575f51fda71410906c220 blob + d4319c8651704ed88eb8cb37ed18bde10191bec5 --- src/cmd/vbackup/vnfs.c +++ src/cmd/vbackup/vnfs.c @@ -322,10 +322,14 @@ cryptinit(void) { uchar key[32], ivec[AESbsize]; int i; + u32int u32; - *(u32int*)sessid = truerand(); - for(i=0; iread){ attr->type = Nfs3FileReg; @@ -805,7 +811,8 @@ cnodegetattr(Cnode *n, Nfs3Attr *attr) attr->size = 1024; attr->nlink = 10; } - attr->fileid = *(u64int*)n->handle; + memmove(&u64, n->handle, 8); + attr->fileid = u64; attr->atime.sec = n->mtime; attr->mtime.sec = n->mtime; attr->ctime.sec = n->mtime; @@ -817,6 +824,7 @@ cnodereaddir(Cnode *n, u32int count, u64int cookie, uc { uchar *data, *p, *ep, *np; u64int c; + u64int u64; Nfs3Entry ne; n = n->kidlist; @@ -842,7 +850,8 @@ cnodereaddir(Cnode *n, u32int count, u64int cookie, uc ne.name = n->name; ne.namelen = strlen(n->name); ne.cookie = ++cookie; - ne.fileid = *(u64int*)n->handle; + memmove(&u64, n->handle, 8); + ne.fileid = u64; if(nfs3entrypack(p, ep, &np, &ne) < 0) break; p = np; blob - b7f5385ab019159557032b0fce3b967529afa34a blob + 0c84ecdb287689aeebbbda85581cb7547b721b7c --- src/lib9/_p9dialparse.c +++ src/lib9/_p9dialparse.c @@ -71,7 +71,7 @@ parseip(char *host, u32int *pip) return -1; break; } - *pip = *(u32int*)addr; + memmove(pip, addr, 4); return 0; } blob - 109668289ce9668214fa28474283121e4409b1d5 blob + b5e332ca64560549ae486f9d76ce11a35cc3eda5 --- src/lib9/sendfd.c +++ src/lib9/sendfd.c @@ -46,7 +46,7 @@ sendfd(int s, int fd) cmsg->cmsg_len = CMSG_LEN(sizeof(int)); cmsg->cmsg_level = SOL_SOCKET; cmsg->cmsg_type = SCM_RIGHTS; - *(int*)CMSG_DATA(cmsg) = fd; + memmove(CMSG_DATA(cmsg), &fd, sizeof(int)); if((n=sendmsg(s, &msg, 0)) != iov.iov_len) return -1; blob - 03f3dce19f74882b00904568e9906573cd362cee blob + 45f739e14a0468d791ebc560db7c42ba1d6df989 --- src/lib9/truerand.c +++ src/lib9/truerand.c @@ -6,6 +6,7 @@ truerand(void) { int i, n; uchar buf[sizeof(ulong)]; + ulong x; static int randfd = -1; static char *randfile; @@ -21,5 +22,6 @@ truerand(void) for(i=0; imachkey, DESKEYLEN, safe->machsum, "bad nvram key"); @@ -163,7 +161,7 @@ readnvram(Nvrsafe *safep, int flag) safe->configsum = nvcsum(safe->config, CONFIGLEN); safe->authidsum = nvcsum(safe->authid, sizeof(safe->authid)); safe->authdomsum = nvcsum(safe->authdom, sizeof(safe->authdom)); - *(Nvrsafe*)buf = *safe; + memmove(buf, safe, sizeof *safe); if(seek(fd, safeoff, 0) < 0 || write(fd, buf, safelen) != safelen){ fprint(2, "can't write key to nvram: %r\n"); blob - 2567c98dddde2166f41adf8d71071d1df0d07602 blob + b2c2f7d9cdddeed6d99699ba0cc7096242c4ab26 --- src/libavl/avl.c +++ src/libavl/avl.c @@ -211,6 +211,7 @@ _deleteavl(Avl **tp, Avl *p, Avl *rx, int(*cmp)(Avl*,A return -(ob != 0 && (*tp)->bal == 0); } +/* static void checkparents(Avl *a, Avl *p) { @@ -221,6 +222,7 @@ checkparents(Avl *a, Avl *p) checkparents(a->n[0], a); checkparents(a->n[1], a); } +*/ struct Avltree { @@ -403,6 +405,7 @@ endwalk(Avlwalk *w) free(w); } +/* static void walkavl(Avl *t, void (*f)(Avl*, void*), void *v) { @@ -412,3 +415,4 @@ walkavl(Avl *t, void (*f)(Avl*, void*), void *v) f(t, v); walkavl(t->n[1], f, v); } +*/ blob - 042aa7e9c9f9dac24aba4324ec390cc223c21b3f blob + f318c4c3ddbdcde7a72a0d6e97a044ebed3ac560 --- src/libip/udp.c +++ src/libip/udp.c @@ -21,8 +21,8 @@ udpread(int fd, Udphdr *hdr, void *buf, long n) } memset(hdr, 0, sizeof *hdr); memmove(hdr->laddr, v4prefix, IPaddrlen); - *(u32int*)(hdr->laddr+12) = *(u32int*)&sin.sin_addr; - *(u16int*)hdr->lport = *(u16int*)&sin.sin_port; + memmove(hdr->laddr+12, &sin.sin_addr, sizeof(u32int)); + memmove(hdr->lport, &sin.sin_port, sizeof(u16int)); len = sizeof sin; n = recvfrom(fd, buf, n, 0, (struct sockaddr*)&sin, &len); @@ -33,8 +33,8 @@ udpread(int fd, Udphdr *hdr, void *buf, long n) return -1; } memmove(hdr->raddr, v4prefix, IPaddrlen); - *(u32int*)(hdr->raddr+12) = *(u32int*)&sin.sin_addr; - *(u16int*)hdr->rport = *(u16int*)&sin.sin_port; + memmove(hdr->raddr+12, &sin.sin_addr, sizeof(u32int)); + memmove(hdr->rport, &sin.sin_port, sizeof(u16int)); return n; } blob - eb01a6e64b00ac20ac8b55389d219baa56622863 blob + 2a06f6a1f75d17cc82fc7a3461644b56123e6850 --- src/libmach/Linux.c +++ src/libmach/Linux.c @@ -146,7 +146,7 @@ ptracerw(int type, int xtype, int isr, int pid, ulong if(n-i >= 4) *(u32int*)((char*)v+i) = u; else{ - *(u32int*)buf = u; + memmove(buf, &u, 4); memmove((char*)v+i, buf, n-i); } }else{ @@ -157,9 +157,9 @@ ptracerw(int type, int xtype, int isr, int pid, ulong u = ptrace(xtype, pid, addr+i, 0); if(errno) return -1; - *(u32int*)buf = u; + memmove(buf, &u, 4); memmove(buf, (char*)v+i, n-i); - u = *(u32int*)buf; + memmove(&u, buf, 4); } if(ptrace(type, pid, addr+i, u) < 0) goto ptraceerr; blob - 7616997b056bfcf2be6b032b02fff8bfaa9db86f blob + 4b9885863575f2914df65bb6a3fb93521016f799 --- src/libmemdraw/draw.c +++ src/libmemdraw/draw.c @@ -2109,6 +2109,7 @@ memoptdraw(Memdrawparam *par) { int m, y, dy, dx, op; u32int v; + u16int u16; Memimage *src; Memimage *dst; @@ -2198,7 +2199,8 @@ DBG print("dp %p v %lux lm %ux (v ^ *dp) & lm %lux\n", case 16: p[0] = v; /* make little endian */ p[1] = v>>8; - v = *(ushort*)p; + memmove(&u16, p, 2); + v = u16; DBG print("dp=%p; dx=%d; for(y=0; y<%d; y++, dp+=%d)\nmemsets(dp, v, dx);\n", dp, dx, dy, dwid); for(y=0; y>8; p[2] = v>>16; p[3] = v>>24; - v = *(u32int*)p; + memmove(&v, p, 4); for(y=0; ymask->flags, par->mask->depth, par->src->flags, @@ -2443,8 +2452,10 @@ DBG print("bits %lux sh %d...", bits, i); } break; case 16: - ws = (ushort*)wp; - v = *(ushort*)sp; + gcc_black_box.u8 = wp; + ws = gcc_black_box.u16; + gcc_black_box.u8 = sp; + v = *gcc_black_box.u16; for(x=bx; x>ex; x--, ws++){ i = x&7; if(i == 8-1) @@ -2469,8 +2480,10 @@ DBG print("bits %lux sh %d...", bits, i); } break; case 32: - wl = (u32int*)wp; - v = *(u32int*)sp; + gcc_black_box.u8 = wp; + wl = gcc_black_box.u32; + gcc_black_box.u8 = sp; + v = *gcc_black_box.u32; for(x=bx; x>ex; x--, wl++){ i = x&7; if(i == 8-1) @@ -2537,7 +2550,7 @@ _memfillcolor(Memimage *i, u32int val) p[1] = bits>>8; p[2] = bits>>16; p[3] = bits>>24; - bits = *(u32int*)p; + memmove(&bits, p, 4); memsetl(wordaddr(i, i->r.min), bits, i->width*Dy(i->r)); break; }