The UDS Collection

Release Notes

back to main page

Version 1.0.6

Version 1.0.6 is the new stable release.
It contains the following user-visible changes:

  • A bug in the pseudo-random number generators was fixed.
  • Upgraded scripts and config files to make everything work with recent versions of automake, autoconf, and libtool.

Version 1.0.5

Version 1.0.5 is the new stable release.
It contains the following user-visible changes:

  • Some gcc-3.1 related problems have been fixed. They should not be visible to the user. UDS still works with gcc-3.0.x.
  • It is now possible to pass the signal to a ProcStream which is used to kill the child process (if requested). If not specified, SIGTERM is used so the default behaviour is unchanged.
  • The TryLock method of the Mutex dummy class for the single thread version returns always 0. Previously the return value was not specified.

Version 1.0.4

Version 1.0.4 is the new stable release.
It contains the following user-visible changes:

  • The memory leak counter is not increased if the leak is ignored. No warning is printed if all leaks are ignored. You can ignore all leaks with unknown origin (probably from shared libraries) with the Sentinel::IgnoreUnknown method.
  • Fixed a problem with original_new(). Under special circumstances the (weak) function was not included in the executable. The _original_new() function does not exist anymore.

Version 1.0.3

Version 1.0.3 is the new stable release.
It contains the following user-visible changes:

  • A nasty memory leak in uds::Sentinel::Release() was fixed.
  • The --enable-log-all configure option is not generated if the UDS_CHECK_FLAGS or UDS_CHECK_FLAGS_ND m4 macros are used.

Version 1.0.2

Version 1.0.2 is the new stable release.
It contains the following user-visible changes:

  • Memory allocations are never logged before UDS was initialized by uds::Init. Memory leak checking is performed when the last uds::Init is destroyed. The uds::log_all configuration flag does not exist anymore. This fixes some problems that could lead to segfaults.
  • When printing backtraces and memory leaks the program is not aborted with an error if the addr2line program can not be accessed. In that case function addresses are printed instead of function names, source files, and line numbers.
  • It is now possible to filter memory leaks by filename.
  • The uds/thread.hh header can now be included if _REENTRANT is not defined. In that case the Mutex, MutexLock, and CMutexLock classes are defined but perform no action.
  • The BRead functions which read strings throw an exception if not all data can be read.
  • Sockets throw a system_error instead of a runtime_error if send() or recv() fails.
  • The MkLockFile function sets the value pointed to by the lpid argument to 0 if the file is already locked but the pid can not be read.
  • The UDS_CHECK_GCC m4 macro does not print an error message for gcc 3.1.

Version 1.0.1

Version 1.0.1 is the new stable release.
It contains the following user-visible changes:

  • Fixed a problem with the STL that caused a segfault at program termination when memory leak checking was enabled and the executable was linked dynamically.
  • Use libtool's versioning scheme.
  • Don't set CFLAGS and CXXFLAGS if one of those variables is neither empty nor "-g -O2". Other programs that use the UDS m4 macros are affected by this change as well.

Version 1.0.0

Version 1.0.0 is the new stable release.
It contains the following user-visible changes:

  • Changed the output format of backtraces to fit into 79 columns.
  • Function names in memory leak listings are printed. Changed the output format to fit into 79 columns.
  • Added VarAssign, ShellQuote, BreakLine, and TrString functions.
  • Fixed a bug in Version_t which caused that version numbers were not compared correctly.
  • FileStream and ProcStream got additional constructors that take const string& instead of const char*.
  • ReadLine unsets the failbit on the input stream if an empty line is read.
  • Minor improvements in error messages.
  • Fixed MkLockFile (was completely broken).

Version 0.10.1

Version 0.10.1 is the new stable release.
It contains the following user-visible changes:

  • It is now possible to set the number of expected memory leaks. This is useful since some libraries or programs allocate a fixed amount of memory which is never freed. Note that it is possible to set several numbers of expected leaks. See Automatic search for memory leaks for more information.
  • Fixed a bug in filebuf::Write(). The input file position was fseek()ed instead of the output file position.
  • The FileStrem constructors and Open() methods take an argument which specifies whether the file shall be closed implicitly when the stream is destroyed, or another file is Open()ed. See the reference for more information.
  • Added the System() function which works basically like the c library system() function, but does not block or ignore any signals and throws an exception if the child process does not exit successfully.
  • The UDS_CHECK_FLEX_FLAGS m4 macro was added. It adds the --enable-fast-lexer option to your configure script. If enabled, the FAST_LEXER variable is set to '-f' and made available to all files via AC_SUBST.

Version 0.10.0

Version 0.10.0 is the new development release.
It contains the following user-visible changes:

  • UDS moved completely to the STL that comes with gcc 3.0. The gcc 2.95.x STL is no longer supported.
  • The StrStream class was removed (they are not needed anymore; use stringstreams instead). The StringVar() and VarConv() conversion functions were moved to the (new) str_util.hh header file. An example program that demonstrates those functions was added (
  • Added {i,o,io}fdstream classes which are derived from their iostream counterparts and provide the File() method that returns a file descriptor. All stream classes that operate on file descriptors are now derived from the fdstream classes.
  • Added the FileStream class which provides separate file positions for input and output.
  • Moved i/o functions (ReadLine, BRead, BReadRaw, BWrite, BWriteRaw) to the (new) header file io_util.hh. The BRead* functions that took an istream& as first argument require an ifdstream& since file descriptor access is required.
  • Moved CkStdCall from sys_util.hh to stdexcpt.hh.
  • Added log_all UDS flag. Memory [de]allocations are not logged until UDS is initialized unless the log_all flags is set.
  • The UDS_CHECK_LOCKFILEDIR m4 macro was renamed to UDS_CHECK_VARRUNDIR.
  • Added example program for the Logging class (

Version 0.9.6

Version 0.9.6 is the new stable release.
It contains the following user-visible changes:

  • The documentation is installed in $(datadir)/doc/uds instead of $(prefix)/doc/uds. datadir defaults to $(prefix)/share.
  • The BRead and BWrite families of functions changed once again.
    • The 'wait' parameter has been replaced by a 'flags' option. The original 'wait' parameter is now one of the flags. The other flags are only meaningful if strings are read. See the reference for a list of the flags and their meanings.
    • It is now possible to pass an 'endianess' parameter to the BRead and BWrite functions. Little-Endian and Big-Endian (= network byte order) are supported.
    • To avoid ambiguities that were introduced by these changes, the BRead functions that operate on void* were renamed to BReadRaw. Corresponding BWrite functions were added.
    • It is now possible to specify a max. string length to BRead functions that read string representations.
  • MkLockFile() and WriteLockFile() functions were added. They can be used to create / operate on lockfiles. See the reference for more information.
  • UserName() and UserID() functions were added which can be used to map a uid to a user name and vice versa. Same with GroupName() and GroupID(). See the reference for more information.
  • X.25 Headers are printed correctly when operator << ( ostream&, const X25Api_t& ) is used. This happens eg when OOB messages are received.
  • Two functions called 'test' were added to stl_ext.hh. One takes const __true_type& as argument, the other one const __false_type&. They return true and false accordingly. Such functions are useful if certain specialized templates (like the ones defined in type_traits.h) are used.
  • The UDS_PATHS m4 macro defines now all standard directories that are set by configure. See the macro reference for a list of all directories.
  • When UDS_CHECK_LIBUDS or UDS_CHECK_LIBUDSTHREAD is used, the -luds / -ludsthread options are not automatically added to the LIBS variable.
  • The m4 macros UDS_CHECK_DEFUSER, UDS_CHECK_DEFGROUP, and UDS_CHECK_LOCKFILEDIR for use in daemon / server programs were added.

Version 0.9.5

Version 0.9.5 is the new stable release.
It contains the following user-visible changes:

  • UDS provides the Backtrace() function (defined in uds/btrace.hh) which generates a backtrace at runtime. If the executable contains debugging information, the backtrace includes source files, line numbers, and function names. Very useful for debugging. The Backtrace() function is used by the UDS exception classes and replace the 'thrower address' feature. See the reference for more information.
  • The socket api has been redesigned. There is now one class for each protocol. Support for UDP sockets and X.25 sockets (Sangoma Wanpipe cards under Linux only) were added.
    Note: The new socket classes are incompatible with the old SocketStream class (which has been removed).
  • Example program 10 has been rewritten and demonstrates the use of the TCPSocket class. Example programs 12 - 14 were added. See the README file in the test directory of the source distribution for brief descriptions.
  • A set of m4 macros was added which make it easy to add configure-switches to your project which control UDS default settings. This task which was (and is) covered in Configuring UDS is simplified greatly. Note: read this section if you are upgrading from an older version of UDS, and update your
    There are also several other useful m4 macros.
  • The --with[out]-libudsthread configure option was added. libudsthread is built by default unless libpthread was not found.
  • It is now possible to make a ProcStream kill the child process when the stream is closed. Particularly useful if the child process waits (forever) for new input.
  • Subsequent runtime initializations of UDS (by placing an uds::Init instance on the stack) are now allowed. A reference count is maintained internally.
  • Minor bugfixes in the family of BRead functions. BRead functions were added which take a file descriptor instead of an input stream. All BRead functions return now the number of bytes read. Useful if the 'wait' flag was not set. See the reference for more details.
  • The FileInfo class, a simple wrapper which provides the same information as stat() does, was added. See the reference for details.
  • It is now possible to change UDS flags at runtime. The uds::flags constant is not constant anymore. This topic is covered in Configuring UDS.
    Note:If you used to set the flags manually using something like
    const uds::uds_flags_t uds::flags = uds::leak_check,
    don't forget to remove the const.

Version 0.9.4

Version 0.9.4 is the new stable release.
It contains the following user-visible changes:

  • The uds::Init class was added which initializes the UDS libray. You should place one instance in your main function. See any of the example programs that come with the source distribution. Right now this class serves only one purpose: If the instance was not created, it is assumed that an exception might not be caught in case of a fatal error. Therefore an error message is printed to stderr before the exception is thrown.
  • It is now possible to get direct access to the diagnose object that comes with every UDS exception. This is especially useful to retrieve error codes (like errno). Look here.
  • The Exception::AddInfo methods were renamed to Exception::Info.
  • Exception::AppMsg was added which provides just a convenient way to append a short message to the info string. If the last character of the message to be appended is not a newline, it is automatically added.
  • The VarConv template function was added which takes a string and converts it to another type. Have a look at the reference.
  • SocketStream::Read was removed. It is replaced by more generic BRead() functions which are now defined in uds/sys_util.hh. BWrite() functions were added as well. Have a look at the reference for more information.
  • The VecDelete() and VecNullDelete() template functions (eg for use in STL algorithms) were added to uds/stl_ext.hh.
Due to problems with the dot tool some of the nice diagrams are currently not available in the reference. I will make a new reference available as soon as the problems are fixed.

Version 0.9.3

Version 0.9.3 is the new stable release.
It contains the following user-visible changes:

  • Added ProcStream class. It is a replacement for popen(), but more flexible. Since a pair of anonymous unix-domain sockets is used instead of pipes both read and write operations are supported. Furthermore it is possible to specify the environment of the child process. As required by POSIX.2 for popen(), Streams from other ProcStream instances that remain open in the parent process are closed in the new child process.
  • The thread-safe version with the posix thread classes is only built if the pthread library was found.
  • Added a function to the timeval wrapper class that converts the time to a 64 bit integer (microseconds since the epoch). Added functions that return the current system time as TimeVal (Time) and 64 bit integer (Time_int64).
  • The SocketStream class is now usable since Connect() methods are provided. The UnixDomainSocket() and InetSocket() functions were moved to socket.hh.
  • Added a fd_set wrapper class and ReadLine() functions to sys_util.hh.
  • Thread::Instance was renamed to Thread::Self and returns a GC_Ptr.
  • The old TmpFileName functions were replaced. There are now two TmpFile() functions that return a file descriptor (like mkstemp) and two TmpFileName() functions that return a temporary file name. However, unlike previous TmpFileName() functions they create a file as TmpFile() does to avoid a race condition, and close the file before the name is returned.
  • Added StringVar template function that converts its argument to a string.
  • It is now possible to pass options to Wait() (like the 3rd argument to waitpid).
  • The pseudo-random number generators were redesigned. The ERand class was removed. The functions to generate random seeds (TimeSeed, RandomSeed, and URandomSeed) are not member-functions anymore.

Version 0.9.2

Next to a few minor internal improvements version 0.9.2 has several user visible changes:

  • Wrapper classes for Posix Threads were added. They are Thread, ThreadAttr, Mutex, CondVar, Semaphore, MutexLock, and CMutexLock. see Threads, Mutexes, Semaphores.
  • When you compile UDS, two libraries are created. libuds (the 'normal' version) and libudsthread, a threadsafe version. Threads are not supported in libuds. You have to link against libpthread and compile your code with -D_REENTRANT if you want to use libudsthread.
  • Generic 'Action' classes were added. Those classes 'store' function calls and are defined in uds/action.hh. See Action, FinalAction, and VRemember, and test/ for one of the more obscure hello world programs ;-)
  • A class for socket streams has been added. See Socket Stream class

Version 0.9.1

This release contains a few minor bug fixes / changes:

  • Added FileDes, FileAccess, NamedSocket (untested!), SetIntersection, and CkStdCall convenience functions. Have a look at the reference for descriptions.
  • Added a new constructor to classes generated by _uds_ExceptionClass and _uds_ExceptionClassF to avoid implicit conversion from const char* to bool. The same with TmpFileName.
  • The random number generators can now be initialized automatically with calls to RandomSeed (uses /dev/random), URandomSeed (uses /dev/urandom), and TimeSeed (uses system time). Have a look at the reference.

Version 0.9.0

This is the first release of the UDS collection.
No release notes for today.