1c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
2c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $License:
3c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    Copyright (C) 2011 InvenSense Corporation, All Rights Reserved.
4c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro $
5c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
6c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
7c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
8c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * This file incorporates work covered by the following copyright and
9c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * permission notice:
10c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
11c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Copyright (C) 2005 The Android Open Source Project
12c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
13c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Licensed under the Apache License, Version 2.0 (the "License");
14c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * you may not use this file except in compliance with the License.
15c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * You may obtain a copy of the License at
16c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
17c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *      http://www.apache.org/licenses/LICENSE-2.0
18c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
19c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Unless required by applicable law or agreed to in writing, software
20c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * distributed under the License is distributed on an "AS IS" BASIS,
21c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * See the License for the specific language governing permissions and
23c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * limitations under the License.
24c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
25c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
26c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
27c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * C/C++ logging functions.  See the logging documentation for API details.
28c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
29c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * We'd like these to be available from C code (in case we import some from
30c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * somewhere), so this has a C interface.
31c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
32c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * The output will be correct when the log file is shared between multiple
33c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * threads and/or multiple processes so long as the operating system
34c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * supports O_APPEND.  These calls have mutex-protected data structures
35c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * and so are NOT reentrant.  Do not use MPL_LOG in a signal handler.
36c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
37c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef _LIBS_CUTILS_MPL_LOG_H
38c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define _LIBS_CUTILS_MPL_LOG_H
39c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
40c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdlib.h>
41c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <stdarg.h>
42c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
43c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef ANDROID
44c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef NDK_BUILD
45c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include "log_macros.h"
46c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
47c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <utils/Log.h>		/* For the LOG macro */
48c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
49c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
50c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
51c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
52c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#include <linux/kernel.h>
53c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
54c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
55c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus
56c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroextern "C" {
57c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
58c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
599b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
609b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
619b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define LOG ALOG
629b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
639b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro
64c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if defined ANDROID_JELLYBEAN || defined ANDROID_KITKAT
65c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOG ALOG
66c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOG_ERRROR ANDROID_LOG_ERROR
67c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
68c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
69c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* --------------------------------------------------------------------- */
70c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
71c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
72c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Normally we strip MPL_LOGV (VERBOSE messages) from release builds.
73c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * You can modify this (for example with "#define MPL_LOG_NDEBUG 0"
74c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * at the top of your source file) to change that behavior.
75c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
76c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOG_NDEBUG
77c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef NDEBUG
78c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_NDEBUG 1
79c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
80c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_NDEBUG 0
81c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
82c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
83c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
84c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
85c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_UNKNOWN MPL_LOG_VERBOSE
86c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_DEFAULT KERN_DEFAULT
87c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_VERBOSE KERN_CONT
88c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_DEBUG   KERN_NOTICE
89c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_INFO    KERN_INFO
90c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_WARN    KERN_WARNING
91c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_ERROR   KERN_ERR
92c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_SILENT  MPL_LOG_VERBOSE
93c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
94c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
95c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	/* Based off the log priorities in android
96c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	   /system/core/include/android/log.h */
979b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
989b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
999b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_UNKNOWN		LOG_UNKNOWN
1009b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_DEFAULT		LOG_DEFAULT
1019b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_VERBOSE		LOG_VERBOSE
1029b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_DEBUG		LOG_DEBUG
1039b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_INFO		LOG_INFO
1049b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_WARN		LOG_WARN
1059b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_ERROR		LOG_ERROR
1069b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd #define MPL_LOG_FATAL		LOG_FATAL
1079b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOG_SILENT		LOG_SILENT
1089b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
109c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_UNKNOWN		(0)
110c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_DEFAULT		(1)
111c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_VERBOSE		(2)
112c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_DEBUG		(3)
113c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_INFO		(4)
114c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_WARN		(5)
115c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_ERROR		(6)
116c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_SILENT		(8)
117c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
1189b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
119c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
120c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
121c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
122c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * This is the local tag used for the following simplified
123c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * logging macros.  You can change this preprocessor definition
124c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * before using the other macros to change the tag.
125c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
126c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOG_TAG
127c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
128c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_TAG
129c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
130c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_TAG NULL
131c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
132c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
133c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
134c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* --------------------------------------------------------------------- */
135c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
136c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
137c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Simplified macro to send a verbose log message using the current MPL_LOG_TAG.
138c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
139c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGV
140c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if MPL_LOG_NDEBUG
141c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef _WIN32
142c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGV(fmt, ...)						\
143c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	do {								\
144c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        __pragma (warning(suppress : 4127 )) \
145c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		if (0)							\
146c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro			MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\
147c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro            __pragma (warning(suppress : 4127 )) \
148c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    } while (0)
149c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
1509b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
1519b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
1529b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGV(fmt, ...)						\
1539b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro	do {								\
1549b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro		if (0)							\
1559b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro			MPL_LOG(MPL_LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\
1569b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro    } while (0)
1579b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
158c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGV(fmt, ...)						\
159c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	do {								\
160c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		if (0)							\
161c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro			MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\
162c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    } while (0)
163c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
1649b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
1659b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
1669b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
1679b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
1689b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGV(fmt, ...) MPL_LOG(MPL_LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
169c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
170c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGV(fmt, ...) MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
171c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
172c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
1739b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
174c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
175c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef CONDITION
176c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define CONDITION(cond)     ((cond) != 0)
177c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
178c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
179c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGV_IF
180c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if MPL_LOG_NDEBUG
181c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGV_IF(cond, fmt, ...)  \
182c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	do { if (0) MPL_LOG(fmt, ##__VA_ARGS__); } while (0)
183c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
184c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGV_IF(cond, fmt, ...) \
185c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))						\
186c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \
187c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
188c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
189c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
190c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
191c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
192c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Simplified macro to send a debug log message using the current MPL_LOG_TAG.
193c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
194c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGD
1959b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
1969b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
1979b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGD(fmt, ...) MPL_LOG(MPL_LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
1989b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
199c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGD(fmt, ...) MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
200c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
2019b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
202c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
203c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGD_IF
204c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGD_IF(cond, fmt, ...) \
205c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))					       \
206c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__)  \
207c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
208c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
209c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
210c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
211c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Simplified macro to send an info log message using the current MPL_LOG_TAG.
212c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
213c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGI
214c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
215c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGI(fmt, ...) pr_info(KERN_INFO MPL_LOG_TAG fmt, ##__VA_ARGS__)
216c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
2179b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
2189b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
2199b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGI(fmt, ...) MPL_LOG(MPL_LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
2209b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
221c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGI(fmt, ...) MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
222c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
223c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
2249b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
225c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
226c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGI_IF
227c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGI_IF(cond, fmt, ...) \
228c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))                                              \
229c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__)   \
230c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
231c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
232c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
233c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
234c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Simplified macro to send a warning log message using the current MPL_LOG_TAG.
235c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
236c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGW
237c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
238c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGW(fmt, ...) printk(KERN_WARNING MPL_LOG_TAG fmt, ##__VA_ARGS__)
239c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
240c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGW(fmt, ...) MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
241c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
242c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
243c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
244c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGW_IF
245c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGW_IF(cond, fmt, ...) \
246c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))					       \
247c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__)   \
248c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
249c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
250c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
251c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
252c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Simplified macro to send an error log message using the current MPL_LOG_TAG.
253c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
254c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGE
255c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __KERNEL__
256c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGE(fmt, ...) printk(KERN_ERR MPL_LOG_TAG fmt, ##__VA_ARGS__)
257c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
2589b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
2599b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
2609b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGE(fmt, ...) MPL_LOG(MPL_LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
2619b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
262c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGE(fmt, ...) MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__)
263c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
264c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
2659b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
266c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
267c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOGE_IF
2689b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#if defined ANDROID_LOLLIPOP
2699b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro//--yd
2709b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#define MPL_LOGE_IF(cond, fmt, ...) \
2719b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro	((CONDITION(cond))					       \
2729b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro		? MPL_LOG(MPL_LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__)  \
2739b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro		: (void)0)
2749b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#else
275c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOGE_IF(cond, fmt, ...) \
276c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))					       \
277c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__)  \
278c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
279c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
2809b7ebb5143dd692c20fc9348ae999450133dad57Nick Vaccaro#endif
281c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
282c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* --------------------------------------------------------------------- */
283c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
284c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
285c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Log a fatal error.  If the given condition fails, this stops program
286c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * execution like a normal assertion, but also generating the given message.
287c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * It is NOT stripped from release builds.  Note that the condition test
288c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * is -inverted- from the normal assert() semantics.
289c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
290c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ...) \
291c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	((CONDITION(cond))					   \
292c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		? ((void)android_printAssert(#cond, MPL_LOG_TAG,   \
293c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro						fmt, ##__VA_ARGS__))	\
294c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		: (void)0)
295c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
296c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_ALWAYS_FATAL(fmt, ...) \
297c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	(((void)android_printAssert(NULL, MPL_LOG_TAG, fmt, ##__VA_ARGS__)))
298c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
299c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
300c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Versions of MPL_LOG_ALWAYS_FATAL_IF and MPL_LOG_ALWAYS_FATAL that
301c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * are stripped out of release builds.
302c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
303c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#if MPL_LOG_NDEBUG
304c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_FATAL_IF(cond, fmt, ...)				\
305c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	do {								\
306c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		if (0)							\
307c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro			MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__); \
308c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	} while (0)
309c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_FATAL(fmt, ...)						\
310c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	do {								\
311c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		if (0)							\
312c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro			MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__)	\
313c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	} while (0)
314c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
315c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_FATAL_IF(cond, fmt, ...) \
316c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__)
317c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_FATAL(fmt, ...) \
318c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__)
319c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
320c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
321c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
322c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Assertion that generates a log message when the assertion fails.
323c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Stripped out of release builds.  Uses the current MPL_LOG_TAG.
324c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
325c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_ASSERT(cond, fmt, ...)			\
326c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	MPL_LOG_FATAL_IF(!(cond), fmt, ##__VA_ARGS__)
327c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
328c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* --------------------------------------------------------------------- */
329c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
330c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
331c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Basic log message macro.
332c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
333c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Example:
334c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *  MPL_LOG(MPL_LOG_WARN, NULL, "Failed with error %d", errno);
335c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
336c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * The second argument may be NULL or "" to indicate the "global" tag.
337c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
338c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOG
339c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG(priority, tag, fmt, ...)		\
340c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	MPL_LOG_PRI(priority, tag, fmt, ##__VA_ARGS__)
341c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
342c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
343c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
344c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Log macro that allows you to specify a number for the priority.
345c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
346c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOG_PRI
347c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef ANDROID
348c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_PRI(priority, tag, fmt, ...) \
349c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	LOG(priority, tag, fmt, ##__VA_ARGS__)
350c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#elif defined __KERNEL__
351c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_PRI(priority, tag, fmt, ...) \
352c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	pr_debug(MPL_##priority tag fmt, ##__VA_ARGS__)
353c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
354c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_PRI(priority, tag, fmt, ...) \
355c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	_MLPrintLog(MPL_##priority, tag, fmt, ##__VA_ARGS__)
356c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
357c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
358c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
359c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
360c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * Log macro that allows you to pass in a varargs ("args" is a va_list).
361c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
362c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef MPL_LOG_PRI_VA
363c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef ANDROID
364c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \
365c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	android_vprintLog(priority, NULL, tag, fmt, args)
366c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#elif defined __KERNEL__
367c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* not allowed in the Kernel because there is no dev_dbg that takes a va_list */
368c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
369c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \
370c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	_MLPrintVaLog(priority, NULL, tag, fmt, args)
371c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
372c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
373c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
374c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* --------------------------------------------------------------------- */
375c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
376c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/*
377c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * ===========================================================================
378c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro *
379c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro * The stuff in the rest of this file should not be used directly.
380c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro */
381c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
382c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifndef ANDROID
383c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint _MLPrintLog(int priority, const char *tag, const char *fmt,	...);
384c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint _MLPrintVaLog(int priority, const char *tag, const char *fmt, va_list args);
385c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* Final implementation of actual writing to a character device */
386c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaroint _MLWriteLog(const char *buf, int buflen);
387c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
388c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
389c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccarostatic inline void __print_result_location(int result,
390c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro					   const char *file,
391c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro					   const char *func, int line)
392c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro{
393c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	MPL_LOGE("%s|%s|%d returning %d\n", file, func, line, result);
394c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
395c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
396c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef _WIN32
397c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro/* The pragma removes warning about expression being constant */
398c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOG_RESULT_LOCATION(condition) \
399c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    do {								\
400c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		__print_result_location((int)(condition), __FILE__,	\
401c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro					__func__, __LINE__);		\
402c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        __pragma (warning(suppress : 4127 )) \
403c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	} while (0)
404c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#else
405c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define LOG_RESULT_LOCATION(condition) \
406c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    do {								\
407c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro		__print_result_location((int)(condition), __FILE__,	\
408c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro					__func__, __LINE__);		\
409c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro	} while (0)
410c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
411c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
412c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
413c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#define INV_ERROR_CHECK(r_1329) \
414c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    if (r_1329) { \
415c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        LOG_RESULT_LOCATION(r_1329); \
416c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro        return r_1329; \
417c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro    }
418c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro
419c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#ifdef __cplusplus
420c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro}
421c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif
422c3d4ca9f2df5ddf9894b36d1554fdfc95d625d3fNick Vaccaro#endif				/* _LIBS_CUTILS_MPL_LOG_H */
423