Add __android_log_assert.

Called from android logging macro used in mesa.

BUG=358029

Review URL: https://codereview.chromium.org/321353002

git-svn-id: http://src.chromium.org/svn/trunk/src/third_party/hwcplus@277862 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
diff --git a/src/hwcplus_util.c b/src/hwcplus_util.c
index 57c4519..1c7873a 100644
--- a/src/hwcplus_util.c
+++ b/src/hwcplus_util.c
@@ -6,8 +6,9 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <hardware/hardware.h>
+#include <android/log.h>
 #include <cutils/properties.h>
+#include <hardware/hardware.h>
 
 #define LOG_BUF_SIZE 1024
 
@@ -64,6 +65,33 @@
     return __android_log_write(prio, tag, buf);
 }
 
+void __android_log_assert(const char* cond,
+                          const char* tag,
+                          const char* fmt,
+                          ...) {
+    char buf[LOG_BUF_SIZE];
+
+    if (fmt) {
+        va_list ap;
+        va_start(ap, fmt);
+        vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
+        va_end(ap);
+    } else {
+        /* Msg not provided, log condition.  N.B. Do not use cond directly as
+         * format string as it could contain spurious '%' syntax (e.g.
+         * "%d" in "blocks%devs == 0").
+         */
+        if (cond)
+            snprintf(buf, LOG_BUF_SIZE, "Assertion failed: %s", cond);
+        else
+            snprintf(buf, LOG_BUF_SIZE, "Unspecified assertion failed");
+    }
+
+    __android_log_write(ANDROID_LOG_FATAL, tag, buf);
+
+    __builtin_trap(); /* trap so we have a chance to debug the situation */
+}
+
 int property_get(const char* key, char* value, const char* default_value) {
     printf("property_get %s\n", key);
     const char* r = default_value;
@@ -72,4 +100,3 @@
     strncpy(value, r, PROPERTY_VALUE_MAX);
     return strlen(r);
 }
-