HomePort
log.c
Go to the documentation of this file.
1 /*
2  * Copyright 2011 Aalborg University. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are
5  * permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice, this list of
8  * conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11  * of conditions and the following disclaimer in the documentation and/or other materials
12  * provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY Aalborg University ''AS IS'' AND ANY EXPRESS OR IMPLIED
15  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Aalborg University OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  * The views and conclusions contained in the software and documentation are those of the
25  * authors and should not be interpreted as representing official policies, either expressed
26  */
27 
28 #include "log.h"
29 #include <stdio.h>
30 #include <string.h>
31 
32 hpd_error_t log_logf(const char *module, hpd_log_level_t level, const char *file, int line, const char *fmt, ...)
33 {
34  hpd_error_t rc;
35  va_list vp;
36  va_start(vp, fmt);
37  rc = log_vlogf(module, level, file, line, fmt, vp);
38  va_end(vp);
39  return rc;
40 }
41 
42 hpd_error_t log_vlogf(const char *module, hpd_log_level_t level, const char *file, int line, const char *fmt, va_list vp)
43 {
44  FILE *stream;
45  char *type;
46 
47  // TODO Something more fancy than just printing...
48  switch (level) {
49  case HPD_L_ERROR:
50  stream = stderr;
51  type = "ERROR";
52  break;
53  case HPD_L_WARN:
54  stream = stderr;
55  type = "WARNING";
56  break;
57  case HPD_L_INFO:
58  stream = stdout;
59  type = "INFO";
60  break;
61  case HPD_L_DEBUG:
62  stream = stderr;
63  type = "DEBUG";
64  break;
65  case HPD_L_VERBOSE:
66  stream = stdout;
67  type = "VERBOSE";
68  break;
69  default:
70  LOG_RETURN(HPD_E_ARGUMENT, "Unknown log level.");
71  }
72 
73  fprintf(stream, "[%s]%*s %8s: ", module, (int) (16 - strlen(module)), "", type);
74  int len = vfprintf(stream, fmt, vp);
75  fprintf(stream, "%*s %s:%d\n", 128-len, "", file, line);
76 
77  return HPD_E_SUCCESS;
78 }
enum hpd_log_level hpd_log_level_t
Definition: hpd_types.h:169
hpd_error_t log_logf(const char *module, hpd_log_level_t level, const char *file, int line, const char *fmt,...)
Definition: log.c:32
enum hpd_error hpd_error_t
Definition: hpd_types.h:167
#define LOG_RETURN(E, FMT,...)
Definition: log.h:48
hpd_error_t log_vlogf(const char *module, hpd_log_level_t level, const char *file, int line, const char *fmt, va_list vp)
Definition: log.c:42