PUD: import nmealib v0.6.9
[olsrd.git] / lib / pud / nmealib / src / context.c
1 /*
2  * This file is part of nmealib.
3  *
4  * Copyright (c) 2008 Timur Sinitsyn
5  * Copyright (c) 2011 Ferry Huberts
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <nmea/context.h>
22
23 #include <stdarg.h>
24 #include <stdio.h>
25
26 #include <nmea/config.h>
27
28 nmeaPROPERTY * nmea_property(void) {
29     static nmeaPROPERTY prop = {
30         0, 0, NMEA_DEF_PARSEBUFF
31         };
32
33     return &prop;
34 }
35
36 void nmea_trace(const char *str, ...)
37 {
38     int size;
39     va_list arg_list;
40     char buff[NMEA_DEF_PARSEBUFF];
41     nmeaTraceFunc func = nmea_property()->trace_func;
42
43     if(func)
44     {
45         va_start(arg_list, str);
46         size = NMEA_POSIX(vsnprintf)(&buff[0], NMEA_DEF_PARSEBUFF - 1, str, arg_list);
47         va_end(arg_list);
48
49         if(size > 0)
50             (*func)(&buff[0], size);
51     }
52 }
53
54 void nmea_trace_buff(const char *buff, int buff_size)
55 {
56     nmeaTraceFunc func = nmea_property()->trace_func;
57     if(func && buff_size)
58         (*func)(buff, buff_size);
59 }
60
61 void nmea_error(const char *str, ...)
62 {
63     int size;
64     va_list arg_list;
65     char buff[NMEA_DEF_PARSEBUFF];
66     nmeaErrorFunc func = nmea_property()->error_func;
67
68     if(func)
69     {
70         va_start(arg_list, str);
71         size = NMEA_POSIX(vsnprintf)(&buff[0], NMEA_DEF_PARSEBUFF - 1, str, arg_list);
72         va_end(arg_list);
73
74         if(size > 0)
75             (*func)(&buff[0], size);
76     }
77 }