diff --git a/configure/CONFIG.CrossCommon b/configure/CONFIG.CrossCommon
index 167ba490f..2fa6460d7 100644
--- a/configure/CONFIG.CrossCommon
+++ b/configure/CONFIG.CrossCommon
@@ -3,9 +3,8 @@
# National Laboratory.
# Copyright (c) 2002 The Regents of the University of California, as
# Operator of Los Alamos National Laboratory.
-# EPICS BASE Versions 3.13.7
-# and higher are distributed subject to a Software License Agreement found
-# in file LICENSE that is included with this distribution.
+# EPICS BASE is distributed subject to a Software License Agreement found
+# in file LICENSE that is included with this distribution.
#*************************************************************************
# Cross compiler default definitions
@@ -27,6 +26,6 @@ CROSS_LDFLAGS = $(addprefix -L,$(GNU_TARGET_LIB_DIR))
CMPLR_PREFIX_CROSS=$(addsuffix -,$(GNU_TARGET))
CMPLR_PREFIX=$(CMPLR_PREFIX_$(BUILD_CLASS))
-# All cross builds use the gnu compiler
+# Cross builds usually use the gnu compiler
include $(CONFIG)/CONFIG.gnuCommon
diff --git a/configure/os/CONFIG.linux-x86.win32-x86-mingw b/configure/os/CONFIG.linux-x86.win32-x86-mingw
index 297030765..150f13864 100644
--- a/configure/os/CONFIG.linux-x86.win32-x86-mingw
+++ b/configure/os/CONFIG.linux-x86.win32-x86-mingw
@@ -20,5 +20,5 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
# Don't link with gcc library
GNU_LDLIBS_YES =
-# Link with winsock2
-OP_SYS_LDLIBS = -lws2_32
+# Link with system libraries
+OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm
diff --git a/configure/os/CONFIG.win32-x86-debug.Common b/configure/os/CONFIG.win32-x86-debug.Common
index 9a394bf59..602fb9038 100644
--- a/configure/os/CONFIG.win32-x86-debug.Common
+++ b/configure/os/CONFIG.win32-x86-debug.Common
@@ -1,7 +1,7 @@
# CONFIG.win32-x86-debug.Common
#
-# Definitions for win32-x86 debug with debug compiler flags
-# Sites may override these definitions in CONFIG_SITE.win32-x86-debug.Common
+# Definitions for win32-x86-debug host arch
+# Override these definitions in CONFIG_SITE.win32-x86-debug.Common
#-------------------------------------------------------
#Include definitions common to win32-x86 hosts
diff --git a/configure/os/CONFIG.win32-x86-debug.win32-x86-debug b/configure/os/CONFIG.win32-x86-debug.win32-x86-debug
index f568cd148..8ee66ff8f 100644
--- a/configure/os/CONFIG.win32-x86-debug.win32-x86-debug
+++ b/configure/os/CONFIG.win32-x86-debug.win32-x86-debug
@@ -1,9 +1,12 @@
# CONFIG.win32-x86-debug.win32-x86-debug
#
-# Definitions for win32-x86 debug compiler host - win32-x86 debug compiler target builds
-# Sites may override these definitions in CONFIG_SITE.win32-x86-debug.win32-x86-debug
+# Definitions for win32-x86-debug host - win32-x86-debug target build
+# Override these definitions in CONFIG_SITE.win32-x86-debug.win32-x86-debug
#-------------------------------------------------------
+#Include definitions common to win32-x86 builds
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
+-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
+# Override CONFIG_SITE settings:
HOST_OPT=NO
diff --git a/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw b/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
index 6efa5be8b..2a7827ccd 100644
--- a/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
+++ b/configure/os/CONFIG.win32-x86-mingw.win32-x86-mingw
@@ -31,5 +31,5 @@ LOADABLE_SHRLIB_LDFLAGS = -shared \
# Don't link with gcc library
GNU_LDLIBS_YES =
-# Link with winsock2
-OP_SYS_LDLIBS = -lws2_32
+# Link with system libraries
+OP_SYS_LDLIBS = -lws2_32 -ladvapi32 -luser32 -lkernel32 -lwinmm
diff --git a/configure/os/CONFIG.win32-x86-static.win32-x86-static b/configure/os/CONFIG.win32-x86-static.win32-x86-static
index 105c69698..da90f992a 100644
--- a/configure/os/CONFIG.win32-x86-static.win32-x86-static
+++ b/configure/os/CONFIG.win32-x86-static.win32-x86-static
@@ -1,10 +1,13 @@
# CONFIG.win32-x86-static.win32-x86.static
#
-# Definitions for win32-x86-static target archs when host arch is win32-x86-static
-# Sites may override these definitions in CONFIG_SITE.win32-x86-static.win32-x86-static
+# Definitions for win32-x86-static host - win32-x86-static target build
+# Override these definitions in CONFIG_SITE.win32-x86-static.win32-x86-static
#-------------------------------------------------------
+#Include definitions common to win32-x86 builds
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
+-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
+# Override CONFIG_SITE settings:
SHARED_LIBRARIES = NO
STATIC_BUILD = YES
diff --git a/configure/os/CONFIG.win32-x86.Common b/configure/os/CONFIG.win32-x86.Common
index 487615c04..be328cc19 100644
--- a/configure/os/CONFIG.win32-x86.Common
+++ b/configure/os/CONFIG.win32-x86.Common
@@ -1,7 +1,7 @@
# CONFIG.win32-x86.Common
#
# Definitions for win32-x86 host archs
-# Sites may override these definitions in CONFIG_SITE.win32-x86.Common
+# Override these definitions in CONFIG_SITE.win32-x86.Common
#-------------------------------------------------------
CP = $(PERL) -MExtUtils::Command -e cp
diff --git a/configure/os/CONFIG.win32-x86.win32-x86 b/configure/os/CONFIG.win32-x86.win32-x86
index f44d0a6f6..f9bb0b9cb 100644
--- a/configure/os/CONFIG.win32-x86.win32-x86
+++ b/configure/os/CONFIG.win32-x86.win32-x86
@@ -1,7 +1,7 @@
# CONFIG.win32-x86.win32-x86
#
-# Definitions for win32-x86 target archs when host arch is win32-x86
-# Sites may override these definitions in CONFIG_SITE.win32-x86.win32-x86
+# Definitions for win32-x86 host - win32-x86 target build
+# Override these definitions in CONFIG_SITE.win32-x86.win32-x86
#-------------------------------------------------------
# Win32 valid build types and include directory suffixes
@@ -22,16 +22,21 @@ ARCMD = lib -nologo -verbose -out:$@ $(LIB_OPT_LDFLAGS) $(LIBRARY_LD_OBJS)
# Configure OS vendor C compiler
CC = cl
-# Override CONFIG.gnuCommon for cross builds.
+# Override CONFIG.gnuCommon settings for cross builds.
GNU = NO
HDEPENDS_METHOD = MKMF
+# Compiler flags for C files (C++ is below)
+
#
-# -W use warning level N
-# (maximum (lint type) warnings at level 4)
-# -w44355 set "'this' used in the base initializer list" to be level 4
-WARN_CFLAGS_YES = -W3 -w44355
-WARN_CFLAGS_NO = -W1
+# -W display warnings at level d
+# -W4 is for maximum (lint type) warnings
+# -W3 is for production quality warnings
+# -W2 displays significant warnings
+# -W1 is the default and shows severe warnings only
+# -w Set warning C to be shown at level
+WARN_CFLAGS_YES = -W3
+WARN_CFLAGS_NO = -W1
#
# -Ox maximum optimizations
@@ -66,7 +71,7 @@ STATIC_CFLAGS_YES= -MT$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS)
STATIC_CFLAGS_NO= -MD$(VISC_CFLAGS_DEBUG) $(BUILD_DLL_CFLAGS) -DEPICS_CALL_DLL
# OS vendor c preprocessor
-CPP = cl -C -E
+CPP = cl -nologo -C -E
# Configure OS vendor C++ compiler
#
@@ -82,11 +87,15 @@ CCC = cl -EHsc -GR
CODE_CPPFLAGS += -nologo -D__STDC__=0
CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
+
+# Compiler flags for C++ files
+
#
# -W use warning level N
# (maximum lint level warnings at level 4)
# -w44355 set "'this' used in the base initializer list" to be level 4
-WARN_CXXFLAGS_YES = -W3 -w44355
+# -w44344 "behavior change: use of explicit template arguments results in ..."
+WARN_CXXFLAGS_YES = -W3 -w44355 -w44344
WARN_CXXFLAGS_NO = -W1
#
diff --git a/configure/os/CONFIG.win32-x86.win32-x86-debug b/configure/os/CONFIG.win32-x86.win32-x86-debug
index 17a2b0184..a71c9957a 100644
--- a/configure/os/CONFIG.win32-x86.win32-x86-debug
+++ b/configure/os/CONFIG.win32-x86.win32-x86-debug
@@ -1,17 +1,15 @@
# CONFIG.win32-x86.win32-x86-debug
#
# Definitions for win32-x86 host - win32-x86-debug target build
-# Sites may override these definitions in CONFIG_SITE.win32-x86.win32-x86-debug
+# Override these definitions in CONFIG_SITE.win32-x86.win32-x86-debug
#-------------------------------------------------------
--include $(CONFIG)/os/CONFIG.Common.win32-x86
--include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
--include $(CONFIG)/os/CONFIG_SITE.Common.win32-x86
+#Include definitions common to win32-x86 builds
+include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
-GNU = NO
-
-HDEPENDS_METHOD = MKMF
+# Override CONFIG.CrossCommon settings:
BUILD_CLASS = HOST
+# Override CONFIG_SITE settings:
HOST_OPT = NO
diff --git a/configure/os/CONFIG.win32-x86.win32-x86-static b/configure/os/CONFIG.win32-x86.win32-x86-static
index d7513aa42..ae5313a5c 100644
--- a/configure/os/CONFIG.win32-x86.win32-x86-static
+++ b/configure/os/CONFIG.win32-x86.win32-x86-static
@@ -1,11 +1,16 @@
# CONFIG.win32-x86.win32-x86-static
#
-# Definitions for win32-x86-static target archs when host arch is win32-x86
-# Sites may override these definitions in CONFIG_SITE.win32-x86.win32-x86-static
+# Definitions for win32-x86 host - win32-x86-static target build
+# Override these definitions in CONFIG_SITE.win32-x86.win32-x86-static
#-------------------------------------------------------
+#Include definitions common to win32-x86 builds
include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
+-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
+# Override CONFIG.CrossCommon settings:
BUILD_CLASS = HOST
+
+# Override CONFIG_SITE settings:
SHARED_LIBRARIES = NO
STATIC_BUILD = YES
diff --git a/configure/os/CONFIG.win32-x86.windows-x64 b/configure/os/CONFIG.win32-x86.windows-x64
deleted file mode 100644
index 430570a95..000000000
--- a/configure/os/CONFIG.win32-x86.windows-x64
+++ /dev/null
@@ -1,15 +0,0 @@
-# CONFIG.win-x86.windows-x64
-#
-# Definitions for windows-x64 target archs when host arch is win32-x86
-# Sites may override these definitions in CONFIG_SITE.win32-x86.windows-x64
-#-------------------------------------------------------
-
--include $(CONFIG)/os/CONFIG.Common.win32-x86
--include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
-
-OPT_LDFLAGS += /MACHINE:X64
-
-# /MACHINE:X64
-# /MACHINE:IA64 (Itanium)
-# /MACHINE:X86
-
diff --git a/configure/os/CONFIG.windows-x64-debug.Common b/configure/os/CONFIG.windows-x64-debug.Common
index 5598ff4b5..ad433bc8f 100644
--- a/configure/os/CONFIG.windows-x64-debug.Common
+++ b/configure/os/CONFIG.windows-x64-debug.Common
@@ -1,7 +1,7 @@
# CONFIG.windows-x64-debug.Common
#
-# Definitions for windows-x64 debug with debug compiler flags
-# Sites may override these definitions in CONFIG_SITE.windows-x64-debug.Common
+# Definitions for windows-x64-debug host arch
+# Override these definitions in CONFIG_SITE.windows-x64-debug.Common
#-------------------------------------------------------
#Include definitions common to windows-x64 hosts
diff --git a/configure/os/CONFIG.windows-x64-static.Common b/configure/os/CONFIG.windows-x64-static.Common
index 05ec5528d..88bef64ff 100644
--- a/configure/os/CONFIG.windows-x64-static.Common
+++ b/configure/os/CONFIG.windows-x64-static.Common
@@ -1,8 +1,9 @@
# CONFIG.windows-x64-static.Common
#
# Definitions for windows-x64-static host archs
-# Sites may override these definitions in CONFIG_SITE.windows-x64-static.Common
+# Override these definitions in CONFIG_SITE.windows-x64-static.Common
#-------------------------------------------------------
+#Include definitions common to windows-x64 hosts
include $(CONFIG)/os/CONFIG.windows-x64.Common
diff --git a/configure/os/CONFIG.windows-x64-static.windows-x64-static b/configure/os/CONFIG.windows-x64-static.windows-x64-static
index fb33b8650..097e65558 100644
--- a/configure/os/CONFIG.windows-x64-static.windows-x64-static
+++ b/configure/os/CONFIG.windows-x64-static.windows-x64-static
@@ -1,10 +1,12 @@
# CONFIG.windows-x64-static.windows-x64-static
#
-# Definitions for windows-x64-static target archs when host arch is windows-x64-static
-# Sites may override these definitions in CONFIG_SITE.windows-x64-static.windows-x64-static
+# Definitions for windows-x64-static host - windows-x64-static target build
+# Override these definitions in CONFIG_SITE.windows-x64-static.windows-x64-static
#-------------------------------------------------------
+#Include definitions common to windows-x64 builds
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
+# Override CONFIG_SITE settings:
SHARED_LIBRARIES = NO
STATIC_BUILD= YES
diff --git a/configure/os/CONFIG.windows-x64.Common b/configure/os/CONFIG.windows-x64.Common
index 9415c9433..de2fa3f57 100644
--- a/configure/os/CONFIG.windows-x64.Common
+++ b/configure/os/CONFIG.windows-x64.Common
@@ -1,10 +1,9 @@
# CONFIG.windows-x64.Common
#
-# Definitions for windows-x64 host archs
-# Sites may override these definitions in CONFIG_SITE.windows-x64.Common
+# Definitions for windows-x64 host arch
+# Override these definitions in CONFIG_SITE.windows-x64.Common
#-------------------------------------------------------
--include $(CONFIG)/os/CONFIG.win32-x86.Common
-
-WIND_HOST_TYPE = x86-win32
+#Include definitions common to win32-x86 hosts
+include $(CONFIG)/os/CONFIG.win32-x86.Common
diff --git a/configure/os/CONFIG.windows-x64.windows-x64 b/configure/os/CONFIG.windows-x64.windows-x64
index 7ac6b1919..d0e59bd7c 100644
--- a/configure/os/CONFIG.windows-x64.windows-x64
+++ b/configure/os/CONFIG.windows-x64.windows-x64
@@ -1,13 +1,14 @@
# CONFIG.windows-x64.windows-x64
#
-# Definitions for windows-x64 target archs when host arch is windows-x64
-# Sites may override these definitions in CONFIG_SITE.windows-x64.windows-x64
+# Definitions for windows-x64 host - windows-x64 target build
+# Override these definitions in CONFIG_SITE.windows-x64.windows-x64
#-------------------------------------------------------
--include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
+#Include definitions common to win32-x86 builds
+include $(CONFIG)/os/CONFIG.win32-x86.win32-x86
+-include $(CONFIG)/os/CONFIG_SITE.win32-x86.win32-x86
OPT_LDFLAGS += /MACHINE:X64
-
# /MACHINE:X64
# /MACHINE:IA64 (Itanium)
# /MACHINE:X86
diff --git a/configure/os/CONFIG.windows-x64.windows-x64-debug b/configure/os/CONFIG.windows-x64.windows-x64-debug
index dc9162a82..8c97ac343 100644
--- a/configure/os/CONFIG.windows-x64.windows-x64-debug
+++ b/configure/os/CONFIG.windows-x64.windows-x64-debug
@@ -1,9 +1,14 @@
# CONFIG.windows-x64.windows-x64-debug
#
-# Definitions for windows-x64 compiler host - windows-x64 debug compiler target builds
-# Sites may override these definitions in CONFIG_SITE.windows-x64.windows-x64-debug
+# Definitions for windows-x64 host - windows-x64-debug target build
+# Override these definitions in CONFIG_SITE.windows-x64.windows-x64-debug
#-------------------------------------------------------
+#Include definitions common to windows-x64 builds
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
+# Override CONFIG.CrossCommon settings:
+BUILD_CLASS = HOST
+
+# Override CONFIG_SITE settings:
HOST_OPT=NO
diff --git a/configure/os/CONFIG.windows-x64.windows-x64-static b/configure/os/CONFIG.windows-x64.windows-x64-static
index 27387c351..49bf2e0f6 100644
--- a/configure/os/CONFIG.windows-x64.windows-x64-static
+++ b/configure/os/CONFIG.windows-x64.windows-x64-static
@@ -1,11 +1,15 @@
-# CONFIG.windows-x86.windows-x86-static
+# CONFIG.windows-x64.windows-x64-static
#
-# Definitions for windows-x64-static target archs when host arch is windows-x64
-# Sites may override these definitions in CONFIG_SITE.windows-x64.windows-x64-static
+# Definitions for windows-x64 host - windows-x64-static target build
+# Override these definitions in CONFIG_SITE.windows-x64.windows-x64-static
#-------------------------------------------------------
+#Include definitions common to windows-x64 builds
include $(CONFIG)/os/CONFIG.windows-x64.windows-x64
+# Override CONFIG.CrossCommon settings:
BUILD_CLASS = HOST
+
+# Override CONFIG_SITE settings:
SHARED_LIBRARIES = NO
STATIC_BUILD = YES
diff --git a/configure/os/CONFIG_SITE.darwinCommon.darwinCommon b/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
index edef3938a..297fd8e4f 100644
--- a/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
+++ b/configure/os/CONFIG_SITE.darwinCommon.darwinCommon
@@ -3,15 +3,21 @@
# Site specific definitions for darwin builds
#-------------------------------------------------------
-# Uncomment the following two definitions to enable the use of DarwinPorts packages.
-#
+# Note the dir/firstword/wildcard functions below are used
+# to avoid warnings about missing directories.
+
+# Mix-and-match of different package systems is probably not advisable,
+# but you can try that if you like...
+
+# Uncomment these definitions when using Homebrew packages:
+#OP_SYS_INCLUDES += -I/usr/local/include
+#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /usr/local/lib/*))))
+
+# Uncomment these definitions when using DarwinPorts packages:
#OP_SYS_INCLUDES += -I/opt/local/include
-# dir/firstword/wildcard used to avoid warning -L: directory name (...) does not exist
-#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /opt/local/lib/*))))
+#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /opt/local/lib/*))))
-# Uncomment the following two definitions to enable the use of Fink packages.
-#
+# Uncomment these definitions when using Fink packages:
#OP_SYS_INCLUDES += -I/sw/include
-# dir/firstword/wildcard used to avoid warning -L: directory name (...) does not exist
-#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /sw/lib/*))))
+#OP_SYS_LDFLAGS += $(addprefix -L,$(dir $(firstword $(wildcard /sw/lib/*))))
diff --git a/configure/os/CONFIG_SITE.win32-x86.win32-x86 b/configure/os/CONFIG_SITE.win32-x86.win32-x86
deleted file mode 100644
index 165480409..000000000
--- a/configure/os/CONFIG_SITE.win32-x86.win32-x86
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# If you have Visual C++ 6.0, uncomment the following override lines
-# This will to eliminate warnings about unknown options /GL, /LTCG, and /w44355.
-#OPT_CFLAGS_YES = /Ox
-#OPT_CXXFLAGS_YES = /Ox
-#OPT_CFLAGS_NO = /Zi
-#OPT_CXXFLAGS_NO = /Zi
-#LINK_OPT_FLAGS_YES = /incremental:no /opt:ref /release $(PROD_VERSION:%=/version:%)
-#WARN_CFLAGS_YES = /W3
-#WARN_CXXFLAGS_YES = /W3
-
-
-# If you have Visual C++ 8.0 or 8.0 express, uncomment the following override.
-# This will eliminate warnings about /GX being deprecated.
-#CCC = cl /nologo /EHsc /GR
-
diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html
index 982e6b998..585c41d50 100644
--- a/documentation/RELEASE_NOTES.html
+++ b/documentation/RELEASE_NOTES.html
@@ -15,12 +15,40 @@
Changes made on the 3.15 branch since 3.15.4
-
-Changes pulled from the 3.14 branch since 3.15.4
+Changes from the 3.14 branch since 3.15.4
+Microsoft Visual Studio builds
-Changes between 3.15.3 and 3.15.4
+The build configuration files for builds using the Microsoft compilers have
+been updated, although there should be no noticable difference at most sites.
+One extra compiler warning is now being suppressed for C++ code, C4344:
+behavior change: use of explicit template arguments results in ... which is
+gratuitous and was appearing frequently in builds of the EPICS V4 modules.
+
+Cross-builds of the windows-x64 target from a win32-x86 host have been
+removed as they don't actually work within the context of a single make
+run. Significant changes to the build configuration files would be necessary for
+these kinds of cross-builds to work properly, which could be done if someone
+needs them (email Andrew Johnson before working on this, and see
+
+this stack-overflow answer for a starting point).
+
+Bazaar keywords such as 'Revision-Id' removed
+
+In preparation for moving to git in place of the Bazaar revision control
+system we have removed all the keywords from the Base source code.
+
+Linux systemd service file for CA Repeater
+
+Building this version of Base on a Linux system creates a systemd service
+file suitable for starting the Channel Access Repeater under systemd. The file
+will be installed into the target bin directory, from where it can be copied
+into the appropriate systemd location and modified as necessary. Installation
+instructions are included as comments in the file.
+
+
+Changes made between 3.15.3 and 3.15.4
New string input device support "getenv"
@@ -125,21 +153,7 @@ dbQuietMacroWarnings=1 VxWorks
541119.
-Changes pulled from the 3.14 branch since 3.15.3
-
-
-Bazaar keywords such as 'Revision-Id' removed
-
-In preparation for moving to git in place of the Bazaar revision control
-system we have removed all the keywords from the Base source code.
-
-Linux systemd service file for CA Repeater
-
-Building this version of Base on a Linux system creates a systemd service
-file suitable for starting the Channel Access Repeater under systemd. The file
-will be installed into the target bin directory, from where it can be copied
-into the appropriate systemd location and modified as necessary. Installation
-instructions are included as comments in the file.
+Changes from the 3.14 branch between 3.15.3 and 3.15.4
NTP Time Provider adjusts to OS tick rate changes
@@ -256,7 +270,7 @@ program added. The original versions do not report DST status properly. Fixes
Launchpad bug 1528284.
-Changes between 3.15.2 and 3.15.3
+Changes made between 3.15.2 and 3.15.3
Make the NTP Time provider optional on VxWorks
@@ -297,7 +311,7 @@ code, and a structure definition for one of the original arguments to that
routine was defined in recGbl.h. Both of these have now been removed.
-Changes between 3.15.1 and 3.15.2
+Changes made between 3.15.1 and 3.15.2
Raised limit on link field length in database files
@@ -416,7 +430,7 @@ use a modified version of msi must provide support for both the -D and
their applications' CONFIG_SITE files to that updated executable.
-Changes between 3.15.0.2 and 3.15.1
+Changes made between 3.15.0.2 and 3.15.1
epicsStrnEscapedFromRaw() and epicsStrnRawFromEscaped()
@@ -480,7 +494,7 @@ in the context of the IOC's main thread, from either a static C++ constructor or
an EPICS registrar routine.
-Changes between 3.15.0.1 and 3.15.0.2
+Changes made between 3.15.0.1 and 3.15.0.2
New iocshLoad command
@@ -926,7 +940,7 @@ result of record processing (i.e. when read through the SELL link).
variables from Base, although they might get added to the Extensions build rules
for a while in case anyone still needs them.
-Changes between 3.14.x and 3.15.0.1
+Changes made between 3.14.x and 3.15.0.1
Application clean rules
diff --git a/src/ca/legacy/pcas/generic/casPVI.cc b/src/ca/legacy/pcas/generic/casPVI.cc
index e0c5c7dd4..50e5d27a7 100644
--- a/src/ca/legacy/pcas/generic/casPVI.cc
+++ b/src/ca/legacy/pcas/generic/casPVI.cc
@@ -223,8 +223,9 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
assert ( gdd_status == 0 );
//
- // preallocate the correct amount
+ // clear and preallocate the correct amount
//
+ this->enumStrTbl.clear ();
this->enumStrTbl.reserve ( count );
if ( resp.primitiveType() == aitEnumString ) {
@@ -262,6 +263,18 @@ void casPVI::updateEnumStringTableAsyncCompletion ( const gdd & resp )
void casPVI::postEvent ( const casEventMask & select, const gdd & event )
{
epicsGuard < epicsMutex > guard ( this->mutex );
+ // if this is a DBE_PROPERTY event for an enum type
+ // update the enum string table
+ if ( (select & this->pCAS->propertyEventMask()).eventsSelected() ) {
+ const gdd *menu = NULL;
+ if ( event.applicationType() == gddAppType_dbr_gr_enum )
+ menu = event.getDD( gddAppTypeIndex_dbr_gr_enum_enums );
+ else if ( event.applicationType() == gddAppType_dbr_ctrl_enum )
+ menu = event.getDD( gddAppTypeIndex_dbr_ctrl_enum_enums );
+ if ( menu )
+ updateEnumStringTableAsyncCompletion( *menu );
+ }
+
if ( this->nMonAttached ) {
// we are paying some significant locking overhead for
// these diagnostic counters
diff --git a/src/ioc/db/dbTest.c b/src/ioc/db/dbTest.c
index 3bfec0d44..97279de08 100644
--- a/src/ioc/db/dbTest.c
+++ b/src/ioc/db/dbTest.c
@@ -940,7 +940,9 @@ static void printBuffer(
}
else {
for (i = 0; i < no_elements; i+= MAXLINE - 5) {
- sprintf(pmsg, " \"%.*s\"", MAXLINE - 5, (char *)pbuffer + i);
+ int width = no_elements - i;
+ if (width > MAXLINE - 5) width = MAXLINE - 5;
+ sprintf(pmsg, " \"%.*s\"", width, (char *)pbuffer + i);
if (i + MAXLINE - 5 < no_elements) strcat(pmsg, " +");
dbpr_msgOut(pMsgBuff, tab_size);
}
diff --git a/src/libCom/osi/os/WIN32/osdNetIntf.c b/src/libCom/osi/os/WIN32/osdNetIntf.c
index 1126fb307..c69048502 100644
--- a/src/libCom/osi/os/WIN32/osdNetIntf.c
+++ b/src/libCom/osi/os/WIN32/osdNetIntf.c
@@ -3,16 +3,15 @@
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
-* EPICS BASE Versions 3.13.7
-* and higher are distributed subject to a Software License Agreement found
-* in file LICENSE that is included with this distribution.
+* EPICS BASE is distributed subject to a Software License Agreement found
+* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
- * WIN32 specific initialisation for bsd sockets,
- * based on Chris Timossi's base/src/ca/windows_depend.c,
+ * WIN32 specific initialisation for bsd sockets,
+ * based on Chris Timossi's base/src/ca/windows_depend.c,
* and also further additions by Kay Kasemir when this was in
- * dllmain.cc
+ * dllmain.cc
*
* 7-1-97 -joh-
*
@@ -45,74 +44,74 @@
*/
epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr ( SOCKET socket )
{
- static osiSockAddr addr;
- static char init;
- int status;
- INTERFACE_INFO *pIfinfo;
- INTERFACE_INFO *pIfinfoList;
- unsigned nelem;
- DWORD numifs;
- DWORD cbBytesReturned;
+ static osiSockAddr addr;
+ static char init;
+ int status;
+ INTERFACE_INFO *pIfinfo;
+ INTERFACE_INFO *pIfinfoList;
+ unsigned nelem;
+ DWORD numifs;
+ DWORD cbBytesReturned;
- if (init) {
- return addr;
- }
+ if (init) {
+ return addr;
+ }
init = 1;
addr.sa.sa_family = AF_UNSPEC;
- /* only valid for winsock 2 and above */
- if ( wsaMajorVersion() < 2 ) {
- return addr;
- }
-
- nelem = 10;
- pIfinfoList = (INTERFACE_INFO *) calloc ( nelem, sizeof (INTERFACE_INFO) );
- if (!pIfinfoList) {
- errlogPrintf ("calloc failed\n");
- return addr;
+ /* only valid for winsock 2 and above */
+ if ( wsaMajorVersion() < 2 ) {
+ return addr;
}
- status = WSAIoctl (socket, SIO_GET_INTERFACE_LIST, NULL, 0,
- (LPVOID)pIfinfoList, nelem*sizeof(INTERFACE_INFO),
- &cbBytesReturned, NULL, NULL);
-
- if (status != 0 || cbBytesReturned == 0) {
- errlogPrintf ("WSAIoctl SIO_GET_INTERFACE_LIST failed %d\n",WSAGetLastError());
- free (pIfinfoList);
- return addr;
+ nelem = 100;
+ pIfinfoList = (INTERFACE_INFO *) calloc ( nelem, sizeof (INTERFACE_INFO) );
+ if (!pIfinfoList) {
+ errlogPrintf ("calloc failed\n");
+ return addr;
}
- numifs = cbBytesReturned / sizeof(INTERFACE_INFO);
- for (pIfinfo = pIfinfoList; pIfinfo < (pIfinfoList+numifs); pIfinfo++){
+ status = WSAIoctl (socket, SIO_GET_INTERFACE_LIST, NULL, 0,
+ (LPVOID) pIfinfoList, nelem * sizeof(INTERFACE_INFO),
+ &cbBytesReturned, NULL, NULL);
- /*
- * dont use interfaces that have been disabled
- */
- if (!(pIfinfo->iiFlags & IFF_UP)) {
- continue;
- }
+ if (status != 0 || cbBytesReturned == 0) {
+ errlogPrintf ("WSAIoctl SIO_GET_INTERFACE_LIST failed %d\n",WSAGetLastError());
+ free (pIfinfoList);
+ return addr;
+ }
- /*
- * dont use the loop back interface
- */
- if (pIfinfo->iiFlags & IFF_LOOPBACK) {
- continue;
- }
+ numifs = cbBytesReturned / sizeof(INTERFACE_INFO);
+ for (pIfinfo = pIfinfoList; pIfinfo < (pIfinfoList+numifs); pIfinfo++){
- addr.sa = pIfinfo->iiAddress.Address;
+ /*
+ * dont use interfaces that have been disabled
+ */
+ if (!(pIfinfo->iiFlags & IFF_UP)) {
+ continue;
+ }
- /* Work around MS Winsock2 bugs */
+ /*
+ * dont use the loop back interface
+ */
+ if (pIfinfo->iiFlags & IFF_LOOPBACK) {
+ continue;
+ }
+
+ addr.sa = pIfinfo->iiAddress.Address;
+
+ /* Work around MS Winsock2 bugs */
if (addr.sa.sa_family == 0) {
addr.sa.sa_family = AF_INET;
}
- free (pIfinfoList);
+ free (pIfinfoList);
return addr;
- }
+ }
free (pIfinfoList);
- return addr;
+ return addr;
}
/*
@@ -121,12 +120,12 @@ epicsShareFunc osiSockAddr epicsShareAPI osiLocalAddr ( SOCKET socket )
epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
(ELLLIST *pList, SOCKET socket, const osiSockAddr *pMatchAddr)
{
- int status;
- INTERFACE_INFO *pIfinfo;
- INTERFACE_INFO *pIfinfoList;
- unsigned nelem;
- int numifs;
- DWORD cbBytesReturned;
+ int status;
+ INTERFACE_INFO *pIfinfo;
+ INTERFACE_INFO *pIfinfoList;
+ unsigned nelem;
+ int numifs;
+ DWORD cbBytesReturned;
osiSockAddrNode *pNewNode;
if ( pMatchAddr->sa.sa_family == AF_INET ) {
@@ -143,56 +142,56 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
}
}
- /* only valid for winsock 2 and above */
- if (wsaMajorVersion() < 2 ) {
- fprintf(stderr, "Need to set EPICS_CA_AUTO_ADDR_LIST=NO for winsock 1\n");
- return;
- }
+ /* only valid for winsock 2 and above */
+ if (wsaMajorVersion() < 2 ) {
+ fprintf(stderr, "Need to set EPICS_CA_AUTO_ADDR_LIST=NO for winsock 1\n");
+ return;
+ }
- nelem = 10;
- pIfinfoList = (INTERFACE_INFO *) calloc(nelem, sizeof(INTERFACE_INFO));
- if(!pIfinfoList){
- return;
- }
+ nelem = 100;
+ pIfinfoList = (INTERFACE_INFO *) calloc(nelem, sizeof(INTERFACE_INFO));
+ if(!pIfinfoList){
+ return;
+ }
- status = WSAIoctl (socket, SIO_GET_INTERFACE_LIST,
- NULL, 0,
- (LPVOID)pIfinfoList, nelem*sizeof(INTERFACE_INFO),
- &cbBytesReturned, NULL, NULL);
+ status = WSAIoctl (socket, SIO_GET_INTERFACE_LIST,
+ NULL, 0,
+ (LPVOID)pIfinfoList, nelem*sizeof(INTERFACE_INFO),
+ &cbBytesReturned, NULL, NULL);
- if (status != 0 || cbBytesReturned == 0) {
- fprintf(stderr, "WSAIoctl SIO_GET_INTERFACE_LIST failed %d\n",WSAGetLastError());
- free(pIfinfoList);
- return;
- }
+ if (status != 0 || cbBytesReturned == 0) {
+ fprintf(stderr, "WSAIoctl SIO_GET_INTERFACE_LIST failed %d\n",WSAGetLastError());
+ free(pIfinfoList);
+ return;
+ }
- numifs = cbBytesReturned/sizeof(INTERFACE_INFO);
- for (pIfinfo = pIfinfoList; pIfinfo < (pIfinfoList+numifs); pIfinfo++){
+ numifs = cbBytesReturned/sizeof(INTERFACE_INFO);
+ for (pIfinfo = pIfinfoList; pIfinfo < (pIfinfoList+numifs); pIfinfo++){
- /*
- * dont bother with interfaces that have been disabled
- */
- if (!(pIfinfo->iiFlags & IFF_UP)) {
- continue;
- }
-
- if (pIfinfo->iiFlags & IFF_LOOPBACK) {
+ /*
+ * dont bother with interfaces that have been disabled
+ */
+ if (!(pIfinfo->iiFlags & IFF_UP)) {
continue;
- }
+ }
- /*
- * work around WS2 bug
- */
- if (pIfinfo->iiAddress.Address.sa_family != AF_INET) {
- if (pIfinfo->iiAddress.Address.sa_family == 0) {
- pIfinfo->iiAddress.Address.sa_family = AF_INET;
- }
- }
+ if (pIfinfo->iiFlags & IFF_LOOPBACK) {
+ continue;
+ }
- /*
- * if it isnt a wildcarded interface then look for
- * an exact match
- */
+ /*
+ * work around WS2 bug
+ */
+ if (pIfinfo->iiAddress.Address.sa_family != AF_INET) {
+ if (pIfinfo->iiAddress.Address.sa_family == 0) {
+ pIfinfo->iiAddress.Address.sa_family = AF_INET;
+ }
+ }
+
+ /*
+ * if it isnt a wildcarded interface then look for
+ * an exact match
+ */
if (pMatchAddr->sa.sa_family != AF_UNSPEC) {
if (pIfinfo->iiAddress.Address.sa_family != pMatchAddr->sa.sa_family) {
continue;
@@ -203,11 +202,11 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
if (pMatchAddr->sa.sa_family != AF_INET) {
continue;
}
- if (pMatchAddr->ia.sin_addr.s_addr != htonl(INADDR_ANY)) {
- if (pIfinfo->iiAddress.AddressIn.sin_addr.s_addr != pMatchAddr->ia.sin_addr.s_addr) {
- continue;
- }
- }
+ if (pMatchAddr->ia.sin_addr.s_addr != htonl(INADDR_ANY)) {
+ if (pIfinfo->iiAddress.AddressIn.sin_addr.s_addr != pMatchAddr->ia.sin_addr.s_addr) {
+ continue;
+ }
+ }
}
pNewNode = (osiSockAddrNode *) calloc (1, sizeof(*pNewNode));
@@ -230,11 +229,11 @@ epicsShareFunc void epicsShareAPI osiSockDiscoverBroadcastAddresses
pNewNode->addr.sa = pIfinfo->iiBroadcastAddress.Address;
}
- /*
- * LOCK applied externally
- */
+ /*
+ * LOCK applied externally
+ */
ellAdd (pList, &pNewNode->node);
- }
+ }
- free (pIfinfoList);
+ free (pIfinfoList);
}