libowfat - reimplement libdjb

Recent news

[20121102] Version 0.29 [GPG sig] (diff [GPG sig]). Here are the changes

[20081115] Version 0.28 [GPG sig] (diff [GPG sig]). Here are the changes

[20071218] Version 0.27 [GPG sig] (diff [GPG sig]). Here are the changes

[20070824] Version 0.26 [GPG sig] (diff [GPG sig]). Here are the changes

[20070112] Version 0.25 [GPG sig] (diff [GPG sig]). Here are the changes

[20050809] Version 0.24 [GPG sig] (diff [GPG sig]). Here are the changes

[20050311] Version 0.23 [GPG sig] (diff [GPG sig]). Here are the changes

[20050311] Version 0.22 [GPG sig] (diff [GPG sig]). Here are the changes

[20050130] Version 0.21 [GPG sig] (diff [GPG sig]). Here are the changes

[20040729] Version 0.20 [GPG sig] (diff [GPG sig]). Here are the changes

[20040328] Version 0.19.2 [GPG sig] (diff [GPG sig]). Contains another build fix.

[20040327] Version 0.19.1 [GPG sig] (diff [GPG sig]). Contains a build fix.

[20040327] Version 0.19 [GPG sig] (diff [GPG sig]). Here are the changes.

[20040226] Version 0.18 [GPG sig] (diff [GPG sig]). Here are the changes.

[20040219] Version 0.17 [GPG sig] (diff [GPG sig]). Here are the changes.

[20031006] created mailing list (email libowfat-subscribe(at)fefe.de to subscribe).

[20030912] Version 0.16 [GPG sig] (diff [GPG sig]). Here are the changes.

[20030608] Version 0.15 [GPG sig]. Here are the changes.

[20021004] Version 0.14 [GPG sig]. Avoids bus error in byte_copy, fixes byte_rchr, and adds case, iopause, tai+taia, openreadclose and ipv6-enhanced dns sub-libraries. I also completed the man page coverage.

[20020710] Version 0.13 adds an uninstall target, an uint16_read API, buffer_putnlflush, and fixes fmt_strn with destination NULL, a few man page inconsistencies and bugs in test/uudecode.c.

[20020503] Version 0.12 adds the textcode API which contains scan_* and fmt_* style functions for the following text encodings: base64, uuencode, quoted printable, urlencode and yenc.

[20020415] Version 0.11 fixes scan_ip6, extends the uint32 API and adds two more man pages.

[20020322] Version 0.10 fixes the socket routines (cut-and-paste error).

[20011126] Version 0.9 fixes bugs in fmt_str, read buffers, byte_copy and expands and updates man pages.

[20011125] Version 0.8 improves the portability and fixes a few bugs.

[20011013] Version 0.7 adds buffer_putspace, make scan_ip6 transparently scan ipv4 addresses, speeds up byte_copy.

[20010614] Version 0.6 adds buffer, fixes fmt_ulong (did not output 0 properly), and adds a mmap library (idea from Ingo Oeser).

[20010119] In the grand tradition of libiberty, the project has been renamed to libowfat.

[20010115] Version 0.5 adds man pages and does a few cosmetic changes.

[20010114] Version 0.4 adds stralloc.

[20010111] Version 0.3 adds the open, uint16, uint32 and uint64 interfaces.

Version 0.2 adds the str, scan and fmt interfaces.

The project just started. Looks good so far (I implemented byte_* from byte.a). My implementations are even slightly faster on my x86-linux box.

CVS access

  $ cvs -d cvs -d :pserver:cvs@cvs.fefe.de:/cvs login
  (Logging in to cvs@cvs.fefe.de)
  CVS password: [just hit return]
  $ cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat
  [...]

What is it

Short answer: reimplement libdjb under GPL.

Long answer: One of the best ways to learn good programming practices is to read others people's code. I have read the source code from a lot of people. One of the most inspiring moments of my career as C programmer was to look at Dan Bernstein's code. While most programmers stumble about bad APIs throughout their life, Dan started not only question them, but he defined new and better APIs and implemented them.

This code is only used in his own projects so far. The main reason is that Dan does not package them in a convenient way, but many people have problems with Dan's (lack of) licensing statements. To get rid of the first reason, I started to extract the libraries from Dan's code a while ago. I called that project libdjb and used the code in my own programs. I even extended the API at a few points.

While the licensing issue did not concern me at first, Debian would only add my programs to the non-free section if at all. I also got several inquiries about the licensing state of my code.

So I decided to reimplement libdjb to use Dan's interfaces (with my earlier extensions) but my implementation and place the result under the GNU General Public License.

What works so far

Most of the API has been used successfully. I expect libowfat to be pretty much stable. However, from time to time bugs are found, so don't take this as a guarantee.

See also