Read a file line by line in C – secure fgets idiom

A pretty common thing to do in any program is read a file line-by-line. In other interpreted or managed languages this is trivial, the standard libraries will make it super easy for you. Just look at how simple it is to do this in Python or Perl or even Shell. In C its a little [...]

mkpath() – `mkdir -p’ alike in C for UNIX

Most people are probably familiar with the UNIX utility, mkdir(1). The mkdir utility makes directories (surprise surprise). There is a matching mkdir(2) system call available in the POSIX standard C library. The usage is pretty straightforward – how ever, the command-line executable, mkdir(1), supports a useful option -p to “create intermediate directories as required”. Its [...]

OpenBSD’s omalloc: Bug and buffer overflow detection

For quite a long time now, OpenBSD has, among numerous exploit mitigation techniques, had a very strict mmap()-based malloc() implementation. Recently re-written by Otto Moerbeek, it is even harsher now. I find that this feature makes OpenBSD one of the best platforms to develop C programs on. If you have a double-free, use-after-free, off-by-one, or [...]

sys/queue.h sucks on Linux

I was vaguely aware that the copy of sys/queue.h on Linux systems was old. However, I’d forgotten it actually lacks some important features of the modern version shipped with BSD systems. There is a very common pattern of usage with linked lists, which the Linux version of queue.h doesn’t support too easily – iterating over [...]

Unworkable 0.4 released

I have just tagged, packaged and announced version 0.4 of my BitTorrent implementation, Unworkable. Here are the release notes: Implemented sending peer keep-alives. Trace log now contains timestamps. Make us more tolerant of intermittent tracker failures. Added support for Arch Linux. Fixed an off-by-four bug which could cause segfaults on some platforms. Fix zero padding [...]