3 #define UNIXSOCK_PATH_MAX (sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path))
5 void Socket_UnixSock_toAddr (NullString8_t path
, C_Size_t pathlen
, Array(Word8_t
) addr
, Ref(C_Socklen_t
) addrlen
) {
7 struct sockaddr_un
*sa
= (struct sockaddr_un
*)addr
;
9 sa
->sun_family
= AF_UNIX
;
10 if (pathlen
<= UNIXSOCK_PATH_MAX
) {
11 for (i
= 0; i
< pathlen
; i
++) {
12 sa
->sun_path
[i
] = ((const char*)path
)[i
];
15 for (i
= 0; i
< UNIXSOCK_PATH_MAX
-1; i
++) {
16 sa
->sun_path
[i
] = ((const char*)path
)[i
];
18 sa
->sun_path
[UNIXSOCK_PATH_MAX
-1] = '\000';
20 *((socklen_t
*)addrlen
) = sizeof(struct sockaddr_un
);
23 C_Size_t
Socket_UnixSock_pathLen (Vector(Word8_t
) addr
) {
25 const struct sockaddr_un
*sa
= (const struct sockaddr_un
*)addr
;
28 if (sa
->sun_path
[i
] == '\000') {
29 return UNIXSOCK_PATH_MAX
;
31 while (i
< UNIXSOCK_PATH_MAX
&& sa
->sun_path
[i
] != '\000') i
++;
36 void Socket_UnixSock_fromAddr (Vector(Word8_t
) addr
, Array(Char8_t
) path
, C_Size_t pathlen
) {
38 const struct sockaddr_un
*sa
= (const struct sockaddr_un
*)addr
;
40 assert (sa
->sun_family
== AF_UNIX
);
41 for (i
= 0; i
< pathlen
; i
++) {
42 ((char*)path
)[i
] = sa
->sun_path
[i
];
46 #undef UNIXSOCK_PATH_MAX