struct pvfs2_readdir_response_s *rd =
(struct pvfs2_readdir_response_s *) ptr;
char *buf = ptr;
- char **pptr = &buf;
readdir->token = rd->token;
readdir->pvfs_dirent_outcount = rd->pvfs_dirent_outcount;
GFP_KERNEL);
if (readdir->dirent_array == NULL)
return -ENOMEM;
- *pptr += offsetof(struct pvfs2_readdir_response_s, dirent_array);
+ buf += offsetof(struct pvfs2_readdir_response_s, dirent_array);
for (i = 0; i < readdir->pvfs_dirent_outcount; i++) {
- dec_string(pptr, &readdir->dirent_array[i].d_name,
- &readdir->dirent_array[i].d_length);
+ __u32 len = *(__u32 *)buf;
+ readdir->dirent_array[i].d_name = buf + 4;
+ buf += roundup8(4 + len + 1);
+ readdir->dirent_array[i].d_length = len;
readdir->dirent_array[i].khandle =
- *(struct pvfs2_khandle *) *pptr;
- *pptr += 16;
+ *(struct pvfs2_khandle *) buf;
+ buf += 16;
}
- return (unsigned long)*pptr - (unsigned long)ptr;
+ return buf - ptr;
}
static long readdir_handle_ctor(struct readdir_handle_s *rhandle, void *buf,
#define roundup8(x) (((x)+7) & ~7)
#endif
-/* strings; decoding just points into existing character data */
-#define enc_string(pptr, pbuf) do { \
- __u32 len = strlen(*pbuf); \
- *(__u32 *) *(pptr) = (len); \
- memcpy(*(pptr)+4, *pbuf, len+1); \
- *(pptr) += roundup8(4 + len + 1); \
-} while (0)
-
-#define dec_string(pptr, pbuf, plen) do { \
- __u32 len = (*(__u32 *) *(pptr)); \
- *pbuf = *(pptr) + 4; \
- *(pptr) += roundup8(4 + len + 1); \
- if (plen) \
- *plen = len;\
-} while (0)
-
struct read_write_x {
__s64 off;
__s64 len;