mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-28 12:05:47 +08:00
Cygwin: AF_UNIX: convert AF_UNIX_PKT helpers to inline functions
Add AF_UNIX_PKT_DATA_END and AF_UNIX_PKT_DATA_APPEND
This commit is contained in:
parent
973af68fff
commit
0eaa7b8144
@ -106,31 +106,63 @@ class af_unix_pkt_hdr_t
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define AF_UNIX_PKT_OFFSETOF_NAME(phdr) \
|
#define MAX_AF_UN_PKT_LEN UINT16_MAX
|
||||||
(sizeof (af_unix_pkt_hdr_t))
|
|
||||||
#define AF_UNIX_PKT_OFFSETOF_CMSG(phdr) \
|
static inline ptrdiff_t
|
||||||
(sizeof (af_unix_pkt_hdr_t) + (phdr)->name_len)
|
AF_UNIX_PKT_OFFSETOF_NAME (af_unix_pkt_hdr_t *phdr)
|
||||||
#define AF_UNIX_PKT_OFFSETOF_DATA(phdr) \
|
{
|
||||||
({ \
|
return sizeof (af_unix_pkt_hdr_t);
|
||||||
af_unix_pkt_hdr_t *_p = phdr; \
|
}
|
||||||
sizeof (af_unix_pkt_hdr_t) + (_p)->name_len + (_p)->cmsg_len; \
|
|
||||||
})
|
static inline ptrdiff_t
|
||||||
#define AF_UNIX_PKT_NAME(phdr) \
|
AF_UNIX_PKT_OFFSETOF_CMSG (af_unix_pkt_hdr_t *phdr)
|
||||||
({ \
|
{
|
||||||
af_unix_pkt_hdr_t *_p = phdr; \
|
return AF_UNIX_PKT_OFFSETOF_NAME (phdr) + phdr->name_len;
|
||||||
(struct sockaddr_un *)(((PBYTE)(_p)) \
|
}
|
||||||
+ AF_UNIX_PKT_OFFSETOF_NAME (_p)); \
|
|
||||||
})
|
static inline ptrdiff_t
|
||||||
#define AF_UNIX_PKT_CMSG(phdr) \
|
AF_UNIX_PKT_OFFSETOF_DATA (af_unix_pkt_hdr_t *phdr)
|
||||||
({ \
|
{
|
||||||
af_unix_pkt_hdr_t *_p = phdr; \
|
return AF_UNIX_PKT_OFFSETOF_CMSG (phdr) + phdr->cmsg_len;
|
||||||
(struct cmsghdr *)(((PBYTE)(_p)) + AF_UNIX_PKT_OFFSETOF_CMSG (_p)); \
|
}
|
||||||
})
|
|
||||||
#define AF_UNIX_PKT_DATA(phdr) \
|
static inline struct sockaddr_un *
|
||||||
({ \
|
AF_UNIX_PKT_NAME (af_unix_pkt_hdr_t *phdr)
|
||||||
af_unix_pkt_hdr_t _p = phdr; \
|
{
|
||||||
(void *)(((PBYTE)(_p)) + AF_UNIX_PKT_OFFSETOF_DATA (_p)); \
|
return (struct sockaddr_un *)
|
||||||
})
|
((PBYTE)(phdr) + AF_UNIX_PKT_OFFSETOF_NAME (phdr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct cmsghdr *
|
||||||
|
AF_UNIX_PKT_CMSG (af_unix_pkt_hdr_t *phdr)
|
||||||
|
{
|
||||||
|
return (struct cmsghdr *)
|
||||||
|
((PBYTE)(phdr) + AF_UNIX_PKT_OFFSETOF_CMSG (phdr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
AF_UNIX_PKT_DATA (af_unix_pkt_hdr_t *phdr)
|
||||||
|
{
|
||||||
|
return (void *) ((PBYTE)(phdr) + AF_UNIX_PKT_OFFSETOF_DATA (phdr));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void *
|
||||||
|
AF_UNIX_PKT_DATA_END (af_unix_pkt_hdr_t *phdr)
|
||||||
|
{
|
||||||
|
return (void *) ((PBYTE)(phdr) + AF_UNIX_PKT_OFFSETOF_DATA (phdr)
|
||||||
|
+ (phdr)->data_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool
|
||||||
|
AF_UNIX_PKT_DATA_APPEND (af_unix_pkt_hdr_t *phdr, void *data, uint16_t dlen)
|
||||||
|
{
|
||||||
|
if ((uint32_t) phdr->pckt_len + (uint32_t) dlen > MAX_AF_UN_PKT_LEN)
|
||||||
|
return false;
|
||||||
|
memcpy (AF_UNIX_PKT_DATA_END (phdr), data, dlen);
|
||||||
|
phdr->pckt_len += dlen;
|
||||||
|
phdr->data_len += dlen;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Some error conditions on pipes have multiple status codes, unfortunately. */
|
/* Some error conditions on pipes have multiple status codes, unfortunately. */
|
||||||
#define STATUS_PIPE_NO_INSTANCE_AVAILABLE(status) \
|
#define STATUS_PIPE_NO_INSTANCE_AVAILABLE(status) \
|
||||||
@ -139,9 +171,10 @@ class af_unix_pkt_hdr_t
|
|||||||
|| _s == STATUS_PIPE_NOT_AVAILABLE \
|
|| _s == STATUS_PIPE_NOT_AVAILABLE \
|
||||||
|| _s == STATUS_PIPE_BUSY; })
|
|| _s == STATUS_PIPE_BUSY; })
|
||||||
|
|
||||||
#define STATUS_PIPE_IS_CLOSING(status) \
|
#define STATUS_PIPE_IS_CLOSED(status) \
|
||||||
({ NTSTATUS _s = (status); \
|
({ NTSTATUS _s = (status); \
|
||||||
_s == STATUS_PIPE_CLOSING \
|
_s == STATUS_PIPE_CLOSING \
|
||||||
|
|| _s == STATUS_PIPE_BROKEN \
|
||||||
|| _s == STATUS_PIPE_EMPTY; })
|
|| _s == STATUS_PIPE_EMPTY; })
|
||||||
|
|
||||||
#define STATUS_PIPE_INVALID(status) \
|
#define STATUS_PIPE_INVALID(status) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user