FreeCalypso > hg > themwi-system-sw
comparison libutil/sockinit.c @ 1:dbc0a8677b69
libutil: import from ThemWi1
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 25 Jun 2022 18:33:29 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:0e907d59d815 | 1:dbc0a8677b69 |
---|---|
1 /* | |
2 * This library module implements a function that helps initialize | |
3 * sockaddr for bind or connect operations on UNIX domain sockets. | |
4 * | |
5 * Back when I programmed under 4.3BSD UNIX, this operation was simple | |
6 * and straightforward - but under "modern" Unixes, it appears to be | |
7 * a complex affair, given the messy code (originally copied from | |
8 * Osmocom) that appears in FreeCalypso host tools for the rvinterf | |
9 * local socket interface. Hence I am factoring that mess out into | |
10 * its own library function this time around. | |
11 */ | |
12 | |
13 #include <sys/types.h> | |
14 #include <sys/socket.h> | |
15 #include <sys/un.h> | |
16 #include <string.h> | |
17 #include <strings.h> | |
18 | |
19 void | |
20 fill_sockaddr_un(pathname, sunp, lenp) | |
21 char *pathname; | |
22 struct sockaddr_un *sunp; | |
23 unsigned *lenp; | |
24 { | |
25 /* local socket binding voodoo copied from osmocon */ | |
26 sunp->sun_family = AF_UNIX; | |
27 strncpy(sunp->sun_path, pathname, sizeof(sunp->sun_path)); | |
28 sunp->sun_path[sizeof(sunp->sun_path) - 1] = '\0'; | |
29 /* we use the same magic that X11 uses in Xtranssock.c for | |
30 * calculating the proper length of the sockaddr */ | |
31 #if defined(BSD44SOCKETS) || defined(__UNIXWARE__) | |
32 sunp->sun_len = strlen(sunp->sun_path); | |
33 #endif | |
34 #if defined(BSD44SOCKETS) || defined(SUN_LEN) | |
35 *lenp = SUN_LEN(sunp); | |
36 #else | |
37 *lenp = strlen(sunp->sun_path) + | |
38 offsetof(struct sockaddr_un, sun_path) + 1; | |
39 #endif | |
40 } |