+
+void update_max_start_pad(int32_t *our_module_global, int32_t our_instance)
+{
+ if (*our_module_global < our_instance)
+ *our_module_global=our_instance;
+}
+
+int32_t transform_max_start_pad, comm_max_start_pad;
+
+int32_t calculate_max_start_pad(void)
+{
+ return
+ site_max_start_pad +
+ transform_max_start_pad +
+ comm_max_start_pad;
+}
+
+void vslilog_part(struct log_if *lf, int priority, const char *message, va_list ap)
+{
+ char *buff=lf->buff;
+ size_t bp;
+ char *nlp;
+
+ bp=strlen(buff);
+ assert(bp < LOG_MESSAGE_BUFLEN);
+ vsnprintf(buff+bp,LOG_MESSAGE_BUFLEN-bp,message,ap);
+ buff[LOG_MESSAGE_BUFLEN-1] = '\n';
+ buff[LOG_MESSAGE_BUFLEN] = '\0';
+ /* Each line is sent separately */
+ while ((nlp=strchr(buff,'\n'))) {
+ *nlp=0;
+ slilog(lf,priority,"%s",buff);
+ memmove(buff,nlp+1,strlen(nlp+1)+1);
+ }
+}
+
+extern void slilog_part(struct log_if *lf, int priority, const char *message, ...)
+{
+ va_list ap;
+ va_start(ap,message);
+ vslilog_part(lf,priority,message,ap);
+ va_end(ap);
+}
+
+#define IADDR_NBUFS_SHIFT 3
+#define IADDR_NBUFS (1 << IADDR_NBUFS_SHIFT)
+
+const char *iaddr_to_string(const union iaddr *ia)
+{
+ static char bufs[IADDR_NBUFS][100];
+ static int b;
+
+ b++;
+ b &= IADDR_NBUFS-1;
+
+ assert(ia->sa.sa_family == AF_INET);
+
+ snprintf(bufs[b], sizeof(bufs[b]), "[%s]:%d",
+ inet_ntoa(ia->sin.sin_addr),
+ ntohs(ia->sin.sin_port));
+ return bufs[b];
+}
+
+bool_t iaddr_equal(const union iaddr *ia, const union iaddr *ib)
+{
+ if (ia->sa.sa_family != ib->sa.sa_family)
+ return 0;
+ switch (ia->sa.sa_family) {
+ case AF_INET:
+ return ia->sin.sin_addr.s_addr == ib->sin.sin_addr.s_addr
+ && ia->sin.sin_port == ib->sin.sin_port;
+ default:
+ abort();
+ }
+}
+
+int iaddr_socklen(const union iaddr *ia)
+{
+ switch (ia->sa.sa_family) {
+ case AF_INET: return sizeof(ia->sin);
+ default: abort();
+ }
+}