summaryrefslogtreecommitdiffstats
path: root/liblog
diff options
context:
space:
mode:
authorChris Pearson <christopherx.c.pearson@intel.com>2010-06-02 16:25:35 -0700
committerJean-Baptiste Queru <jbq@google.com>2010-07-16 07:56:03 -0700
commit19299904343daf191267564fe32e6cd5c165cd42 (patch)
tree5dcbf51c82ad371c25614f76f03e7caf3caa0aab /liblog
parente3f6a6e1d3e52c1d25d55b6556cc1f2c0598b576 (diff)
downloadsystem_core-19299904343daf191267564fe32e6cd5c165cd42.zip
system_core-19299904343daf191267564fe32e6cd5c165cd42.tar.gz
system_core-19299904343daf191267564fe32e6cd5c165cd42.tar.bz2
Fixed LOG_ASSERT() compilation errors in native debug builds.
Invoking LOG_ASSERT, LOG_ALWAYS_FATAL or LOG_ALWAYS_FATAL_IF variadic macros without the printf format string arg caused compilation errors because the variable arg list (__VA_ARGS__) was eventually passed to __android_log_assert() func in place of a required parameter. This error only occured in debug builds because LOG_ASSERT() is a no-op in release builds. This change allows debug builds to succeed. Change-Id: I7e7b7de3e501133468ce083e0e0d6e699dd59667 Signed-off-by: Chris Pearson <christopherx.c.pearson@intel.com>
Diffstat (limited to 'liblog')
-rw-r--r--liblog/logd_write.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/liblog/logd_write.c b/liblog/logd_write.c
index 9923bba..a0a753b 100644
--- a/liblog/logd_write.c
+++ b/liblog/logd_write.c
@@ -56,7 +56,7 @@ static int log_fds[(int)LOG_ID_MAX] = { -1, -1, -1, -1 };
* the simulator rather than a desktop tool and want to use the device.
*/
static enum {
- kLogUninitialized, kLogNotAvailable, kLogAvailable
+ kLogUninitialized, kLogNotAvailable, kLogAvailable
} g_log_status = kLogUninitialized;
int __android_log_dev_available(void)
{
@@ -189,7 +189,7 @@ int __android_log_buf_write(int bufID, int prio, const char *tag, const char *ms
int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap)
{
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_BUF_SIZE];
vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
@@ -223,12 +223,23 @@ int __android_log_buf_print(int bufID, int prio, const char *tag, const char *fm
void __android_log_assert(const char *cond, const char *tag,
const char *fmt, ...)
{
- va_list ap;
- char buf[LOG_BUF_SIZE];
+ char buf[LOG_BUF_SIZE];
- va_start(ap, fmt);
- vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
- va_end(ap);
+ 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
+ strcpy(buf, "Unspecified assertion failed");
+ }
__android_log_write(ANDROID_LOG_FATAL, tag, buf);