It was a fairly productive day today, despite waking up feeling like death warmed over. I've pretty much recovered from Friday night's meltdown [1]—my Stupid Twitter Project [2] is back up and running and I fixed the rather bad display bug in mod_blog [3] (that was just a one-line fix).
Work on the graylist program [4] continues, albeit at a slow pace. While working on it, I discovered that some library code I wrote (which is basically a replacement for ANSI (American National Standards Institute) C's stdio.h) has problems with the whole “end of file” concept. While that sounds bad, it's not, because the whole concept of “end of file” under Unix is rather undefined. Normally, you detect the “end of file” under Unix by calling read() and if you get back 0 bytes, then you can assume there's nothing more of the file to read—you've reached the “end of file.”
But depending upon how things are set, and what type of device is the target of the read() call, getting back 0 bytes doesn't necessarily mean there's nothing more to read. It just means there's nothing more to read right now.
That, coupled with the fact that you can't normally detect “end of file” without actually trying to read the file (if in fact, it is a file) means that having a function to check to see if you are at “end of file ” (like feof()) is a rather difficult thing to get correct (which gets around to the question of why I felt it was necessary to write my own replacement for stdio.h—because I needed the ability to treat strings as files and you don't get that under stdio.h).
I'm hoping to get the initial version of the graylist software up and running in the next few days.