This package is built on ares 1.1.1 (written by Greg Hudson). I've decided to
put together and release my own ares archives since the ares maintainer
doesn't want these improvements.

The package is called 'c-ares' for now since I (Daniel Stenberg) want this for
use within the curl project (hence the letter C) and it makes a nice pun.

* October 24, 2003. Daniel Stenberg:

  Added ares_version().

Version 1.0-pre1 (8 October 2003)

- James Bursa made it run on RISC OS

- Dominick Meglio made it run fine on NT4

- Duncan Wilcox made it work fine on Mac OS X

- Daniel Stenberg adjusted the windows port

- liren at vivisimo.com made the initial windows port
