2007/04/30: mdeininger
 * enhanced feedback
 * fixed some deadlocks

2007/04/24: mdeininger
 i'm getting quite lazy about updating this file... have a look at the svn
 revision history for closer details ;)
 * implemented shutdown-(before|after)
 * fixed problems with before/after (should work again)

2007/04/15: mdeininger
 * more API changes...

2007/04/14: mdeininger
 * API changes... lots of 'em...

2007/04/12: mdeininger
 * changes to the feedback and feedback auto-add code
 * new feedback module for festival (gonna use a thread like with fbsplash)

2007/04/11: mdeininger
 * a number of minor fixes
 * the new core seems to be doing quite well

2007/04/10: mdeininger
 * new core mostly operational.
 * changed configure script to support modules in C++
 * added template for C++ module (ipc-dbus)

2007/04/09: mdeininger
 * started on a new more-or-less event-based module logics core

2007/04/08: mdeininger
 * made suff cleaner by removing the 'feedback' mode, but also auto-adding
   a feedback module if none is specified

2007/04/05: mdeininger
 * added options="feedback" to daemon/shell modules to tag them as feedback-
   modules (gonna be useful for the fbsplash module)
 * moved re-mounting the root-filesystem to mount/critical
 * the fbsplash module seems to work just fine =)
 * moved the control socket to /dev/einit-control
 * removed module reset/reload/zap hooks in favour of "custom" hooks
 * changed mount/* to mount-

2007/04/03: mdeininger
 * parsed some of the configuration in the wrong function/forgot updates
 * "list services" has been moved to the module-logics core, + it will now
   display candidates in the order that einit will try to deal with them.
 * added envfile="" support
 * added is-up="" and is-down="" attrs to daemons -- they run after the daemon
   is forked -- if the return value is shell-ish true, then the appropriate
   change to the daemon is considered successful, else it is seen as failed
 * added need-files="" to daemons -- just add a list of files that must exist
   or else einit won't even try to bring it up (if the list is available).
 * new module: configuration-network

2007/04/02: mdeininger
 * need to split that configuration up :D
 * use /etc/fstab by default
 * introduced a new readdirfilter() function, we did do that a lot...

2007/04/01: mdeininger
 * started on a custom set of (m|re|c)alloc() functions
 * modified configure script to add files to link into the core

[2006/04/01: mdeininger: release, Version 0.21.0]

[2006/03/27: mdeininger: release, Version 0.20.0]

2007/03/22: mdeininger
 * logging works
 * output is a little clearer

2007/03/21: mdeininger
 * logging kinda works...

2007/03/20: mdeininger
 * stripped einit-control even further

2007/03/19: mdeininger
 * fixed/enhanced the build system
 * added some very simple hashing to the tree-linear code...
   seems to decrease execution time considerably

2007/03/18: mdeininger
 * some good progress with compiling modules into the core

2007/03/14: mdeininger
 * need to be able to compile modules in.

2007/03/13: mdeininger
 * this should get us more "const-correct" :)
 * fixed some annoying compiler warnings
 * moved /etc/einit-control to /etc/einit/control

2007/03/11: mdeininger
 * introduced a new function to check for string matches (strmatch())

2007/03/09: mdeininger
 * added support for ryan's shadow modules

2007/03/07: mdeininger
 * fixes, cleanups, new apach2 module

2007/03/05: mdeininger
 * some new modules, random fixes

2007/03/01: mdeininger
 * the v3 module logics core is now by default external
 * the default expat configuration parser is now external as well.

2007/02/28: mdeininger
 * more preparations to get more stuff out of the core.

2007/02/27: mdeininger
 * shell-gdm should also provide "xdm"
 * the v3 core is now the default
 * fixed some deadlocks in the v3 module-logics core
 * pexec() seems to be less flakey now

2007/02/25: mdeininger
 * some new macros
 * new module logics core is coming along nicely

2007/02/22: mdeininger
 * fixed readfile() problem with .keep files

2007/02/21: mdeininger
 * new new module logics core, again

2007/02/20: mdeininger
 * added service transformations
 * build system changes
 * moved get_plan_progress from the visualiser to the module-logic.c file
 * new sobexsrv module by RedIpS -- nice man ;)

2007/02/19: mdeininger
 * etc/einit/einit.xml has been moved to lib/einit/einit.xml
   (einit.xml should not be modified by users)
 * lib/einit/*.so have been moved to lib/einit/modules
 * added code to read and use the sysctl.conf file
 * ha, found the bloody bugger
 * the xml configuration parser may now create missing include directories
   itself
 * new ipc command "set variable"
 * new ipc command "save configuration"

2007/02/18: mdeininger
 * new function for error reporting (and optional hara-kiri)
 * workover using -Wall
 * added some code to check for errors (that normally need not be checked)

2007/02/16: mdeininger
 * fixed some minor things

2007/02/15: mdeininger
 * extra module for entranceD (additional to the entrance module from earlier)
 * "list services" will now list deprecated modules with a red "-" instead of
   the usual *
 * fixed a stray malloc()

2007/02/08: mdeininger
 * new module for ipc commands that modify the configuration

2007/02/07: mdeininger
 * output for aforementioned ipc call

2007/02/06: mdeininger
 * ipc call to get configuration nodes

[2006/02/05: mdeininger: release, Version 0.16.0]

2007/02/04: mdeininger
 * added a cfg_filter() function

2007/02/02: mdeininger
 * added "rc zap" command
 * einit-control should now auto-add --ansi if appropriate

2007/02/01: mdeininger
 * made einit-mod-exec and einit-mod-daemon check variables with --wtf
 * minor cleanups
 * added ipc command-chaining code -- run other commands if a certain one has
   been run... like, run "examine configuration" right after "update
   configuration" has been called
 * fixed mod-daemon and mod-exec to only record their module-structs *once*

2007/01/29: mdeininger
 * well, this really oughta fix the piping thing now...

2007/01/28: mdeininger
 * fixed einit-control hangs
 * might've fixed the piping issue
 * hopefully got the pid="" attribute to work properly with daemons

2007/01/27: mdeininger
 * fixed einit-external

2007/01/26: mdeininger
 * fixed some things about aliasing
 * got the command to list services, "list services" to do it properly.
 * changed internal handling of IPC I/O
 * added pexec-option dont-close-stdin
 * added a pid= attribute to daemon and shell modules that will automatically
   erase the file specified with it when the module goes down makes sure it's
   not there when getting it up (good idea ryan!)

2007/01/25: mdeininger
 * made pexec() output things that are not in the feedback| form
 * fixed logic flaw in default pexec options
 * added prepare/cleanup attributes to shell-modules

2007/01/23: mdeininger
 * made einit-tty switch to feedback-vt when being disabled
 * prepare/cleanup commands are now immune to the set user/group

2007/01/22: mdeininger
 * wonder what's with umount lately...
 * hopefully fixed "Invalid Argument" error with mode-switches
 * problems with a... kernel panic on shutdown...?
 * slightly improved verbosity
 * verbose output on tty10 and progress indicator are now disabled by default

2007/01/21: mdeininger
 * split experimental modules from the main source tree
 * split out less useful sysv compatibility modules
 * configuration file cleanups
 * added module build-number checks
 * added different system for getting the build-number straight in modules

2007/01/20: mdeininger
 * split set functions from utility.[ch]
 * split gentoo-only modules from the main source tree

2007/01/19: mdeininger
 * fixed deadlock in shutdown (mounter)
 * fixed clock-skew infinite loop
 * added panic check to mode-switches
 * some work on the fbsplash feedback (+ ryan made a nice module to set console
   backgrounds)

2007/01/18: mdeininger
 * fixed a visualiser SIGBUS
 * added code to maintain mtab
 * removed separate mtab structure
 * fbsplash support (well, started on the module, anyway)

2007/01/16: mdeininger
 * some umount logics
 * fixups to the process-collector
 * name for critical mount points has changed
 * (cheap) code to guess how far into a plan we are right now

2007/01/15: mdeininger
 * (hopefully) fixed random problems with einit-control getting "stuck"

2007/01/14: mdeininger
 * minor documentation fix (paludis)

2007/01/12: mdeininger
 * compile fixes (pthread bug code and man pages)

2007/01/11: mdeininger
 * need to write proper man pages...
 * should stop using sys_errlist and the like

2007/01/09: mdeininger
 * minor documentation update (really need to tackle that :-/)
 * updated sh-style variable import module (should work, no longer disabled by
   default)
 * keymap and hostname are now imported from gentoo'S configuration by default

2007/01/08: rmh3093
 * lots of cleanups in einit.xml, new modules
 * version bump (0.15.1)
 * updated ebuilds

2007/01/08: mdeininger
 * created a runscript-einit.sh script that translates init.d calls into einit
   "einit-control rc x y" calls.
 * modified the gentoo-compatibility module to use /sbin/runscript-einit.sh
   instead of /sbin/einit-control
 * moved sh-parser to its own file
 * added template for a secondary configuration module that will parse settings
   from sh-style configuration files
 * new conditional for xml configuration files: file-exists=""
 * almost got the importer working, i'll finish that tomorrow. configuration.*
   modules are thus disabled by default

2007/01/07: mdeininger
 * cut out mount/root in favour of mount/system
 * some fixes and tweaks for pexec()
 * udevstart is being a bitch... trying to fix udev in general (at least the
   order in which things are started should fit now...)
 * found the bug: udevstart needs a stdin to work properly

2007/01/06: mdeininger
 * updated copyright notice
 * fixed some incorrect flags while building
 * eww, friggen stupid mistake causing lockups...
 * traced the weird lockup bugs to circular dependencies created by gentoo's
   "after"-dependencies... disabled them until this can be resolved
 * cleanups in pexec()
 * i think i got feedback from pexec() working...
 * better support for gentoo-ish scripts
 * added code to mark all init-scripts as "deprecated"

2007/01/05: mdeininger
 * tended to that "lock bug"
 * protection against circular dependencies (theoretically...)
   (well, started on that code anyway)

2007/01/04: mdeininger
 * bugbug -- bugger -- think i fixed it
 * used the wrong order for feedback/sleep
 * configuration updates are now propagated in a much cleaner way
 * added support for importing gentoo's init.d script dependencies
 * added support for executing gentoo's init.d scripts
 * fixed configuration files' mode
 * added mount/system mount/root node reversal example
 * better output of "list modules"

2007/01/03: mdeininger
 * darwin compile fix (utmp)
 * fixed changelog dates
 * added einit support for gentoo's "softlevel" boot flag
 * fixed some incorrect logic
 * mutexes ftw...
 * i found some invalid accesses, but they only occur in valid, allocated areas
   and don't seem to cause any malfunction in einit...
 * utmp handling should now closely resemble the sysv style...
 * logics core changes (less useless retries... hopefully)
 * gentoo module will now update gentoo's service tracking directory
   (partially...)
 * gentoo autodetection should work properly now
 * *something* is corrupting configuration data...
   update: seems like a bug in stree-linear.c, somethig is corrupting
   the ->next pointers there

2007/01/02: mdeininger
 * new events: service/module status changes and nodes mounted/unmounted
 * got the utmp module to do something meaningful

2007/01/01: mdeininger
 * bug in gentoo's compatibility module (SIGSEGV)
 * some cleanups
 * traced/fixed some bugs

2006/12/30: mdeininger
 * cleaned up configure script, added some missing headers
   (thanks for reporting, vapier)

2006/12/29: mdeininger
 * removed "base" from the list of default attributes for nodes
   (too rare, we'd rather save those 4/8 bytes per node)
 * {enable|disable|reset}/mod is now deprecated in favour of */services
 * added enable/critical in preparation of "panic mode"
 * smarter configuration updates
 * gentoo compatibility module can now parse gentoo's /etc/runlevels
   (that means native gentoo rc-update will work, sort of...)
 * commented some things in local.xml
 * added aliasing support
 * preliminary ipc/rc feedback support
 * rc command semantics have changed, the old semantics can be requested with
   an additional --detach flag
 * minor scheduler bugfixes and cleanups

2006/12/28: mdeininger
 * sandbox mode does not require recompilation anymore
 * conditionals in your configuration files (using <if match="" />)
   -> no more hard-coded calls to local.xml/sandbox.xml
   (this also means that the weird "double file semantics" have been fixed)
 * wrote a new module for generic init.d script support
 * wrote another new module to provide initctl support (shutdown/halt, etc...)
   it *should* work...

2006/12/27: mdeininger
 * module to provide "external" services
   (for using einit with sysv or similar)
 * new command to "list services"
 * the "after" and "before" attributes now have a purpose

[2006/12/24: mdeininger: release, Version 0.14.0.500]

2006/12/23: mdeininger
 * cleanups (services)

2006/12/22: mdeininger
 * modifications to live ebuild and configure script that should fix some
   issues

2006/12/20: mdeininger
 * repository converted to svn (rmh's idea actually :) )

2006/12/19: mdeininger
 * service overrides

2006/12/15: mdeininger
 * fix for the makefile
 * obsoleted the main scheduler function
 * new special elements for modes
 * new IPC command: "exec"
 * power "off" has been renamed to power "down" -- makes more sense
 * due to the new layout, switching to the power-down/power-reset modes will
   actually shut down or reset.

2006/12/09: mdeininger
 * stupid little bug in the mounter...

2006/12/08: mdeininger
 * mount: positive mountflags (+ i had forgotten "(no)exec") and cleanups
 * slightly enhanced error checking
 * guessing filesystems *should* work now, you can now also specify more than
   one filesystem to try (using the fs1[:fs2[:fs3[...]]] syntax)
 * module-logic: allow for exceptions to <disable />: <enable /> will now
   override the <disable />-definition
 * metamodules should not be able to be enabled directly...

2006/12/07: mdeininger
 * updating the configuration just got a whole lot easier... hopefully
   (use "einit-control emit-event core/update-configuration")
 * the event-log is now #DEBUG-only

2006/12/05: mdeininger
 * bleedin umount problem...
 * einit-tty will now check the ttys to be called for existence

2006/12/04: mdeininger
 * some work on a default splash-screen

2006/12/03: mdeininger
 * templating should work now

2006/11/30: mdeininger
 * templating ftw...

2006/11/28: mdeininger
 * some cleanups (new functions "parse_integer" and "parse_boolean")
 * removed the oi and bi attributes

2006/11/27: mdeininger
 * some work on the daemon-killing-issue; might be fixed now...

2006/11/26: mdeininger
 * tty code update (this should now behave pretty much the same as sysv)
 * ipc code cleanup
 * cleaned up some of the macro magic...
 * included the modules teppic posted on the wiki (thanks a lot! :D)

2006/11/25: mdeininger
 * (theoretically) added some code that should be able to send SIGHUP signals
   to eevrything spawned by a getty (currently commented out since i couldn't
   test it on my iBook)

2006/11/24: mdeininger
 * [pd]exec.[och] have been removed from the repository in favour of
   einit-modules/exec.h and einit-exec.c
 * added code to allow for wildcards in the attribute part of variable names
   in environment variables (requires the use of POSIX regular expressions)

2006/11/23: mdeininger
 * no need to link against pexec.o/dexec.o anymore (use einit-modules/exec.h)
 * more modules from rmh3093 (thanks man! =))

2006/11/22: mdeininger
 * the process collector finally does something useful (on linux, anyway...)

2006/11/21: mdeininger
 * added --wtf and --checkup as alternatives to --check-configuration
 * some layout changes to process handling, getting closer to work...
 * forgot to commit some modules earlier...
 * rmh3093 got his gdm/beryl setup working with a different module-definition
   for gdm :)

2006/11/19: mdeininger
 * added some more modules (creds to the gentoo forums :D)
 * some work on the process-handling framework
 * fixed bind-mounting (hopefully)

2006/11/18: mdeininger
 * added support for linux bind-mounts

2006/11/16: mdeininger
 * added check to prevent init from being run if it is not pid=1

2006/11/15: mdeininger
 * did some hacking on those splay trees... they kinda work as basic BSTs,
   but the splaying doesn't work

2006/11/14: mdeininger
 * API cleanups (scheduler and OS-dependant code)
 * relocated the hash-code to tree.h, API/ABI changes (uhash->stree)
 * started working on implementing splay-trees (doesn't work yet, isn't used)
 * need to change the module-system to use trees to sort the lmodule-struct
   by its rid (or the source-id...)

2006/11/11: mdeininger
 * that one segfault (it was in the gentoo-compatibility module)
 * incorporated some modules haader and lloeki wrote some time ago (so~rry!)
 * need to implement BST hashes
 * API change to hashdel() (only one argument needed now)
 * API change to hashfind() (needs another "options" argument now)

[2006/11/10: mdeininger: release, Version 0.12]

2006/11/10: mdeininger
 * parsing initng .ii files could be handy...
 * pattern matching for loading .so-modules has been implemented
 * new environment code added
 * compatibility-sysv-gentoo: module to include gentoo's profile.env
   (more uses for this module expected to come soon)

2006/11/09: mdeininger
 * live configuration updating (including pseudo-modules)
 * --scan-configuration has been reworked to be an ipc-command
   ("examine configuration")

2006/11/07: mdeininger
 * changes to the dhcp module, updated textual visualiser
 * damn i'm stupid, forgot to kill the manager-daemon on mounts!
   (udevd, unmounting problems, /dev, kinda makes sense...)
 * emitting EVE_CONFIGURATION_UPDATE
 * module scanning/adding cleaned up

2006/11/06: mdeininger
 * broadcast messages on shutdown/reboot

2006/11/05: mdeininger
 * warning/waiting on errors while shutting down has been implemented
 * advanced textual visualiser (you'll notice, trust me)
 * updated this evas-visualiser... still nothing fancy, but compiles

2006/11/03: mdeininger
 * shutdown-events

2006/11/02: mdeininger
 * wait-retry cycles for unmounting

2006/11/01: mdeininger
 * need a "uses"-attribute for modules
 * damn, broken configuration file
 * build-versioning
 * darwin fix
 * configuration parser: including directories now works
 * einit= kernel/environment variable

2006/10/30: mdeininger
 * bluetooth module updates from lloeki

2006/10/29: mdeininger
 * command line parametres updated (added --help and --ipc-command)
 * minor work on the interface-handling

2006/10/27: mdeininger
 * configurator changes
 * some modifications to (theoretically) allow a mode= paramtre on the kernel-
   command-line
 * fixed missing event-names

2006/10/26: mdeininger
 * random fixes all over the place (especially with mounting...)
 * Lloeki improved the cpufreq-module to work with multi-core/-CPU systems,
   and he also posted bluetooth modules (yay! =))
 * most signals are now being ignored

2006/10/24: mdeininger
 * more changes to the configuration file layout (now we only have einit.xml
   for the global profile and local.xml for local overrides. + sandbox.xml for
   overrides in sandbox-mode)
 * straddtoenviron() now converts non-alnum characters in the key to an
   underscore, this allows you to use all configuration file entries as
   variables in virtual modules
 * lots of variables and locations changed, do look into the new files. it
   should be easier to understand now, but you will need to reconfigure (!)

2006/10/23: mdeininger
 * static initialisation for more default ipc handlers
 * started to import some of the changes proposed by rmh3093
 * configuration entries are now preferred the right way 'round

2006/10/22: mdeininger
 * split the configuration into config-xml-expat.c (xml-specific) and config.c
   (generic)
 * some changes to allow for multiple/external configuration-modules
 * configuration files are now parsed if you emit an event of type 
   EVE_UPDATE_CONFIGURATION, the string of this event must be the filename to
   parse

2006/10/20: mdeininger
 * more verbose error checks in the default visualiser
 * did a little hacking for the network-devices-configuration

2006/10/18: mdeininger
 * credits to yoyo for the cpufreq-module.

2006/10/16: mdeininger
 * the sandbox.xml configuration file will only be installed if einit has been
   configured in sandbox-mode
 * structural changes to the event-system.
   (now: event-types are 32-bit integers, with the high 20 bits (x86) defining
    the subsystem this event belongs to, and the low/other 12 bits defining the
    actual event or request.)
 * ipc system updates

2006/10/15: mdeininger
 * minor bugfix in the configure script
 * einit-ipc will now spawn subthreads to handle IPC events.
 * general ipc improvements.

2006/10/12: mdeininger
 * added a "check configuration files only"-option to einit: --check-config
 * added acknowledgments and credits section to the manual.
 * added a note on einit --check-configuration to the documentation -- use it!
 * updated module definitions -- thanks haader and KKtm
 * TTYs should now import the environment variables in <shell />

2006/10/11: mdeininger
 * off to the promised new features for v0.11:
 * started with a new module for network configuration
 * changed the names on some of the source-files so they all follow a more
   logical pattern.

[2006/10/10: mdeininger: release, Version 0.10, first BETA]

2006/10/10: mdeininger
 * proper user/group handling for dexec/pexec

2006/10/09: mdeininger
 * extension to the event-system: module status changes now emit an event.

2006/10/08: mdeininger
 * removed the "label" fstab-source from the default list. it seems to do more
   more havoc than good due to lack of understanding.
 * oh yeah: more documentation. this should do for v0.10, now to fix more bugs.
 * fixed a bug in the module-logic code involving groups and related modules.
 * almost got proper "most"-type group-handling working

2006/10/05: mdeininger
 * more documentation updates
 * updated module definitions from KKtm (thanks a bunch ;) )

2006/10/03: mdeininger
 * updated documentation
 * some new services (dbus and kdm)
 * vis-text: the current module status is now displayed on the left, before the
   module name, also the module name is now the actual name (if available), not
   the rid.
 * cleaned up some name tags
 * combined kern-eth0 and kern-eth1 to kern-ethernet
 * some configuration relocation/cleanups
 * common-mount.c: will now symlink /etc/mtab to /proc/mounts on linux (some of
   the linux commands apparently enjoy recreating this, thus causing trouble
   since einit has no reason to actively maintain this, at least not on linux,
   since the kernel already maintains a copy of this)

2006/10/02: mdeininger
 * I'm trying to get the user's guide up to date for version 0.10

2006/10/01: mdeininger
 * module loaders may now specify reload(), reset() and cleanup() functions
   for modules they add to the system.
 * i did some extensive memory-leak-hunting, and i think i dramatically reduced
   the number of leaks in this code. (~11k marked as "definitely lost" last
   time i ran it in valgrind)
 * fixed most memory leaks (~6k definitely, ~2k possibly)
 * fixed a typo (d'oh)
 * the <prefer-* /> tags work again
 * (hopefully) fixed a reported bug related to inclufing header files that
   prevented the linux-mount module from building on some systems
 * fixed another minor double-free() bug

2006/09/30: mdeininger
 * einit now forks into two processes at startup: one to do the init-auto-wait,
   one to do what einit's supposed to do.
 * switched to semaphores on some functions, better handling of wait() (at
   least on system that support wait()-ing on other threads' childrean, i.e.
   at least linux >= 2.4 without uclibc and it seems to work flawlessly on
   osx 10.4, except that semaphores seem to use lots of CPU power...)
 * the osx bug has been resolved, apparently unnamed semaphores aren't
   supported
 * the epoweroff/ereset functions have been combined into one.
 * the configuration-code won't waste that much memory anymore.

2006/09/27: mdeininger
 * added support for some more mount flags

2006/09/27: mdeininger
 * enabling a group should now associate the correct modules with the group.
 * cleanups, conceptual changes
 * made tts comment/notice handler more robust

2006/09/26: mdeininger
 * enhanced documentation (a little)
 * minor cleanups

2006/09/22: mdeininger
 * cleanups
 * documentation updates
 * enhancements to group-handling
 * disabling groups still seems to work as it should...
 * need to slightly enhance some of the group-enabling code
   (seq=any/any-iop/most/all are all the same right now)
 * unloading modules seems to kill my box when trying to shut down... i'll
   deactivate the rmmods for now.

2006/09/20: mdeininger
 * more documentation
 * minor cleanups

2006/09/19: mdeininger
 * minor changes, fixes and adjustments
 * mkay, now it works on osx... and somehow, things got way faster, wtf?
 * i think i should resume commenting and documenting things ;)
   (vesselin, you're absolutely right :D)

2006/09/18: mdeininger
 weird. the module-logic code works pretty much flawlessly on linux, but
 crashes 99% on darwin. something seems to be wrong with the mutex-code.

2006/09/17: mdeininger
 * did some cleanups (tty.c, among other places)
 * there's some bugs in recursive disabling of modules.
 * mhh, i dare say stuff works as it ought to now (at least for en-/disabling)
 * fixed another stupid bug...

2006/09/15: mdeininger
 * the new module-logic code *almost* works
 * bugfixes in the textual visualiser
 * the new module-logic code is now at least as stable/functional as the old
   code ever was, so it's the default now. still a lotta bugs, but at least
   smaller than before, so it should be easier to get to work properly.

2006/09/14: mdeininger
 * enabling works now (mostly)

2006/09/13: mdeininger
 * fixed a stupid bug that caused a SIGBUS
 * slight progress with module-logic.c

2006/09/12: mdeininger
 * fixed a bug in event.c that caused an infinite loop.
 * turned strinset() into inset()
 * new function: service_usage_query()
 * the module subsystem uses a new record-keeping method [I'm not sure if the
   current version will boot... maybe you should postpone updates until i get
   better module logic together...]
 * new functions: cfg_getstring() and cfg_getnode().
   the id paramtre for cfg_getstring can either be a node id, or of the form
   node-id/attribute-name. the latter is primarily intended for environment
   variable definitions.
 * i think i made some progress with the new module-planning code

2006/09/11: mdeininger
 * support for lm-sensors
 * support for festival (tts)
 * the event-system now uses uhash-es for the list of exported functions
 * new event-helper functions: notice(), evdup(), evinit() and evdestroy()
 * support for feedback via TTS (currently only for notices)
 * feedback-events are now processed in the background (in their own threads)
 * the module-logic code needs a workover. badly.

2006/09/10: mdeininger
 * added some code to allow for fsck'ing dirty filesystems (need to update
   metadata-reader to actually mark filesystems as dirty)
 * changed mount/local to mount/critical (mount/local should only be used for
   storage and other non-critical mounting actions)
 * minor fix (lots of inaccessible devices would be mounted in auto-fstab-mode)
 * reiserfs-metadata support
 * checks for dirty filesystems (ext2/3/reiserfs)
 * forgot some changes in the default configuration

2006/09/08: mdeininger
 * removed an unnecessary header file from einit-hostname.
 * changed some design parametres: encryption should be handled transparently
 * added mount/critical (to replace mount/local as a requirement for programs,
   since mount/local should rather mount the other things. that way, the
   system can start faster)

2006/09/07: mdeininger
 * added a function prototype to sort sets
 * some cleanups in common-mount.c
 * made sure deeper paths get mounted after lower paths. (i.e.: /usr/portage
   after /usr) it's probably way too slow, but hey, it works.
 * BUG: whenever einit tries to mount something without knowing the filesystem,
   things go weird.

2006/09/06: mdeininger
 * fixed a bug that caused some update steps to be skipped

2006/09/05: mdeininger
 * fixed a nasty bug in setcombine()
 * fixed the daemon definition for entrance -- it works again with the latest
   entrance from CVS
 * put the module planning logic into its own file: module-logic.c
 * added a new module that sets host- and domainname: einit-hostname.c

2006/09/03: mdeininger
 * combined the /dev, /proc and /sys mounting steps into "mount/system"
   (better for interoperability, theoretically at least)
 * the blockdevice- and metadata-scans performed by common-mount are now optional
 * vis-text can now be configured to automatically switch to a specified VT
   upon being enabled [linux only]
 * console messages don't clutter up tty1 anymore [sometimes, anyway]

2006/08/28: mdeininger
 * I tried to add NFS support today, but that's a real bitch it seems. for now,
   eINIT will pexec() /bin/mount to do all the dirty work with nfs.
 * common-mount now also keeps track of major/minor block device-numbers for
   added block devices (in order to (re-)construct missing device nodes)
 * the add_* functions now detect dupes
 * common-mount will now guess some entries of your fstab based on disk-labels

2006/08/20: mdeininger
 * fixed some memory allocation issues in the scheduler and einit-control
 * added an ipc function "modules ls_modules"
 * removed the mod_ls() function
 * some fixes in the module tsk planning logic
 * enabling/disabling modules using erc now works properly
 * changed the makefiles to accept ${DESTDIR} for gentoo
 * fixed the missing expat dependency in the gentoo ebuild

2006/08/19: mdeininger
 * changes to ./configure [need crosscompile support]

[2006/08/06: mdeininger: release, Version 0.02]

2006/08/06: mdeininger
 * trying to make the default textual visualiser better
 * the default visualiser now looks a lot cleaner
 * fixed some bugs with parallelism and memory management

2006/08/05: mdeininger
 * fixes for Darwin
 * fixes for Linux/x86_64
 * added console redirection support (for Linux)
 * optimised some portions of the module-loader code
 * fixes in common-mount.c: somehow directories and sockets seem to be related
   on Darwin...
 * implemented the disable() function in tty.c and added some code to allow for
   specifying which device a tty-command is to be run on (not tested)
 * some improvements in the module loader logic

2006/07/30: mdeininger
 * reworked cfgnodes to use the hash functions
 * fixed a bug in mod-daemon that caused a segfault due to resurrected
   daemoni lacking a pointer to their module.
 * the vis-text module will now redirect the std(in|out|err) files
 * pexec() and daemon_start() now use the stderr-fd for stdout
 * i have an idea how to fix some of the memory-leaks involving hashes...

2006/07/29: mdeininger
 * combined the update_* functions in common-mount.c into update()
   all called functions now get the &mcb pointer as their first argument

2006/07/26: mdeininger
 * feedback-system workover
 * the dummy module and mod-sysv.c are no longer being maintained and have been
   removed from the the repository
 * concept configuration for redirecting text input/output

2006/07/25: mdeininger
 * different handling for X-Sessions
 * fixes/improvements to mod-daemon and mod-exec [they now handle variables the
   same way as the tty-module]
 * improved mount-code [options]
 * some changes that'll be used for a workover of the feedback-system

2006/07/24: mdeininger
 * cleanups n stuff in mod-exec, mod-daemon and tty.
 * the <shell /> tag now allows you to specify a default environment for
   anything you'd wish to call.

2006/07/23: mdeininger
 * some changes to the str2set function.

2006/07/22: mdeininger
 * put the new setdup() function to use in config-xml-expat

2006/07/20: mdeininger
 * added a shell-type module to support swap-devices
 * some more changes that'll be needed for some changes in the set-type
  functions

2006/07/19: mdeininger
 * some fixes; some memory management improvements to keep the resident
   memory size smaller (at the expense of some CPU cycles)
 * started on some changes to the set-code

2006/07/18: mdeininger
 * added a control-block to the common-mount module to propagate to modules
   that rely on it.

2006/07/17: mdeininger
 * the mtab and fstab files get parsed completely now
 * the IPC commands "mount ls_fstab" and "mount ls_mtab" now work
 * unmounting should now actually be done (on Linux it even has backup-
   strategies if the device is still in use: umount->force-umount->remount r/o+
   detach)

2006/07/16: mdeininger
 * added a new flag to ./configure: --use-posix-regex
 * modified the find_block_devices_recurse_path() function to utilise regex-
   functions if configure was told to use these (added so that not all devices
   get scanned in the read-metadata step; on my box there's ~4000 block device-
   nodes before udev is up, which means there's lots of things being done that
   only waste cpu cycles)

2006/07/15: mdeininger
 * new functions to "register" functions for other modules to use (in event.h)
 * lotsa changes with the automounter (it now consists of more than just one
   module and makes use of the function_register/function_find system.
 * putting the SANDBOX-#define to better use

2006/07/12: mdeininger
 * updated default configuration (no real changes)

2006/07/11: mdeininger
 * did some preparations to incorporate the event system into the mount system.

2006/07/09: mdeininger
 sorry, don't get to much just now
 * added a new flag to ./configure

2006/06/25: mdeininger
 * added a "sandbox"-flag to configure: sets the prefix to `pwd`/sandbox and
   #defines SANDBOX
 * did some cleaning (I had already done this but... you know how sf.net CVS
   had some trouble)
 * I was thinking for a while, and now I'm pretty sure that einit needs some
   sort of event-system, so, I added that and made some "improvements" to the
   current IPC code.

2006/06/19: mdeininger
 whoops, my new playstation 2 seems to keep me fairly occupied... anyway, here
 goes:
 * i'm investigating some issues with mod-daemon that seem to prevent einit
   from shutting down properly; I think i fixed that bug.

2006/06/11: mdeininger
 * some more restructuring
 * need a list with filesystem capabilities, so I started on a new XML file
   that contains this information
 * internal fstab: added the before-mount, after-mount, before-umount, after-
   umount and manager attributes; they're pretty much self-explanatory
 * the mount/local step should work now
   NOTE: mount options are still being ignored. all of them. automatic device-
   to-mountpoint matching still doesn't work either. and still no processing of
   /etc/mtab, /proc/mounts or the legacy /etc/fstab.

2006/06/10: mdeininger
 * created the global variable osinfo that gets filled out via uname.
 * some work on the automounter
 * reading labels and uuid from ext2/3 filesystems works properly now.
   NOTE: these ext2 uuids are really weird, took me a while to figure out how
   they work...
 * first success: mounting the root filesystem with linux-mount worked just a
   second ago

2006/06/08: mdeininger
 * started moving some things from linux-mount to common-mount
 * added a bsd directory to contain bsd-specific modules.
 * new function: call_functions_in_set()

2006/06/07: mdeininger
 * created a file src/modules/common-mount.c to contain parts of the automounter
   that would be of interest to other implementations as well
 * moved pexec.h
 * moved some sources out of mod-daemon.c into dexec.[ch] just like i did with
   pexec.[ch] -- it could come in handy with the automounters.

2006/06/05: mdeininger
 * added some structs that should be able to hold all info the fstab provides
 * added default configuration for fstab

2006/06/04: mdeininger
 * [module.c] i accidentally had the configure() functions in modules called after
   the scanmodules() functions; this has been fixed
 * created some functions to search for block devices
 * there's one weird bug in the str*del() functions (or the mod() function) that
   seems to be able to cause a double-free

2006/05/31: mdeininger
 * temporary workaround for module groups that get cut down to a single module.

2006/05/28: mdeininger
 * updated concept configuration for automatic mounter
 * added a very basic gentoo ebuild

2006/05/27: mdeininger
 * that stuff about what's already being provided and what isn't needs to be reworked
 * added a placeholder file for a linux-specific filesystem mounter

2006/05/26: mdeininger
 * i implemented these "groups" during the last few days; it seems to work agreeably
   now (except for defining members in the configuration files)
 * just got reading group atoms from the configuration to work
 * there had been a bug in cfg_findnode

2006/05/23: mdeininger
 * had flawed logics in mod-daemon

2006/05/22: mdeininger
 * I was cleaning /var/run a tad too much...

2006/05/21: mdeininger
 * this darn piping still ain't working properly... i commented out the code for it

2006/05/19: mdeininger
 * relocated the pexec() function into its own c-file. might be useful to other
   modules as well.
 * added the prepare="" & cleanup="" attributes to mod-daemon and the uid= and
   gid= attributes to mod-daemon and mod-shell elements. they do what you'd expect
   them to, hopefully...
 * you can now manipulate environment variables in tty-entries

2006/05/18: mdeininger
 * The dependency calculations need a workover.
 * added the <include /> tag. use this to instruct einit to load other sub-
   configuration files.
 * tried a different approach at figuring out the end of the pipe in mod-exec.c

2006/05/15: mdeininger
 * Introduced two variables to control the edje feedback module.

2006/05/14: mdeininger
 * I created a logo for eINIT and a small website. + I started on an edje-theme.

2006/05/11: mdeininger
 * [module.c] fixed a bug that caused backup-modules and regular modules to be
   started in parallel; also did some cleanups
 * added einit-utmp-forger.c: a module to fake utmp entries (as they're quite
   useless to eINIT, but some programs depend on them)
 * added einit-efl-feedback-evas-edje.c: I always wanted to have my system boot
   visualised by e17 libraries, didn't you too?
   well, not that it was working, anyway :D

2006/05/10: mdeininger
 * [scheduler.c] replaced the spid and dead_orphans sets with linked lists
 * let's try a different approach... still using mutexes, but creating an extra
   thread from within the signal handler so that the signal handler can't dead-
   lock
 * this has definitely made the problem more scarce...
 * I found out that all these lockups were more than one problem combined. one of
   the last remaining bugs seems to be with the pipe that is to read the output
   of called commands from mod-exec... seems like sometimes either sh doesn't
   close the pipe or mod-exec seems to skip the eof... wicked... commenting out
   the pipe-section seems to stop the deadlock from occuring. (i stress-tested
   for about half an hour; it didn't crash so i suppose it works. now to figure
   out how this pipe-problem is to be fixed...)

2006/05/09: mdeininger
 * [vis-text.c] added ANSI color-codes to indicate success/failure
 * [tty.c] added a configuration flag to tell einit-tty whether or not to manage
   utmp records
 * stress-testing: there's this one very wicked bug in mod-exec... ><
 * and another one in mod-daemon

[2006/05/09: mdeininger: first public release, Version 0.01]

2006/05/09: mdeininger
 * the ipc() function will now try to unlink control-socket's file if it already
   exists. also it will chmod() the socket to the integer value specified in the
   <control-socket /> configuration option (yes, it's both a string and integer
   value at the same time. this is by design)
   we'll have to do some other security checks, although the chmod() method
   should work on linux if the socket is created by root and chmod()-ed to 0600.
 * created a new script to create release-tarballs: makerelease
 * extended the way you can define variables in your configuration file:
   attributes bi= and oi= can now be used to define "binary integers" and "octal
   integers"
 * i moved the ipc system to an external module. It just seems to be the clean
   thing to do.
 * the main thread is now the scheduler-thread

2006/05/08: mdeininger
 * mod-exec.c: you can now pass environment variables to pseudo-modules

2006/05/07: mdeininger
 * better (i.e. more complete) default configuration
 * fixed a bug with hashes.
 * been checking on some bugs with valgrind: no allocation errors left, only some
   memory leaks left

2006/05/06: mdeininger
 * bad bug! baaad stupid bug in scheduler

2006/05/04: mdeininger
 * fixes: some generic ones, some logics flaws, some in connection with uclibc
 * watchers are now spawned as a separate process
 * note: i just figured out that this still doesn't work with uclibc due to
   threading issues.
 * i found a race condition where the fork() calls would first let the new child
   do his thing, and then if it died before the main thread got his control back
   the sigchld would arrive before the sched_watch_pid() was called, thus making
   the scheduler ignore the watcher... using sleep(1); after forking is a cheap
   workaround, i really oughta find something better.
 * it seems that using SIGSTOP and SIGCONT is better a solution...
 * i just had a better idea, which involves the scheduler keeping track of dead
   "orphans"
 * laid out that documentation

2006/05/03: mdeininger
 * renamed power.c to einit-control.c
 * more ipc commands
 * i think i fixed the bug that caused new schedule entries to go amiss.
 * extra support for daemoni
 * ah, me silly, I forgot the install command in the modules Makefile

2006/05/02: mdeininger
 * whoops, forgot a library...
 * new subsystem: scheduler.[ch]
 * power off/reset should work now (on linux that is)
 * signal handlers are bitches >D
 * yet they work now... mostly; still gotta figure out how SIGINT is raised on
   ctrl+alt+del, although I'd guess its si_code should be SI_KERNEL...

2006/05/01: mdeininger
 * more enhancements to IPC

2006/04/30: mdeininger
 * new file: power.c
 * revamped Makefiles
 * some work on IPC

2006/04/27: mdeininger
 * spinlocks suck -- so we won't be using them anymore
 * okay, i just found out i've got a huge memory leak somewhere... damn ><
   maybe not that big after all, it appears that merely calling pthread_create
   increases einit's data size by 8m... weird

2006/04/26: mdeininger
 * added the --with-include= option to configure
 * removed the threading code for feedback. it really is useless.
 * introduced safe malloc/calloc/realloc/strdup functions
   (emalloc, ecalloc, erealloc, estrdup)
 * loading errors are now properly detected as such

2006/04/25: mdeininger
 * I think I fixed the race-condition problems in mod() with threading.
 * I was working a bit on that dependency-hell for disabling
 * yay, seems to work so far!

2006/04/24: mdeininger
 * almost there...
 * new function to delete dupes in string-sets (strsetdeldupes())
 * I think recursive dependencies work OK now (for task=MOD_ENABLE)
 * mod_plan_commit() works in parallel now (where applicable)

2006/04/23: mdeininger
 * fixes/changes for freebsd/darwin and mod_plan_ls()
 * one step closer to recursive dependencies

2006/04/21: mdeininger
 * renamed pl* and slist* functions to set_* ones. seems more logical...
 * introduced the macro status_update(): use this in your module whenever you
   want to tell einit that your status has changed.
   I think using threading just to do feedback-updates wasn't a good idea to
   begin with, I'll have to revise that... this macro allows me to do so easily.
 * mod_plan_restructure() -- it works... sorta, anyway
 * fixed configure to work with FreeBSD's sh

2006/04/20: mdeininger
 * sample configuration for ttys
 * mod() is now a little more verbose when no feedback-module has been enabled
   (in DEBUG-mode, that is)
 * added tty.c -- will be responsible for getting the tty lines up and running.
 * some changes to config-file parsing
 * ttys should work now.

2006/04/19: mdeininger
 * agh, typos
 * there's no need for the mod_configure()/mod_cleanup() functions anymore
 * mod-sysv.c can now actually *do* something :D (wait, that means I can
   actually start using this app soon... yays)
 * added mod-exec.c: for "pseudo-modules" that can be done in a handful of
   lines of script.
 * added a new parameter to cfg_findnode(): the thir parameter (base) tells
   cfg_findnode what node to start from (use NULL to start from the first one)
 * hey... things are finally working out :D

2006/04/18: mdeininger
 * changes to mod_plan*
 * removed everything deptree-related
 * fixed some logics flaw
 * introduced <prefer-* /> variables: use these to express user-preferences for
   certain modules (s="rid1:rid2:...")
 * removed the <feedback /> variable; it's redundant with the freshly-introduced
   <prefer- /> concept: <prefer-feedback s="" /> will do exactly the same, and
   a little more :D

2006/04/15: mdeininger
 * forgot some header-files

2006/04/13: mdeininger
 * did some cleanups
 * I had an idea about getting a plan of what to load/unload laid out...
 * [utility.[ch]] some generalisation to the functions that work with null-
   terminated arrays.

2006/04/06: mdeininger
 * some changes to the STATUS-constants
 * new utility-function: cfg_getpath(): looks for a string-type variable in the
   configuration-variables and returns it adding a slash at the end if necessary
 * re-implemented mod_enable() and mod_disable() as macros.
 * new debugging-function: mod_ls_deptree()
 * better check for the filetype in mod-sysv.c and module.c

2006/04/05: mdeininger
 * new feedback module: vis-curses.c: uses curses
 * feedback modules now need enable()/disable() functions
 * some minor enhancements to vis-text.c
 * [module.[ch]] mod_enable() and mod_disable() has been put together into one
   function: mod();

2006/04/04: mdeininger
 * the sf.net guys claimed CVS was going to be back online soon, so let's resume
   hacking...
 * [utility.[ch]] refinded some functions to work with string-sets.
 * changed all references to "dpl" to "slist" as this makes more sense.
 * added another parameter to cfg_findnode(): an int that you can use to specify
   node-flags that have to be set.

2006/03/30: mdeininger
 * [module.[ch]] I renamed the next/down members of mdeptree to left/right
 * [config.h, config-xml-expat.c] been working a little on getting the
   configuration read properly.
 * [main.c] new function: switchmode(): will switch mode (~runlevel)

2006/03/29: mdeininger
 * changed a little about how the variables get defined in the config file:
   it's now <variable-name stuff= />
   seems cleaner to me

2006/03/28: mdeininger
 * whoops, the license-statement in some files was fecked up
 * [utility.[ch]] str2dpl(): converts a string to a double-pointer-array
 * [utility.[ch]] strindpl(): check if a string is in a double-pointer-array
 * [module.c] mod_create_deptree(): finding candidates now works
 * in order to work on the module-dependency-tree things, we need some example-
   modules. let's see if we can make some up...
 * new directory: src/modules/linux: linux-specific modules
 * new source-file: src/modules/linux/linux-sysconf.c: linux-specific
   system-configuration should all be put in here.
 * [config-xml-expat.c] parsing is a little... "deeper" now with the possibility
   to specify "variables" in the configuration file using the syntax <var id= />
   and any of the attributes b= s= or i= (for a boolean, string or an integer-
   value respectively)

2006/03/27: mdeininger
 * aight, let's clean up some of the more confusing things about modules...
   specifically, load()/unload() should really be enable()/disable()

2006/03/26: mdeininger
 * [module.h, vis-text.c] new member to struct mfeedback
 * changes to the configure()-function's definition, it's now being checked for
   and there is also a cleanup() function

2006/03/25: mdeininger
 * [module.c] fixed some typos
 * pthreads is now a real dependency
 * $RDYNAMIC in config.mk and configure
 * dynamic linking with back-references is a friggen bitch...!
 * [module.[ch]] new function: mod_create_deptree()
 * [utility.[ch]] new source files for utility-functions
 * [module.[ch]] new function: mod_free_deptree()

2006/03/22: mdeininger
 * I was about to work on that threading for the comment-function, but -- of
   course -- I seem to be unable to complete this today due to... interruptions..
 * first successes with a watcher-type comment-thread!

2006/03/21: mdeininger
 * [dummy.c] dummy functions
 * [module.h] new struct mfeedback {}
 * interface changes

2006/03/12: mdeininger
 * [vis-text.c] been working a little on the comment()-function
 * fixed some typos
 * fixed a bug in mod-sysv.c that caused free()'d memory to be used

2006/03/11: mdeininger
 * changed some things about variable initialisation (guess I was being stupid earlier...)
 * [config.h] some restructuring...
 * [vis-text.c] textual feedback module
 * fixed module typing
 * [config.h, config-xml-expat.c] new interface-functions
 * [config-xml-expat.c] unknown nodes will now be saved in memory

2006/03/10: mdeininger
 * [mod-sysv.c] added load() and unload() prototypes
 * renamed mod_lsmod() and mod_addmod() to mod_ls() and mod_add()
 * [module.[ch]] added the mod_load() and mod_unload() functions

2006/03/08: mdeininger
 * [module.[ch]] mod_addmod (): changed some parameters;
 * new interface for module:scanmod() functions now includes a *mod_addmod()
 * [module.c] fixes in mod_freemodules();
 * [mod-sysv.c] loads init-scripts as pseudo-modules

2006/03/08: mdeininger
 * [main.c] removed the erroneous fsync() calls.
 * [module.[ch]] has a new function: mod_lsmod()
 * [mod-sysv.c] now adheres the DEBUG-flag

2006/03/07: mdeininger
 * [default.xml] adjusted the default path for modules
 * [configure] fixed a logics-flaw (make depend, then make clean)

2006/02/28: mdeininger
 * [configure] some more magic: will define POSIX/DARWIN depending on what sys you try to run it on
   * new option --enable-sysv: it's not activated by default now...
 * [sysv.c] moved to its own directory
 * general structural changes

2006/02/23: mdeininger
 * [module.c] made some output conditional
 * [bitch.c] yes, finally some bitchin'
 * [Makefile]s make install now works properly
 * [configure] the script accepts some parameters now: --debug, --prefix and --help

2006/02/20: mdeininger
 * started on mod-sysv.c (sysv compatibility)
 * working on that module-loader...

2006/02/18: mdeininger
 * more makefile magic *g*
 * figured out how to make this thing work on macs... well, I'm still being a heretic by naming the modules
   .so even on macs but hey... who cares about filenames, really? :D
 * made a very small configure script...

2006/02/16: mdeininger
 * more work on the module loader
  (particularly on the way modules identify themselves)

2006/02/14: mdeininger
 * been working on the module-loader
 * added a file that'll contain functions for error-reporting (bitch.c, along
   with bitch.h)

2006/02/13: mdeininger
 * some work on the xml-config-parser
 * restructured the default configuration file
 * added src/modules/dummy.c

2006/02/10: mdeininger
 * initial CVS import

2006/02/08: mdeininger
 * decided not to use autoconf, automake, libtool & gettext

2006/02/07: mdeininger
 * well, i was gonna do something today, but I was distracted a lot by work,
   so progress has only been marginal

2006/02/06: mdeininger
 * started working on this
 * main.c, module.c, config-xml-expat.c, module.h, config.h
 * started by creating a default configuration
