Make sure malloc() is declared.
[tinc] / lib / utils.c
1 /*
2     utils.c -- gathering of some stupid small functions
3     Copyright (C) 1999-2001 Ivo Timmermans <zarq@iname.com>
4                   2000,2001 Guus Sliepen <guus@sliepen.eu.org>
5
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #include "config.h"
22
23 #include <sys/types.h>
24 #include <ctype.h>
25 #include <string.h>
26
27 #include <utils.h>
28 #include <syslog.h>
29 #include <xalloc.h>
30
31 #ifdef ENABLE_TRACING
32 volatile int (cp_line[]) = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
33 volatile char (*cp_file[]) = {"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"};
34 volatile int cp_index = 0;
35 #endif
36
37 char *hexadecimals = "0123456789ABCDEF";
38
39 int charhex2bin(char c)
40 {
41         if(isdigit(c))
42                 return c - '0';
43         else
44                 return toupper(c) - 'A' + 10;
45 }
46
47
48 void hex2bin(char *src, char *dst, int length)
49 {
50         int i;
51         for(i = 0; i < length; i++)
52                 dst[i] = charhex2bin(src[i * 2]) * 16 + charhex2bin(src[i * 2 + 1]);
53 }
54
55 void bin2hex(char *src, char *dst, int length)
56 {
57         int i;
58         for(i = length - 1; i >= 0; i--) {
59                 dst[i * 2 + 1] = hexadecimals[(unsigned char) src[i] & 15];
60                 dst[i * 2] = hexadecimals[(unsigned char) src[i] >> 4];
61         }
62 }
63
64 #ifdef ENABLE_TRACING
65 void cp_trace()
66 {
67         syslog(LOG_DEBUG, "Checkpoint trace: %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d <- %s:%d...",
68                    cp_file[(cp_index + 15) % 16], cp_line[(cp_index + 15) % 16],
69                    cp_file[(cp_index + 14) % 16], cp_line[(cp_index + 14) % 16],
70                    cp_file[(cp_index + 13) % 16], cp_line[(cp_index + 13) % 16],
71                    cp_file[(cp_index + 12) % 16], cp_line[(cp_index + 12) % 16],
72                    cp_file[(cp_index + 11) % 16], cp_line[(cp_index + 11) % 16],
73                    cp_file[(cp_index + 10) % 16], cp_line[(cp_index + 10) % 16],
74                    cp_file[(cp_index + 9) % 16], cp_line[(cp_index + 9) % 16],
75                    cp_file[(cp_index + 8) % 16], cp_line[(cp_index + 8) % 16],
76                    cp_file[(cp_index + 7) % 16], cp_line[(cp_index + 7) % 16],
77                    cp_file[(cp_index + 6) % 16], cp_line[(cp_index + 6) % 16],
78                    cp_file[(cp_index + 5) % 16], cp_line[(cp_index + 5) % 16],
79                    cp_file[(cp_index + 4) % 16], cp_line[(cp_index + 4) % 16],
80                    cp_file[(cp_index + 3) % 16], cp_line[(cp_index + 3) % 16],
81                    cp_file[(cp_index + 2) % 16], cp_line[(cp_index + 2) % 16],
82                    cp_file[(cp_index + 1) % 16], cp_line[(cp_index + 1) % 16],
83                    cp_file[cp_index], cp_line[cp_index]
84                 );
85 }
86 #endif