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—my Stupid Twitter Project is back up and running and I fixed the rather bad display bug in mod_blog (that was just a one-line fix).
Work on the graylist program 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 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
I'm hoping to get the initial version of the graylist software up and running in the next few days.