Remove __assert_fail()

The netplug code uses the assert() macro in various places. In glibc
internally, assert() uses a function called __assert_fail() to print a
message and abort. Relying on internal glibc details, netplug
re-defines __assert_fail() in the hope that it will get called instead
of glibc internal version.

This attempt:

 * Doesn't work with uClibc, which doesn't use any __assert_fail()
   function at all. It doesn't fail to build, but it is entirely
   useless.

 * Fails to build with musl, which also defines __assert_fail(), but
   with a different prototype.

We simply remove the __assert_fail() implementation, so that the C
library implementation of assert() just does its normal work. The only
functionality lost is that the message is displayed on the standard
output rather than in netplug's logs (and this was only working with
glibc anyway).

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Index: b/lib.c
===================================================================
--- a/lib.c
+++ b/lib.c
@@ -199,21 +199,6 @@
     return x;
 }
 
-
-void
-__assert_fail(const char *assertion, const char *file,
-              unsigned int line, const char *function)
-{
-    do_log(LOG_CRIT, "%s:%u: %s%sAssertion `%s' failed",
-           file, line,
-           function ? function : "",
-           function ? ": " : "",
-           assertion);
-
-    abort();
-}
-
-
 /*
  * Local variables:
  * c-file-style: "stroustrup"
