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