C++程序  |  115行  |  2.54 KB

/*
 $License:
   Copyright 2011 InvenSense, Inc.

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
  $
 */
/******************************************************************************
 * $Id: log_linux.c 5629 2011-06-11 03:13:08Z mcaramello $ 
 ******************************************************************************/
 
/**
 * @defgroup MPL_LOG
 * @brief Logging facility for the MPL
 *
 * @{
 *      @file     log.c
 *      @brief    Core logging facility functions.
 *
 *
**/

#include <stdio.h>
#include <string.h>
#include "log.h"
#include "mltypes.h"

#define LOG_BUFFER_SIZE (256)

#ifdef WIN32
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif

int _MLPrintLog (int priority, const char* tag, const char* fmt, ...)
{
    va_list ap;
    int result;

    va_start(ap, fmt);
    result = _MLPrintVaLog(priority,tag,fmt,ap);
    va_end(ap);

    return result;
}

int _MLPrintVaLog(int priority, const char* tag, const char* fmt, va_list args)
{
    int result;
    char buf[LOG_BUFFER_SIZE];
    char new_fmt[LOG_BUFFER_SIZE];
    char priority_char;

    if (NULL == fmt) {
        fmt = "";
    }

    switch (priority) {
    case MPL_LOG_UNKNOWN:
        priority_char = 'U';
        break;
    case MPL_LOG_VERBOSE:
        priority_char = 'V';
        break;
    case MPL_LOG_DEBUG:
        priority_char = 'D';
        break;
    case MPL_LOG_INFO:
        priority_char = 'I';
        break;
    case MPL_LOG_WARN:
        priority_char = 'W';
        break;
    case MPL_LOG_ERROR:
        priority_char = 'E';
        break;
    case MPL_LOG_SILENT:
        priority_char = 'S';
        break;
    case MPL_LOG_DEFAULT:
    default:
        priority_char = 'D';
        break;
    };

    result = snprintf(new_fmt, sizeof(new_fmt), "%c/%s:%s", 
                       priority_char, tag, fmt);
    if (result <= 0) {
        return INV_ERROR_LOG_MEMORY_ERROR;
    }
    result = vsnprintf(buf,sizeof(buf),new_fmt, args);
    if (result <= 0) {
        return INV_ERROR_LOG_OUTPUT_ERROR;
    }
    
    result = _MLWriteLog(buf, strlen(buf));
    return INV_SUCCESS;
}

/**
 * @}
**/