0.31 - added OSSwapLittleToHost/OSSwapHostToLittle for Mac OS X modified environment::clear() for mac os x regularexpression wasn't setting the match count correctly, fixed that added charstring::subString() method added missing lingerOnClose(), fixed dontLingerOnClose() added base64 encode/decode methods fixed charstring::parseNumber() for unsigned int's added /opt/csw to configure script's search path fixed a memory leak in xmldom::unCacheString() 0.30 - changed commandline::value() to commandline::getValue() fixed a memory leak in dictionary added setHour/Minute/Second/etc. methods to datetime fixed readdir_r vulnerability added support for either "-arg value" or "--arg=value" to commandline added support for break and control characters to chat class added print method to environment class added close-on-exec methods to filedescriptor class added clear method to environment class made all methods in environment class static added wrappers for strspn/strcspn/strpbrk functions to charstring class fixed bug where datetime would set wrong timezone if it is initialized with a combined zone name like PST8PDT added directory::getChildCount() added datetime::validDateTime() xmldom class stores all strings found in the xml file in a stringlist and stores pointers to them in the xmldomnodes to reduce memory usage in xml files that have lots of duplicated strings added configure tests for dirfd/DIR.dd_fd/DIR.d_fd initialize addrinfo struct pointer to NULL in inetclientsocket.C 0.29 - added check for whether SSL_read/write takes void * or char * parameter added _XOPEN_SOURCE to filedescriptorincludes.h for sys/socket for irix added collapse argument to charstring::split added configure test for -Wall switched lots of: char a[charstring::length(b)]; to: char *a=new char[charstring::length(b)]; ... delete[] a; to improve compiler compatibility removed #ifdef __GNUC__ around static variable definitions, I'll add #ifndefs for compilers that don't allow them (like SCO's) if necessary added -D__EXTENSIONS__ to CPPFLAGS added charstring::escape/unescape defaulted zeropadding to 1 rather than 0, I'm not sure if it's a bug in glibc or not, but printf("%0*lld\n",0,(int64_t)0); prints nothing rather than 0, but printf("%0*ld\n",0,(int32_t)0); prints 0. Using 1 instead of 0 for the number of 0's works in all cases. solaris's strchr/strrchr return const char *, so I made charstring::findFirst/findLast return const char * use snprintf's rather than sprintf's now uses fchmod/fchown rather than chmod/chown now made envelope classes out of all classes added a configure test for ftok that takes a char * argument switched a bunch of AC_TRY_LINK's to AC_TRY_COMPILE's in configure script configure script does less work looking for getpwnam_r and cousins now if pthread libs can't be found, configure also tries just plain -pthread added #ifdefs for individual POSIX_FADV_* and MADV_* macros in configure script, for cygwin, tests for w32api files and functions are omitted configure tests for strtoll/strtoull now configure tests for caddr_t types for all mmap-related functions individually now unsupported memorymap methods return false now rather than not existing added -pthread when compiling as well as linking fixed a time-remaining-related bug in snooze class fixed a bug where the date/time string buffer could easily be overrun 0.28.2 - filedescriptor desctructor removes the read buffer now 0.28.1 - fixed a bug in bufferedWrite() 0.28 - added strtou(l|ll) wrappers to charstring class added append(long|unsigned long|double...) methods to charstring class implemented ignoreParityErrors in serialportprofile class added baud methods to serialportprofile class that take string args xmldom::parseString() works now (properly calls xmlsax::parseString()) regularexpression class zero's it's expression during init now to prevent a segfault when it's freed fixed several timezone-related bugs added modem client/server made default parseNumber base 10 instead of 0 INSTALL is moved to INSTALL.txt for OS X now added detachBuffer, detachString to variablebuffer, stringbuffer added split to charstring class added shmfile class moved sleep methods into snooze class, changed sleep() to macrosleep() cleaned up xmlsax class a bit fixed problem where xml comments had ! prepended to them added write()/append() methods for all primitive types to variablebuffer/stringbuffer classes added parseNumber()/integerLength() methods for all primitive types to charstring class added variables() to environment class regularexpression::match() fails immediately if string is NULL now #ifdef'ed out OCRNL, ONOCR, ONLRET in serialportprofile for mac os x added process class updated config.guess uses c++ casting operators now fixed a bunch of const-related messes added rudiments namespace retired errorhandler class implemented copy constructors, = operators for many classes charstring class doesn't use strndup or strdup anymore so strings created using malloc aren't freed using delete[] removed errant connect() definitions from inetclientsocket, unixclientsocket added WNOHANG back to waitpid() call in daemonprocess class and made sure the call gets restarted if it's interrupted by a signal added .PHONY makefile flag, removed INSTALL -> INSTALL.txt hack added /usr/sfw to configure scripts search paths added error class added /sw to configure script search paths added -Wno-long-double if system supports it moved inetserversocket::getClientAddress() to filedescriptor::getPeerAddress() 0.27 - added (slightly modified) pkgconfig stuff from Dolphpower's pkgconfig patch fixed comment detection in xmlsax STRIPPROG is set before calling install-sh now made return value of pass/receiveFileDescriptor a bool fixed filedescriptor::safeRead(); when trying to read more bytes than are available, it now returns the number of bytes read rather than 0 updated rudiments-config and pkgconfig scripts to include pthreads/ssl libs and cflags added optional ssl support to filedescriptor class and all child classes added optional pcre support re-engineered regular expression class xmlsax class uses mmap if it's available inet/unix client/server sockets inherit from generic socket class now added blocking/non-blocking mode switches to filedescriptor/socket class added support for connect with timeout to socket client classes changed (void *) cast to (const void *) for setsockopt calls added check for (const void *) vs. (const char *) for setsockopt calls added setDelimiter method to parameterstring class added support for cygwin >=1.5.7-1 added search for gthreads to configure for SCO added netToHost/hostToNet virtual methods to fildescriptor class, override them in datatransport class to call ntohl/ntohs and htonl/htons, removed a bunch of read/write methods from datatransport added primitve xml path methods added static getLength() method to charstring class added wait() with timeout methods to semaphore class added chown/fchown,unlink,rename,link,symlink,readlink,fsync,fdatasync, utimes,mknod,mkfifo,mkstemp,access,xattr-related function wrappers to the file class added basename/dirname methods and ftok wrapper to file class added a few pathconf wrappers to file class added dup/dup2 wrappers to filedescriptor class added directory class removed static methods that took an "int fd" from file class added device class added intervaltimer class reworked filedescriptor/client/server heirarchy to reduce size of library's data segment added test for crypt.h made charstring/rawbuffer classes NULL-safe added zero method to rawbuffer class no stripping is done at compile, link or install time now added getMonthName/Abbreviation to datetime class 0.26.3 - updated spec file to work on suse 9.0 config.mk uses includedir instead of incdir now docs are installed in ${datadir}/doc/rudiments instead of ${prefix}/doc/rudiments now 0.26.2 - fixes for Mac OS 10.2 and Fedora Core 1 compatibility timezonefile class build is now independent of datetime 0.26.1 - a couple of build fixes added shadowentry, serviceentry and rpcentry classes and test programs reorganized *entry class code a bit to generate smaller code uses -pipe compilation flag now if possible -fomit-frame-pointer -fno-exceptions are used now, debugging build just uses -fno-exceptions rpc/rpcent.h is included if necessary for getrpcbyxxx_r rpc/rpc.h is included if necessary for getrpcbyxxx_r pthread.h is included for xxxentry classes now no matter what shadowentry is disabled on systems that have no shadow support added filesystem class added test for s_warn, s_inact, s_expire and s_flag in struct spwd and compile in support for them if found in shadowentry class applied Taguchi Takeshi's listener and inetsocketclient patches check for shmat()!=-1 instead of shmat()>-1 in sharedmemory class now as a memory address could actually be larger than 2^31-1 (or 2^64-1), appear to be negative and still be valid as long as it's not -1 fixed rpm 4.1 doc-install complaints added --enable-debug option to configure, only 1 library is built now fixed xmldomnode::getNextTagSibling() reworked xmldom relationship in dtd class fixed ssize_t safeSelect() -> int safeSelect() declaration updated config.sub, config.guess and ltmain.sh made a bunch of methods return bool instead of int renamed string class charstring to avoid stl collision 0.25 - doc's mention genericsocket class now configure script figures out rpm build directory better added rudiments-config script Makefile.in's are just Makefile's now read/write methods return ssize_t's now added logger class and logdestination classes implemented totally different client/server class structure renamed lots of methods to just read(),write(),open(),close(),etc. added xmlsax,xmldom,xmldomnode class added errorhandler class made other classes report errors through the errorhandler class added SONAME_VERSION_INFO and WITH_LIBTOOL variables to config.mk (fmw) added the debian directory (fmw) added memorypool class made lots of (char *)'s into (const char *)'s. made lots of methods const methods inlined lots of methods used autoconf/autoheader 2.53 made libtool build the default made build process cross-compile-friendly added --with-system-libtool option to configure (fmw) added fileproperties class (wrapper for stat/lstat) added conectiondata class for use with clienttransport children added right/left justify and center methods to text class added --debug-profiling-libs to rudiments-config added stringbuffer class, made errorhandler use it added --enable-small-code and --with-inlines to configure script added -fno-exceptions to default CXXFLAGS added variablebuffer class added dtd class uses reentrant getpw/getgr functions if available uses reentrant gethostbyname/getprotobyname functions if available uses localtime_r function if available uses static instead of dynamically allocated variables now where possible configure defines -DSMALL_CODE=1 so routines can be written one way or the other moved fileproperties class into file class incorporated matthias saou's spec file instead of mine, added devel package to it removed make rpm target and associated cruft removed kdevelop files uses RUDIMENTS_INLINE instead of just INLINE to avoid conflicts added slackware packaged build target added support for gcc-3.2.2 added a features.mk file so features could be compiled in/out moved text class stuff into string class removed unnecessary -pedantic from CXXFLAGS added linkedlist/dictionary classes, other classes use them instead of implementing their own lists/dicts added environment class datetime class handles timezones properly now added mutexes to datetime, *entry classes added read/write with timeout methods to filedescriptor/datatransport inetsocketclient uses getaddrinfo_r now if possible 0.24 - fixed poor linger implementation added options for SO_REUSEADDR added simple/complex port initilization methods to server class added options to server/client class to automatically retry reads that were interrupted by signals spec file takes libdir, incdir, prefix and exec_prefix into account added support for file descriptor passing over unix sockets server/client classes split into genericsocket, serversocket, clientsocket classes serversocketpool class added which can listen on an arbitrary number of ports make generates a profiling version of librudiments.a now test programs are statically linked now added create/attach and createOrAttach methods to semaphoreset class semaphoreset correctly cleans up now include files moved to rudiments subdir of incdir in genericsocket class, reads which didn't get all of the data but did not encounter an error keep trying until all the data is read now safeRead handles count>SSIZE_MAX and eof conditions correctly now setuid/setgid were replaced with setreuid/setregid added #include and defined _XPG4_2 around #include for solaris8 tests don't build by default now clientsocket correctly checks for connect() error now 0.23 - fixed stupidity where semaphoreset destructor was trying to individually delete all of the semaphores in a set rather than just the whole set at once 0.22 - added support for "make rpm" added lingerOnClose and disconnectClient calls to svr.C test program check for ld -G vs ld -shared 0.21 - got rid of some compiler warnings made client/server write/read methods use unsigned long/short added strip commands to text class made configure script take --includedir and --exec-prefix into account added return values for disconnectClient(), stopListening() and closeConnection() methods in client/server classes added linger socket options to server/client classes 0.20 - changed DYNAMICAR to use ld -G -o instead of g++ -Wl,-G -o, it was putting an undefined main symbol in the library which java doesn't like tries=0 in client class causes the client to loop infinitely now changed daemon class name to daemonprocess to avoid conflict with daemon function in unistd.h made daemonprocess signal handlers pointers and handled them as such; not doing so and using ld -G -o to create the library caused any program using the daemonprocess class to crash client class reports a "failed to connect" error only after it's tried for the number of times it's supposed to try, not each time added server/client programs to the test suite 0.19 - added test suite simplified random number scaling code added negative number tests to random number tester changed randomnumber to prefer rand/srand over nrand48/srand48 because SCO's RAND_MAX is 2^15-1 but it's nrand48 returns a number between 0 and 2^32-1 which caused scaling errors but it's rand returns a number between 0 and 2^15-1. added a getRandMax method to the randomnumber class 0.18 - getUnixServerPort() returns NULL now if the unix socket was never opened in server class initialized serverportin in server class initialized serversock in client class made a bunch of methods static rolled casechange, trim and encoding classes into text class totally changed random number class added setUsername/setGroupname methods to semaphoreset class daemon class handles SIGCLD by waiting on dead child processes on it's own now changed several method names in the server class some tweaks for microsoft platform compatibility added a permissions class changed some method names in the signalhandler class added documentation to all of the header files added signalset and signalmanager classes changed signalhandler.h/C to signalclasses.h/C added programming examples to documentation added isNumber/isInteger methods to text class, made them both recognize negative numbers make clean now removes the .pics directories that Konqueror makes 0.17.1 - quick-fix: closeServerSocket() doesn't unlink the unix socket anymore 0.17 - added some new methods to the regularexpression class added datetime class 0.16 - got rid of some unnecessary strlen()'s fixed some "I wasn't such a good programmer back then" errors removed idiotic readFromXXX(char *buffer) functions which had no length parameters from client/server classes added methods to daemon class so it can run as a given user/group 0.15 - tweaks for gcc-2.96 0.14 - added more writeToServer/writeToClient and readFromServer/readFromClient methods for writing/reading non-character data added chdir("/") and umask(0) to detach() method in daemon class closing a unix socket unlinks the associated file now added socket option SO_REUSEADDR to inet sockets in server class 0.13 - removed redundant -fpic and unnecessary -DPIC added #include to regularexpression, sharedmemory and semaphoreset classes allowed c++ to be used instead of forcing g++ changed check for integer signal handler type fixed a few memory leaks preliminary CYGWIN support added detach method to daemon class, must be explicitly called for the daemon to detach from the controlling tty. 0.12 - added Unix Domain support to server and client classes removed the extern "C" { #undef __cplusplus ... #define __cplusplus } stuff, it caused more trouble than it overcame build improvements error messages go to stderr now and include the strerror() of the error number detect signal handler function signature changed signal handler function signature to void handler() from void handler(int) for greater compatibility added randomnumber class 0.11 - added sharedmemory class removed select from the readfromfileptr routine (wasn't supposed to be there anyway) made wait() and signal() semaphoreset class members not use SEM_UNDO by default and added waitWithUndo() and signalWithUndo() members 0.10 - added select before accept in server class 0.9 - documentation improvements and fixes added -fpic -fPIC -DPIC to CXXFLAGS added extern "C" and #undef/#define __cplusplus in various places added modes to install scripts fixed the server class to allow connections using INADDR_ANY 0.8 - build fix: made calls to "test" more compatible 0.7 - cleaner build client::openConnection now tries to connect to all the addresses that a hostname resolves to before giving up client::openConnection fails gracefully if gethostbyname or getprotobyname fails 0.6 - removed LDFLAGS from config.mk general Makefile maintenance 0.5 - documentation installs now detection of union semun at configure time reingineered Makefiles to be frienlier to non-gnu make 0.4 - more robust build/install/uninstall 0.3 - configure based install. Reorganization of includes. make install/uninstall directives. Got rid of RCS. 0.2 - bug fixes. 0.1 - First release.