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 | ... | ... |