Home | History | Annotate | Download | only in linux
      1 /*
      2  $License:
      3    Copyright 2011 InvenSense, Inc.
      4 
      5  Licensed under the Apache License, Version 2.0 (the "License");
      6  you may not use this file except in compliance with the License.
      7  You may obtain a copy of the License at
      8 
      9  http://www.apache.org/licenses/LICENSE-2.0
     10 
     11  Unless required by applicable law or agreed to in writing, software
     12  distributed under the License is distributed on an "AS IS" BASIS,
     13  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  See the License for the specific language governing permissions and
     15  limitations under the License.
     16   $
     17  */
     18 /******************************************************************************
     19  * $Id: log_linux.c 5629 2011-06-11 03:13:08Z mcaramello $
     20  ******************************************************************************/
     21 
     22 /**
     23  * @defgroup MPL_LOG
     24  * @brief Logging facility for the MPL
     25  *
     26  * @{
     27  *      @file     log.c
     28  *      @brief    Core logging facility functions.
     29  *
     30  *
     31 **/
     32 
     33 #include <stdio.h>
     34 #include <string.h>
     35 #include "log.h"
     36 #include "mltypes.h"
     37 
     38 #define LOG_BUFFER_SIZE (256)
     39 
     40 #ifdef WIN32
     41 #define snprintf _snprintf
     42 #define vsnprintf _vsnprintf
     43 #endif
     44 
     45 int _MLPrintLog (int priority, const char* tag, const char* fmt, ...)
     46 {
     47     va_list ap;
     48     int result;
     49 
     50     va_start(ap, fmt);
     51     result = _MLPrintVaLog(priority,tag,fmt,ap);
     52     va_end(ap);
     53 
     54     return result;
     55 }
     56 
     57 int _MLPrintVaLog(int priority, const char* tag, const char* fmt, va_list args)
     58 {
     59     int result;
     60     char buf[LOG_BUFFER_SIZE];
     61     char new_fmt[LOG_BUFFER_SIZE];
     62     char priority_char;
     63 
     64     if (NULL == fmt) {
     65         fmt = "";
     66     }
     67 
     68     switch (priority) {
     69     case MPL_LOG_UNKNOWN:
     70         priority_char = 'U';
     71         break;
     72     case MPL_LOG_VERBOSE:
     73         priority_char = 'V';
     74         break;
     75     case MPL_LOG_DEBUG:
     76         priority_char = 'D';
     77         break;
     78     case MPL_LOG_INFO:
     79         priority_char = 'I';
     80         break;
     81     case MPL_LOG_WARN:
     82         priority_char = 'W';
     83         break;
     84     case MPL_LOG_ERROR:
     85         priority_char = 'E';
     86         break;
     87     case MPL_LOG_SILENT:
     88         priority_char = 'S';
     89         break;
     90     case MPL_LOG_DEFAULT:
     91     default:
     92         priority_char = 'D';
     93         break;
     94     };
     95 
     96     result = snprintf(new_fmt, sizeof(new_fmt), "%c/%s:%s",
     97                        priority_char, tag, fmt);
     98     if (result <= 0) {
     99         return INV_ERROR_LOG_MEMORY_ERROR;
    100     }
    101     result = vsnprintf(buf,sizeof(buf),new_fmt, args);
    102     if (result <= 0) {
    103         return INV_ERROR_LOG_OUTPUT_ERROR;
    104     }
    105 
    106     result = _MLWriteLog(buf, strlen(buf));
    107     return INV_SUCCESS;
    108 }
    109 
    110 /**
    111  * @}
    112 **/
    113 
    114 
    115