Commit 2b8bdefc3a35473e1d43c22e6201aad900dccad2
1 parent
7b717336
Sync __target_cmsg_nxthdr implementation with kernel header.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2894 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
7 additions
and
12 deletions
linux-user/syscall_defs.h
| ... | ... | @@ -176,19 +176,14 @@ struct target_cmsghdr { |
| 176 | 176 | static __inline__ struct target_cmsghdr * |
| 177 | 177 | __target_cmsg_nxthdr (struct target_msghdr *__mhdr, struct target_cmsghdr *__cmsg) |
| 178 | 178 | { |
| 179 | - if (tswapl(__cmsg->cmsg_len) < sizeof (struct target_cmsghdr)) | |
| 180 | - /* The kernel header does this so there may be a reason. */ | |
| 181 | - return 0; | |
| 182 | - | |
| 183 | - __cmsg = (struct target_cmsghdr *) ((unsigned char *) __cmsg | |
| 184 | - + TARGET_CMSG_ALIGN (tswapl(__cmsg->cmsg_len))); | |
| 185 | - if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) (unsigned long)tswapl(__mhdr->msg_control) | |
| 186 | - + tswapl(__mhdr->msg_controllen)) | |
| 187 | - || ((unsigned char *) __cmsg + TARGET_CMSG_ALIGN (tswapl(__cmsg->cmsg_len)) | |
| 188 | - > ((unsigned char *) (unsigned long) tswapl(__mhdr->msg_control) | |
| 189 | - + tswapl(__mhdr->msg_controllen)))) | |
| 179 | + struct target_cmsghdr *__ptr; | |
| 180 | + | |
| 181 | + __ptr = (struct target_cmsghdr *)((unsigned char *) __cmsg | |
| 182 | + + TARGET_CMSG_ALIGN (tswapl(__cmsg->cmsg_len))); | |
| 183 | + if ((unsigned long)((char *)(__ptr+1) - (char *)(size_t)tswapl(__mhdr->msg_control)) | |
| 184 | + > tswapl(__mhdr->msg_controllen)) | |
| 190 | 185 | /* No more entries. */ |
| 191 | - return 0; | |
| 186 | + return (struct target_cmsghdr *)0; | |
| 192 | 187 | return __cmsg; |
| 193 | 188 | } |
| 194 | 189 | ... | ... |