FreeCalypso > hg > themwi-system-sw
changeset 1:dbc0a8677b69
libutil: import from ThemWi1
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 25 Jun 2022 18:33:29 -0800 |
parents | 0e907d59d815 |
children | b1c364729a93 |
files | .hgignore libutil/Makefile libutil/mncc_utils.c libutil/sockinit.c |
diffstat | 4 files changed, 74 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Sat Jun 25 18:33:29 2022 -0800 @@ -0,0 +1,3 @@ +syntax: regexp + +\.[oa]$
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libutil/Makefile Sat Jun 25 18:33:29 2022 -0800 @@ -0,0 +1,13 @@ +CC= gcc +CFLAGS= -O2 +OBJS= mncc_utils.o sockinit.o +LIB= libutil.a + +all: ${LIB} + +${LIB}: ${OBJS} + ar rcu $@ ${OBJS} + ranlib $@ + +clean: + rm -f *.[oa] errs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libutil/mncc_utils.c Sat Jun 25 18:33:29 2022 -0800 @@ -0,0 +1,18 @@ +/* simple utility functions for MNCC */ + +#include <sys/types.h> +#include <sys/socket.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include "../include/mncc.h" +#include "../include/gsm48_const.h" + +mncc_set_cause(msg, loc, val) + struct gsm_mncc *msg; +{ + msg->fields |= MNCC_F_CAUSE; + msg->cause.coding = GSM48_CAUSE_CODING_GSM; + msg->cause.location = loc; + msg->cause.value = val; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libutil/sockinit.c Sat Jun 25 18:33:29 2022 -0800 @@ -0,0 +1,40 @@ +/* + * This library module implements a function that helps initialize + * sockaddr for bind or connect operations on UNIX domain sockets. + * + * Back when I programmed under 4.3BSD UNIX, this operation was simple + * and straightforward - but under "modern" Unixes, it appears to be + * a complex affair, given the messy code (originally copied from + * Osmocom) that appears in FreeCalypso host tools for the rvinterf + * local socket interface. Hence I am factoring that mess out into + * its own library function this time around. + */ + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <string.h> +#include <strings.h> + +void +fill_sockaddr_un(pathname, sunp, lenp) + char *pathname; + struct sockaddr_un *sunp; + unsigned *lenp; +{ + /* local socket binding voodoo copied from osmocon */ + sunp->sun_family = AF_UNIX; + strncpy(sunp->sun_path, pathname, sizeof(sunp->sun_path)); + sunp->sun_path[sizeof(sunp->sun_path) - 1] = '\0'; + /* we use the same magic that X11 uses in Xtranssock.c for + * calculating the proper length of the sockaddr */ +#if defined(BSD44SOCKETS) || defined(__UNIXWARE__) + sunp->sun_len = strlen(sunp->sun_path); +#endif +#if defined(BSD44SOCKETS) || defined(SUN_LEN) + *lenp = SUN_LEN(sunp); +#else + *lenp = strlen(sunp->sun_path) + + offsetof(struct sockaddr_un, sun_path) + 1; +#endif +}